Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
Одно из двух 16.12.04 14:15 Число просмотров: 2464
Автор: amirul <Serge> Статус: The Elderman
|
> Тока я вот не пойму как это делается, вроде всё также и в > моём драйвере, однако мой драйвер вроде как можно где > угодно открыть Либо при создании девайса указан экслюзивный доступ и кто-то держит девайс открытым, либо для девайса в реестре указан security_descriptor, в котором запрещен доступ от пользователя/группы которым ты пытаешься открыть девайс.
Если последнее, то смотри функции SetupDiGetDeviceRegistryProperty/SetupDiSetDeviceRegistryProperty с пропертей SPDRP_SECURITY. В реестре она хранится в подключе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<DriverServiceName>\Security
Где <DriverServiceName> - имя сервися для твоего драйвера
|
<programming>
|
[C++] Драйвера в NT 15.12.04 20:03
Автор: ih8u <i hate you> Статус: Member Отредактировано 15.12.04 20:07 Количество правок: 1
|
Ну вот значит я написал драйвер под NT, тоесть *.sys (Я правда сижу под ХР, но думаю разници особой нету)
Значит создаю сервис c параметрами SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL
Запускаю драйвер, смарю в DbgView как он загружаеца, вобщем работает.
Далее чтобы посылать команды через DeviceIoControl делаю так:
HANDLE hDrv = CreateFile("\\\\.\\MyDriver", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
А оно мне возвращает hDrv == 0xFFFFFFFF
Код ошибки - 87
Параметр задан неверно
Как исправлять не понимаю нифига, можт кто знает???
:((
ЗЫ И вот ещё вопрос:
Можно ли в другой, не мой существующий драйвер посылать таким образом его же команды??
|
|
[C++] По первому вопросу - NKritsky уже сказал 16.12.04 12:56
Автор: amirul <Serge> Статус: The Elderman
|
> HANDLE hDrv = CreateFile("\\\\.\\MyDriver", GENERIC_READ | > GENERIC_WRITE, 0, NULL, OPEN_EXISTING, > FILE_ATTRIBUTE_NORMAL,NULL); > > А оно мне возвращает hDrv == 0xFFFFFFFF > Код ошибки - 87 > Параметр задан неверно Посмотри заполняешь ли ты в DriverObject-е диспатчер для IRP_MJ_CREATE, а также посмотри не возвращает ли твой DispatchCreate STATUS_INVALID_PARAMETER
> ЗЫ И вот ещё вопрос: > Можно ли в другой, не мой существующий драйвер посылать > таким образом его же команды?? Его же это чьи? Твоего драйвера? Если так - то нельзя. Все IOCTL-коды генерируются средой или забиваются вручную на этапе программирования. Ни на какие другие коды внятного ответа не будет (в лучшем случае STATUS_INVALID_PARAMETER). А вообще открыть можно любой девайс (если хватает прав) и посылать этому девайсу ioctl-ы этого самого девайса.
|
| |
Вопрос снят, да, я забыл заполнить irp_mj_create 16.12.04 13:40
Автор: ih8u <i hate you> Статус: Member
|
Вопрос снят, да, я забыл заполнить IRP_MJ_CREATE
Просто думал что и так драйвер работает - ну тоесть коечо сам делает и всё ОК
> Посмотри заполняешь ли ты в DriverObject-е диспатчер для > IRP_MJ_CREATE, а также посмотри не возвращает ли твой > DispatchCreate STATUS_INVALID_PARAMETER > > > ЗЫ И вот ещё вопрос: > > Можно ли в другой, не мой существующий драйвер > посылать > > таким образом его же команды?? > Его же это чьи? Твоего драйвера? Если так - то нельзя. Все > IOCTL-коды генерируются средой или забиваются вручную на > этапе программирования. Ни на какие другие коды внятного > ответа не будет (в лучшем случае STATUS_INVALID_PARAMETER). > А вообще открыть можно любой девайс (если хватает прав) и > посылать этому девайсу ioctl-ы этого самого девайса.
Его же, значит есно не мои а того драйвера. Есть его сурсы и сурсы управляющей проги где все IOCTL коды прописаны.
А вот открыть его девайс не получаеца - код ошибки при вызове - CreateFile("\\\\.\\\") - пятёрочка - отказ в доступе.
Тока я вот не пойму как это делается, вроде всё также и в моём драйвере, однако мой драйвер вроде как можно где угодно открыть
|
| | |
Одно из двух 16.12.04 14:15
Автор: amirul <Serge> Статус: The Elderman
|
> Тока я вот не пойму как это делается, вроде всё также и в > моём драйвере, однако мой драйвер вроде как можно где > угодно открыть Либо при создании девайса указан экслюзивный доступ и кто-то держит девайс открытым, либо для девайса в реестре указан security_descriptor, в котором запрещен доступ от пользователя/группы которым ты пытаешься открыть девайс.
Если последнее, то смотри функции SetupDiGetDeviceRegistryProperty/SetupDiSetDeviceRegistryProperty с пропертей SPDRP_SECURITY. В реестре она хранится в подключе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<DriverServiceName>\Security
Где <DriverServiceName> - имя сервися для твоего драйвера
|
|
[C++] Странно 15.12.04 20:35
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
|
Всё должно работать. А ты можешь смотреть IRP приходящие в твой драйвер? Доходит ли до него IRP_MJ_CREATE? И обрабатывается ли он корректно?
|
|
|