информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[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? И обрабатывается ли он корректно?
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach