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





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




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


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