Вопрос снят, да, я забыл заполнить IRP_MJ_CREATE
Просто думал что и так драйвер работает - ну тоесть коечо сам делает и всё ОК
> Посмотри заполняешь ли ты в DriverObject-е диспатчер для > IRP_MJ_CREATE, а также посмотри не возвращает ли твой > DispatchCreate STATUS_INVALID_PARAMETER > > > ЗЫ И вот ещё вопрос: > > Можно ли в другой, не мой существующий драйвер > посылать > > таким образом его же команды?? > Его же это чьи? Твоего драйвера? Если так - то нельзя. Все > IOCTL-коды генерируются средой или забиваются вручную на > этапе программирования. Ни на какие другие коды внятного > ответа не будет (в лучшем случае STATUS_INVALID_PARAMETER). > А вообще открыть можно любой девайс (если хватает прав) и > посылать этому девайсу ioctl-ы этого самого девайса.
Его же, значит есно не мои а того драйвера. Есть его сурсы и сурсы управляющей проги где все IOCTL коды прописаны.
А вот открыть его девайс не получаеца - код ошибки при вызове - CreateFile("\\\\.\\\") - пятёрочка - отказ в доступе.
Тока я вот не пойму как это делается, вроде всё также и в моём драйвере, однако мой драйвер вроде как можно где угодно открыть
Ну вот значит я написал драйвер под 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 > Параметр задан неверно Посмотри заполняешь ли ты в DriverObject-е диспатчер для IRP_MJ_CREATE, а также посмотри не возвращает ли твой DispatchCreate STATUS_INVALID_PARAMETER
> ЗЫ И вот ещё вопрос: > Можно ли в другой, не мой существующий драйвер посылать > таким образом его же команды?? Его же это чьи? Твоего драйвера? Если так - то нельзя. Все IOCTL-коды генерируются средой или забиваются вручную на этапе программирования. Ни на какие другие коды внятного ответа не будет (в лучшем случае STATUS_INVALID_PARAMETER). А вообще открыть можно любой девайс (если хватает прав) и посылать этому девайсу ioctl-ы этого самого девайса.
Вопрос снят, да, я забыл заполнить irp_mj_create16.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