Использование драверов под w2k
дравера , да и ваще просто обращаться к драйверу
какого либо устройства.
Конкретно:
Какое имя использовать при получении handle
при помощи CreateFile() , и еще какие
Device Input and Output Control Codes я должЁн
использовать в DeviceIOControl().
Звучит конечно глупо - типа мой драйвер , я и знать должен - но я просто взял пример fdc дравера
из ddk и пытаюсь понять, как можно поиметь функциональность функций в нем описанных. :(
Если кто возьметься помочь ,конечно, вышлю исходники.
Заранее спасибо.
(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED,FILE_ANY_ACCESS)
это пример...
а в общем случае:
биты
0,1 - тип передачи см.METHOD_BUFFERED
2-13 - функциональный код - 0х800..0хFFF
14,15 - доступ см. FILE_ANY_ACCESS
16-30 - тип устройства см. FILE_DEVICE_CD_ROM
31 - файловый флаг 1 для дрв. файловой системы.
а на счет имени -
drvHandle = CreateFile('\\\\.\\Win32Name',
т.е. то имя, которое ты указал в драйвере в кач-ве имени в пр-ве Win32
Расскажи пож, как ты компилируешь драйвер
Цитата:
а на счет имени -
drvHandle = CreateFile('\\\\.\\Win32Name',
т.е. то имя, которое ты указал в драйвере в кач-ве имени в пр-ве Win32
Расскажи пож, как ты компилируешь драйвер
Откомпилил я стандартный пример из DDK стандартного драйвера w2k для работы с floppy под w2k. Даже полученый sys переписал в папку с драйверами виндовыми - все работает. Только вот у меня трабла с тем как, его теперяча использовать то? То имя про которое ты говоришь я не знаю где задано.
Самое-то обидное, что я не до конца понял идеологию написания дров. В некоторых примерах
создают объекты с наличием метода DriverEntry в некоторых - просто API из функций в качестве одной из них есть и DriverEntry. В документации ваще хлам - не разобрать :(
Проблема с именем в связывании имен драйвера для приложений и для ядра. эти имена д.б. связаны след образом:
#define NT_DEVICE_NAME L"\\Device\\DeviceName"
#define WIN_DEVICE_NAME L"\\??\\WinName"
L означает Unicode
DriverEntry
UNICODE_STRING usNtName;
UNICODE_STRING usWinName;
RtlInitUnicodeString(&usNtName, NT_DEVICE_NAME)
RtlInitUnicodeString(&usWinName, WIN_DEVICE_NAME)
IoCreateSymbolicLink(&usWinName, &usNtName)
Теперь имена связаны и существуют, можно создавать объект драйвера
IoCreateDevice(... &usNtName
у меня это пока не работает - в приложение не передаются данные, хотя код драйвера выполняется.
http://www.wasm.ru/publist.php Драйверы режима ядра Windows 2000 - классная дока - многое есть там.
P.S. никогда не знал, что откомпилить так сложно, но все-таки получилось :)