информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Спасибо за помощь 02.02.03 15:31  Число просмотров: 1098
Автор: oleaster Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1. Этот пример так и не заработал. Сам драйвер грузится, а ассоциированная ссылка не создается, т. е. winobj в разделе "driver" appdrv отображает, но в разделе "??" Win32Name не появляется. (Я грузил его вручную (поставил 3))

2. Я собрал пример "imca" из DDK , и вставил туда свой обработчик команд , затем произвел ту же самую последовательность действий, что и для appdrv ,- все заработало: и в разделе "driver" имя драйвера появляется, и в разделе "??" ассоциированные имена прописываются, и мой тест ioctl-а нормально сработал.

- У SoftIce кроме команды driver есть еще что-то - а то в этом случае имя *.sys файла не понятно какое.
- Я не помню какую-то софтину себе ставил (я подумал может это SoftICE Driver Suite была, сейчас не могу посмотреть - у меня CDROM не работает) , она в VC6 на "панель" ставила мастер создания драйверов, в результате работы этого мастера в рабочем пространстве создавалось два проекта один с драйвером, а другой с программой тестирования драйвера. Я вот хотел спросить, при построении проекта у меня почему-то всегда создавался только экзешник, а драйвер не строился, чтобы я не делал, может ты понял о чем это я ... ?
<programming>
драйвер 01.02.03 16:00  
Автор: oleaster Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1. Я взял вот этот драйвер (из книги Рудаков, Финогенов "Язык ассемблера") - собрал его (собирал и build , и VC 6)

#include "C:\NTDDK\inc\ddk\ntddk.h"
#define NT_DEVICE_NAME L"\\Device\\DeviceName"
#define WIN32_DEVICE_NAME L"\\DosDevice\\Win32Name"

#define IOCTL_ADDR((0x800<<2)0x22<<16))

//#define IOCTL_ADDR CTL_CODE (FILE_DEVICE_UNKNOWN, 0X800, METHOD_BUFFERED, FILE_ANY_ACCESS)

NTSTATUS CtlCreate (IN PDEVICE_OBJECT,IN PIRP);
NTSTATUS CtlClose (IN PDEVICE_OBJECT,IN PIRP);
NTSTATUS CtlDispatch (IN PDEVICE_OBJECT,IN PIRP);

NTSTATUS DriverEntry (IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) {
PDEVICE_OBJECT pDeviceObject;
UNICODE_STRING uniNtName;
UNICODE_STRING uniWin32Name;

RtlInitUnicodeString (&uniNtName, NT_DEVICE_NAME);
RtlInitUnicodeString (&uniWin32Name, WIN32_DEVICE_NAME);

IoCreateSymbolicLink (&uniNtName, &uniWin32Name);

IoCreateDevice (pDriverObject, 0, &uniNtName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDeviceObject);

pDriverObject->MajorFunction [IRP_MJ_CREATE] = CtlCreate;
pDriverObject->MajorFunction [IRP_MJ_CLOSE] = CtlClose;
pDriverObject->MajorFunction [IRP_MJ_DEVICE_CONTROL] = CtlDispatch;
return STATUS_SUCCESS;
}

NTSTATUS CtlCreate (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp) {
pIrp->IoStatus.Status=STATUS_SUCCESS;
pIrp->IoStatus.Information=0;
IoCompleteRequest (pIrp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}

NTSTATUS CtlClose (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp) {
pIrp->IoStatus.Status=STATUS_SUCCESS;
pIrp->IoStatus.Information=0;
IoCompleteRequest (pIrp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}

NTSTATUS CtlDispatch (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp) {
PIO_STACK_LOCATION pIrpStack;
PULONG pIOBuffer;
pIrpStack=IoGetCurrentIrpStackLocation (pIrp);
pIOBuffer=pIrp->AssociatedIrp.SystemBuffer;

// switch (pIrpStack->Parameters.DeviceIoControl.IoControlCode) { case IOCTL_ADDR:

*pIOBuffer++=(ULONG) DriverEntry;
*pIOBuffer++=(ULONG) CtlCreate;
*pIOBuffer++=(ULONG) CtlClose;
*pIOBuffer=(ULONG) CtlDispatch;
pIrp->IoStatus.Information=16;

// break; }

pIrp->IoStatus.Status=STATUS_SUCCESS;
IoCompleteRequest(pIrp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}

2. Загрузил драйвер (пробовал загружать файлом APPDRV.INI и утилитой w2k_load.exe , которую нашел у Шрайбера

"Недокументированные возможности w2k")
// APPDRV.INI
\registry\machine\system\currentcontrolset\services\AppDrv
Type = REG_DWORD 0x00000001
Start = REG_DWORD 0x00000002
Group = Extended base
ErrorControl = REG_DWORD 0x00000001

3. Затем пытался обратиться к драйверу

#include "windows.h"
#include "stdio.h"

#define IOCTL_ADDR((0x800<<2)0x22<<16))

HANDLE hDrv=0;
DWORD cbRet;
ULONG DrvAddr[4];
char szText[80];

void _tmain(int argc, _TCHAR* argv[])
{
hDrv=CreateFile ("\\\\.\\Win32Name",

GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DeviceIoControl (hDrv,IOCTL_ADDR ,NULL,0,DrvAddr,12,&cbRet,NULL);
printf ("\n\r cbRet = %u hDrv = %u DriverEntry = %lX CtlCreate = %u CtlClose = %u CtlDispatch = %u

",cbRet,hDrv,DrvAddr[0],DrvAddr[1],DrvAddr[2],DrvAddr[3]);

}

А в ответ ничего - все переменные равны 0

- Что я не так сделал ?
- Какой утилитой можно посмотреть загруженные драйвера и ассоциированные с ними имена ?
- Не мог бы кто-нибудь дать исходняк работающего драйвера ("недеструктивного" характера ;) ) и программу общения с

ним. Понимаю, что весь DDK забит примерами, но мне хотелось бы пример от "первого лица".
- Расскажите как поставить драйвер на автозагрузку
Пропустил букву 01.02.03 19:00  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> #define WIN32_DEVICE_NAME L"\\DosDevice\\Win32Name"
Директория для досовских устройств (?? в NT-ях и выше) имеет симлинк \DosDevices
Короче пропустил букву - дальше не искал, мож и еще чего неправильно

> А в ответ ничего - все переменные равны 0
>
> - Что я не так сделал ?
> - Какой утилитой можно посмотреть загруженные драйвера и
> ассоциированные с ними имена ?
> - Не мог бы кто-нибудь дать исходняк работающего драйвера
> ("недеструктивного" характера ;) ) и программу общения с
>
> ним. Понимаю, что весь DDK забит примерами, но мне хотелось
> бы пример от "первого лица".
А драйвер от первого лица гораздо хуже чем тот же тостер - собири его и читай комментарии в сочетании с MSDN и наступит тебе счастье :-)))
> - Расскажите как поставить драйвер на автозагрузку
У драйвера есть режим загрузки (смотри ветку HKLM\SYSTEM\CurrentControlSet\Services) - записан в параметре Start: 0,1,2 - автоматическая загрузка (в чем отличие читай DDK Help), 3 - ручная, 4 - запрет загрузки.
Пропустил букву 01.02.03 21:29  
Автор: oleaster Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1. Это я от безысходности все варианты пробовал ;), а такой вариант
#define WIN32_DEVICE_NAME L"\\??\\Win32Name"
у меня тоже был - результат ноль. А при открытии
\\\\.\\Win32Name
Это правильный вариант ?

2. Утилиткой drivers из DDK я увидел, что разделы "code" и "data" для моего драйвера равны нулю - это нормально ? Какая утилитка может показать ассоциированные c драйвером имена ?

3. DDK хорошо читать, когда есть от чего отталкиваться ("предварительный" опыт нужен), а у меня не от чего ... Плюс вражеский язык....

В общем если бы мне помогли и докрутили мой "юбилейный" драйвер до работающей версии (когда он возвращает что-нибудь) я бы получил 100% "предварительный" опыт ... и стал бы задавать более умные вопросы ;)
Пропустил букву 02.02.03 01:59  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> 1. Это я от безысходности все варианты пробовал ;), а такой
> вариант
> #define WIN32_DEVICE_NAME L"\\??\\Win32Name"
> у меня тоже был - результат ноль. А при открытии
> \\\\.\\Win32Name
> Это правильный вариант ?
Для NT-ей всех мастей правильный (для 98-й и ME - неправильный)
Вообще, чтоб лучше понять что ты делаешь скачай утилитку winobj с sysinternals.com
Кстати, заодно можешь и посмотреть загрузился ли твой дривер по тому создалась ли ссылка в директории ?? (та которая Win32Name)

> 2. Утилиткой drivers из DDK я увидел, что разделы "code" и
> "data" для моего драйвера равны нулю - это нормально ?
> Какая утилитка может показать ассоциированные c драйвером
> имена ?
Самая хорошая утилитка для этого - SoftICE. Ну а из утилиток попроще, например, DeviceTree с http://www.osr.com


> 3. DDK хорошо читать, когда есть от чего отталкиваться
> ("предварительный" опыт нужен), а у меня не от чего ...
> Плюс вражеский язык....
Ты что изучаешь C на примере написания драйверов???!!!!!!!!
МУЖИК! :-)))) Уважаю :-)) А что нибудь типа "Hello, world!" как же?

> В общем если бы мне помогли и докрутили мой "юбилейный"
> драйвер до работающей версии (когда он возвращает
> что-нибудь) я бы получил 100% "предварительный" опыт ... и
> стал бы задавать более умные вопросы ;)
Самое интресное, что драйвер твой должен работать. На этот раз просмотрел полностью - ничего преступного нет. Скорее всего ты его или собираешь неправильно (хотя build-ом собрать неправильно трудно :-))) ), или, скорее, запускаешь неправильно. Вообще я бы посоветовал поставить Start = 3 (DEMAND_START - ручная загрузка) и попробовать его запустить. Набрать в командной строке:
net start appdrv
Если скажет что запустился нормально запускай свой тест ioctl-а - должен сработать там просто нечему работать неправильно. :-)))

ЗЫ: Только учти, так как твой драйвер не поддерживает выгрузку - перезапустить ты его уже не сможешь (например после перекомпиляции), придется перезагружаться. При этом после установки start = 3 (глянь все-таки в HKLM\SYSTEM\CurrentControlSet\Services\AppDrv для него Start должен стоять в 3), после этого надо перезагрузиться, так как он у тебя стоит в 2 (AUTO_START) и запускается всегда, а выгрузить его уже невозможно.
ЗЗЫ: Но в общем то я еще не совсем понимаю, что это за утилса такая w2k_load. Но по идее ей по-любому нужен еще и путь к файлу (appdrv.sys - ты его где-нибуть указываешь?). Раньше я драйвера загружал утилсой instdrv из NTDDK4.0, теперь утилсой DriverMonitor из SoftICE Driver Suite

Успехов на этом поприще
Спасибо за помощь 02.02.03 15:31  
Автор: oleaster Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1. Этот пример так и не заработал. Сам драйвер грузится, а ассоциированная ссылка не создается, т. е. winobj в разделе "driver" appdrv отображает, но в разделе "??" Win32Name не появляется. (Я грузил его вручную (поставил 3))

2. Я собрал пример "imca" из DDK , и вставил туда свой обработчик команд , затем произвел ту же самую последовательность действий, что и для appdrv ,- все заработало: и в разделе "driver" имя драйвера появляется, и в разделе "??" ассоциированные имена прописываются, и мой тест ioctl-а нормально сработал.

- У SoftIce кроме команды driver есть еще что-то - а то в этом случае имя *.sys файла не понятно какое.
- Я не помню какую-то софтину себе ставил (я подумал может это SoftICE Driver Suite была, сейчас не могу посмотреть - у меня CDROM не работает) , она в VC6 на "панель" ставила мастер создания драйверов, в результате работы этого мастера в рабочем пространстве создавалось два проекта один с драйвером, а другой с программой тестирования драйвера. Я вот хотел спросить, при построении проекта у меня почему-то всегда создавался только экзешник, а драйвер не строился, чтобы я не делал, может ты понял о чем это я ... ?
Странно, но все равно всегда пожалуйста :-)) 02.02.03 18:11  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> - У SoftIce кроме команды driver есть еще что-то - а то в
> этом случае имя *.sys файла не понятно какое.
Набери driver без параметров. Параметр его - это имя сервиса (в твоем случае - appdrv), а не файла

> - Я не помню какую-то софтину себе ставил (я подумал может
> это SoftICE Driver Suite была, сейчас не могу посмотреть -
> у меня CDROM не работает) , она в VC6 на "панель" ставила
> мастер создания драйверов, в результате работы этого
Да это он и есть
> мастера в рабочем пространстве создавалось два проекта один
> с драйвером, а другой с программой тестирования драйвера. Я
> вот хотел спросить, при построении проекта у меня почему-то
> всегда создавался только экзешник, а драйвер не строился,
> чтобы я не делал, может ты понял о чем это я ... ?
Гы, :-))). Они б хоть в мануале описали эту фичу. Дело в том, что DriverWorks - это отдельная среда для создания дриверов - и нужно собрать ее библиотеки перед использованием. Просто поищи по каталогу, куда устанавливал файлы *.dsw, *.dsp - их и надо собрать
1




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


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach