Driver 9х
От: Igor_Pavlov  
Дата: 15.11.02 04:29
Оценка:
Я хочу написать драйвер для перехвата нажатия кнопок с клавиатуры и, если надо, не оповещать систему о нажатии.
Драйверы не писал не разу. Может кто нибудь помочь с отправной точкой? Например, нужные функи, ссылки...
Re: Driver 9х
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.11.02 04:39
Оценка:
Установи DDK. http://www.microsoft.com/ddk/w2kddk.asp
Там есть все, вплоть до готовых примеров.

Успеховъ.

IP>Я хочу написать драйвер для перехвата нажатия кнопок с клавиатуры и, если надо, не оповещать систему о нажатии.

IP>Драйверы не писал не разу. Может кто нибудь помочь с отправной точкой? Например, нужные функи, ссылки...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Driver 9х
От: Igor_Pavlov  
Дата: 15.11.02 08:56
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Установи DDK. http://www.microsoft.com/ddk/w2kddk.asp

AS>Там есть все, вплоть до готовых примеров.

AS>Успеховъ.


Что то я там примеров и документации не нашел... Только факи по установке и куча непонятных ссылок на непонятную инфу. Можно более конретную ссылку?
Re[2]: Driver 9х
От: Kont Россия  
Дата: 15.11.02 09:25
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Установи DDK. http://www.microsoft.com/ddk/w2kddk.asp

AS>Там есть все, вплоть до готовых примеров.

AS>Успеховъ.


Ну господа! Я ведь тоже могу так ответить. Хотя при этом я не знаю как написать драйвер. А очень хочется узнать. Человек спрашивал конкретные советы, а не отписки. Ясно, что если уж он задал вопрос, то DDK у него уже стоит на машине.
Е-мае, модераторов на нас нет!

TO Igor_Pavlov: Чего получится, расскажи, чтобы и я узнал. Очень надо написать драйвер, правда под NT, а все никак не могу.
Дерзай и все будет. Может я сподоблюсь, смогу опытом поделиться, когда появится.
Я вот все чаще думаю:
Все великие люди уже умерли...
Вот и я себя плохо чувствую!
Re[3]: Driver 9х
От: Patalog Россия  
Дата: 15.11.02 10:31
Оценка:
Здравствуйте, Kont, Вы писали:

K>Ну господа! Я ведь тоже могу так ответить. Хотя при этом я не знаю как написать драйвер. А очень хочется узнать. Человек спрашивал конкретные советы, а не отписки. Ясно, что если уж он задал вопрос, то DDK у него уже стоит на машине.

K>Е-мае, модераторов на нас нет!

Человек просил отправную точку, она ему дадена. Ку? Думаешь тебе tyt будут готовое решение приводить, али весь DDK цитировать? STFW "Keyboard class driver" никто не отменял.
Почетный кавалер ордена Совка.
Re[4]: Driver 9х
От: Kont Россия  
Дата: 15.11.02 11:11
Оценка:
Здравствуйте, Patalog, Вы писали:

P>Здравствуйте, Kont, Вы писали:


K>>Ну господа! Я ведь тоже могу так ответить. Хотя при этом я не знаю как написать драйвер. А очень хочется узнать. Человек спрашивал конкретные советы, а не отписки. Ясно, что если уж он задал вопрос, то DDK у него уже стоит на машине.

K>>Е-мае, модераторов на нас нет!

P>Человек просил отправную точку, она ему дадена. Ку? Думаешь тебе tyt будут готовое решение приводить, али весь DDK цитировать? STFW "Keyboard class driver" никто не отменял.


Извини если плечиком зашиб тебя!
Ссылка на DDK не катит в качестве отправной точки. Точное место в DDK не было указано. Надеюсь ему поможет твое сообщение.
Кстати, если кто знает ресурсы (жел. русские), на примерах расписывающие написание драйвера, например сетевых протоколов, то не молчите, а то "укушу".
Я вот все чаще думаю:
Все великие люди уже умерли...
Вот и я себя плохо чувствую!
Re[5]: Driver 9х
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.11.02 11:29
Оценка:
Правда? А может еще кашки налить и хлебушек покрошить???? Господа, ну учитесь работать сами, а не при помощи чужой головы. В документации DDK есть абсолютно все про драйверы фильтрации для win nt и про 9х(ме) написано немало. И примеры есть. Надо просто установить DDK. А если вы это не могете даже это сами сделать — тогда я просто опускаю лапки... Вот когда будет видно, что Вы сами искали и будете задавать конкретные вопросы по конкретным вещам, приводить примеры того, что вы сами видели/делали — вот тогда и ждите помощи. А так — только призывы к самостоятельности.


K>>>Ну господа! Я ведь тоже могу так ответить. Хотя при этом я не знаю как написать драйвер. А очень хочется узнать. Человек спрашивал конкретные советы, а не отписки. Ясно, что если уж он задал вопрос, то DDK у него уже стоит на машине.

K>>>Е-мае, модераторов на нас нет!

P>>Человек просил отправную точку, она ему дадена. Ку? Думаешь тебе tyt будут готовое решение приводить, али весь DDK цитировать? STFW "Keyboard class driver" никто не отменял.


K>Извини если плечиком зашиб тебя!

K>Ссылка на DDK не катит в качестве отправной точки. Точное место в DDK не было указано. Надеюсь ему поможет твое сообщение.
K>Кстати, если кто знает ресурсы (жел. русские), на примерах расписывающие написание драйвера, например сетевых протоколов, то не молчите, а то "укушу".
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[6]: Driver 9х
От: Kont Россия  
Дата: 15.11.02 11:58
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Правда? А может еще кашки налить и хлебушек покрошить???? Господа, ну учитесь работать сами, а не при помощи чужой головы. В документации DDK есть абсолютно все про драйверы фильтрации для win nt и про 9х(ме) написано немало. И примеры есть. Надо просто установить DDK. А если вы это не могете даже это сами сделать — тогда я просто опускаю лапки... Вот когда будет видно, что Вы сами искали и будете задавать конкретные вопросы по конкретным вещам, приводить примеры того, что вы сами видели/делали — вот тогда и ждите помощи. А так — только призывы к самостоятельности.


По поводу меня можно не беспокоиться. Драйвер сетевой я только думал писать. Лениво просматривая DDK. Не доходят просто руки. Замечание правильное, но не конструктивное. Я ведь просил помочь с русскими ресурсами. Укажи какие-нить URL-ы, или скажи что не знаешь.
Критику принимаю и обеими парами рук голосую за. Но все-же поконструктивнее. Сам-то че-нить написал из дров? Если да, то поделись опытом. Расскажи про подводные камни. Особенности отладки. И т.п.
Я вот все чаще думаю:
Все великие люди уже умерли...
Вот и я себя плохо чувствую!
Re: Driver 9х
От: Roman_M rgmroman.narod.ru
Дата: 15.11.02 12:28
Оценка:
Здравствуйте, Igor_Pavlov, Вы писали:

IP>Я хочу написать драйвер для перехвата нажатия кнопок с клавиатуры и, если надо, не оповещать систему о нажатии.

IP>Драйверы не писал не разу. Может кто нибудь помочь с отправной точкой? Например, нужные функи, ссылки...

В DDK от WinME (другого установленного DDK у меня под рукой сейчас нет) есть такая функция:
VKD_Filter_Keyboard_Input (см. файл vkd.inc)

написано там вот так:


Related Driver Documentation: Windows Me DDK


VKD_Filter_Keyboard_Input
include vkd.inc

VxDCall VKD_Filter_Keyboard_Input
mov ScanCode, cl

Allows a virtual device to monitor keyboard input and either modify or reject keyboard keystrokes. To monitor keyboard input, a virtual device must hook this service. The virtual device sets the carry flag to reject a keystroke , or clears the carry flag to continue processing the keystroke. Uses Flags.

Returns the scan code of the keystroke in CL, if if the carry flag is clear.



Но эту функцию надо не вызвать, а перехватывать с помощью VMMCall Hook_Device_Service.
Re[7]: Driver 9х
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.11.02 12:46
Оценка:
Лично я писал mirror драйвер для win nt, hook драйвер под 9х и обычный kmd драйвер под nt. Пользовался в основном поиском по группо-гуглю, советами Alexa'a Fedotov'a (за что ему огромное спасибо) и документацией DDK.

Я вообще не беспокоюсь Драйверы такая тема, что надо самому и с нули, иначе потом много непоняток. Обязательно почитай "Недокументированные возможности win2k", "Programming WDM drivers" и что-нибудь из гарри наббета.

Отладка... Без софтайса не обойтись.

Успехов.

K>По поводу меня можно не беспокоиться. Драйвер сетевой я только думал писать. Лениво просматривая DDK. Не доходят просто руки. Замечание правильное, но не конструктивное. Я ведь просил помочь с русскими ресурсами. Укажи какие-нить URL-ы, или скажи что не знаешь.

K>Критику принимаю и обеими парами рук голосую за. Но все-же поконструктивнее. Сам-то че-нить написал из дров? Если да, то поделись опытом. Расскажи про подводные камни. Особенности отладки. И т.п.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Driver 9х
От: Chopin Украина  
Дата: 15.11.02 13:40
Оценка:
Здравствуйте, Igor_Pavlov, Вы писали:

IP>Я хочу написать драйвер для перехвата нажатия кнопок с клавиатуры и, если надо, не оповещать систему о нажатии.

IP>Драйверы не писал не разу. Может кто нибудь помочь с отправной точкой? Например, нужные функи, ссылки...

Посмотри на
http://www.sysinternals.com/win9x/98source.shtml

к сожалению на английском.
На том же сайте и список литературы есть.

Успехов.
Re[8]: Driver 9х
От: Igor_Pavlov  
Дата: 15.11.02 13:48
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Лично я писал mirror драйвер для win nt, hook драйвер под 9х и обычный kmd драйвер под nt. Пользовался в основном поиском по группо-гуглю, советами Alexa'a Fedotov'a (за что ему огромное спасибо) и документацией DDK.


AS>Я вообще не беспокоюсь Драйверы такая тема, что надо самому и с нули, иначе потом много непоняток. Обязательно почитай "Недокументированные возможности win2k", "Programming WDM drivers" и что-нибудь из гарри наббета.


AS>Отладка... Без софтайса не обойтись.


AS>Успехов.


Незнаю незнаю... Я установил ДДК. В хелпе нифига отправной теории нету. На сайте глухо. Причем насколько я знаю так и должно быть. Майкрософт доки рассылает на дисках вместе с ДДК. Беспалатно, но толку от этого мало. ЧТо мне теперь ждать чтоли? Я хотел поиметь описание типа DirectX. Вот там все грамотно: теория, пошаговое выполенение задач, примеры. В ДДК примеров нет как класса. Пошаговыми операциями не пахнет. Я не ясновидящий что бы догадываться как и что делается.
Вот вы советуете почитать про WDM-дрова. А что они есть такое? В доке по ДДК толком ничего не сказано. Для чего они и чем отлича.тся от других дров.
Все что я нарыл на ДДК сайте так это асмовый исходник от которого не холодно не жарко.
Потому и обратился сюда за помощью.
Re: Driver 9х
От: Chopin Украина  
Дата: 15.11.02 13:53
Оценка:
Здравствуйте, Igor_Pavlov, Вы писали:

IP>Я хочу написать драйвер для перехвата нажатия кнопок с клавиатуры и, если надо, не оповещать систему о нажатии.

IP>Драйверы не писал не разу. Может кто нибудь помочь с отправной точкой? Например, нужные функи, ссылки...

Еще могу посоветовать в конференциях от MS посмотреть на msnews.microsoft.com
например: microsoft.public.development.device.drivers
KB на MS
http://www.microsoft.com/hwdev/driver/KB-drv.asp

Да и www.osr.com тоже может помочь. Множество статей и форумы есть. Но все на буржуйском
Re[9]: Driver 9х
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.11.02 13:57
Оценка:
Вот именно поэтому и не все пишут драйвера.

В DDK есть целый каталог с самплами. Они не идеальны — но представление о проблеме и рабочие проекты дадут.

IP>Незнаю незнаю... Я установил ДДК. В хелпе нифига отправной теории нету. На сайте глухо. Причем насколько я знаю так и должно быть. Майкрософт доки рассылает на дисках вместе с ДДК. Беспалатно, но толку от этого мало. ЧТо мне теперь ждать чтоли? Я хотел поиметь описание типа DirectX. Вот там все грамотно: теория, пошаговое выполенение задач, примеры. В ДДК примеров нет как класса. Пошаговыми операциями не пахнет. Я не ясновидящий что бы догадываться как и что делается.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[9]: Driver 9х
От: Chopin Украина  
Дата: 15.11.02 14:00
Оценка:
Здравствуйте, Igor_Pavlov, Вы писали:

IP>Вот вы советуете почитать про WDM-дрова. А что они есть такое? В доке по ДДК толком ничего не сказано. Для чего они и чем отлича.тся от других дров.


Про WDM могу книгу посоветовать "Programming the MS Windows Driver Model" Walter Oney, MS Press 1999. В русском варианте не видел. Английский где то в сети был. Ссылку к сожалению не помню, но гугл должен знать
Re[10]: Driver 9х
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.11.02 14:08
Оценка:
так я ему это посоветовал — не внемлеть

IP>>Вот вы советуете почитать про WDM-дрова. А что они есть такое? В доке по ДДК толком ничего не сказано. Для чего они и чем отлича.тся от других дров.


C>Про WDM могу книгу посоветовать "Programming the MS Windows Driver Model" Walter Oney, MS Press 1999. В русском варианте не видел. Английский где то в сети был. Ссылку к сожалению не помню, но гугл должен знать
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[9]: Driver 9х
От: Аноним  
Дата: 15.11.02 14:57
Оценка:
Здравствуйте, Igor_Pavlov, Вы писали:


IP>Незнаю незнаю... Я установил ДДК. В хелпе нифига отправной теории нету. На сайте глухо. Причем насколько я знаю так и должно быть. Майкрософт доки рассылает на дисках вместе с ДДК. Беспалатно, но толку от этого мало. ЧТо мне теперь ждать чтоли? Я хотел поиметь описание типа DirectX. Вот там все грамотно: теория, пошаговое выполенение задач, примеры. В ДДК примеров нет как класса. Пошаговыми операциями не пахнет. Я не ясновидящий что бы догадываться как и что делается.

IP>Вот вы советуете почитать про WDM-дрова. А что они есть такое? В доке по ДДК толком ничего не сказано. Для чего они и чем отлича.тся от других дров.
IP>Все что я нарыл на ДДК сайте так это асмовый исходник от которого не холодно не жарко.
IP>Потому и обратился сюда за помощью.

Общие сведения о написании VxD:

vxd — это исполняемый файл в формате LE. Большинство vxd не имеют точки входа в заголовке, но через таблицу экспортируют адрес структуры DDB. Если драйвер имеют точку входа, то она должна находится в сегменты code16. Этот код будет вызван в самом начале инициализации Windows, в реальном режиме. Подробности этого можно посмотреть в DDK, используется эта возможность довольно редко. Основная точка входа драйвера содержится в структуре DDB.

Вот описание это структуры из VMM.INC

VxD_Desc_Block    STRUC
DDB_Next    DD    ?
DDB_SDK_Version    DW    DDK_VERSION
DDB_Req_Device_Number    DW    UNDEFINED_DEVICE_ID
DDB_Dev_Major_Version    DB    DDK_VERSION SHR 8
DDB_Dev_Minor_Version    DB    DDK_VERSION AND 0FFh
DDB_Flags    DW    0
DDB_Name    DB    "        "
DDB_Init_Order    DD    UNDEFINED_INIT_ORDER
DDB_Control_Proc    DD    ?
DDB_V86_API_Proc    DD    0
DDB_PM_API_Proc    DD    0
DDB_V86_API_CSIP    DD    0
DDB_PM_API_CSIP    DD    0
DDB_Reference_Data    DD    ?
DDB_Service_Table_Ptr    DD    0
DDB_Service_Table_Size    DD    0
DDB_Win32_Service_Table    DD    0
DDB_Prev    DD    'Prev'
DDB_Size    DD    SIZE(VxD_Desc_Block)
DDB_Reserved1    DD    'Rsv1'
DDB_Reserved2    DD    'Rsv2'
DDB_Reserved3    DD    'Rsv3'
VxD_Desc_Block    ENDS


Вот некоторые важные поля
DDB_SDK_Version — это минимальная версия системы, для которой предназначен драйверDDB_Req_Device_Number — 16-битный номер(ID) устройства для взаимодействия с DOS и Win16 программами и другими VxD
DDB_Dev_Major_VersionDDB_Dev_Minor_Version
это версия самого драйвера


DDB_Name — имя драйвера, ровно 8 байт, иными словами char DDB_Name[8];

DDB_Control_Proc — адрес фукнции обработки сообщений системе (не имеет никакого отношения к окными сообщениям и т.п.)

DDB_V86_API_Proc
DDB_PM_API_Proc
это адреса обработчиков API режимов VM86 и PM (для этого API обязателен ID), эти API будут доступны через INT 2Fh (AX=1684h), адреса могут совпадать

DDB_Service_Table_Ptr
DDB_Service_Table_SizeЭто адрес и размер таблицы функций, которые драйвер предоставляет другим vxd через "VxDCall"

Итак, что нужно сделать для минимальной работы драйвера.
1) Сделать структуру DDB
2) Указать в ней адрес ControlProc
3) Указать там же имя устройства
4) Экспортировать эту структуру под первым номером (ordinal)

Теперь о ControlProc:
Эту функцию вызывет система по аналоги с WindowProc, но параметры передаются в регистрах, главный параметр — номер сообщения в регистре EAX.
Например, когда программа загружает и работает с vxd с помощью функций CreateFile/DeviceIoControl/CloseHandle, система вызывает ControlProc, и в регистре EAX находится значения 23h (W32_DEVICEIOCONTROL)
В DDK опеределены симбольные обозначения номеров сообщений.
Когда драйвер загружается, то, в зависимости от способа загрузки, системы посылает сообщения SYS_CRITICAL_INIT (0h), DEVICE_INIT (1h), INIT_COMPLETE (2h), SYS_DYNAMIC_DEVICE_INIT (1Bh). Содержимое разных регистров завист от номера сообщения. В сюработчике сообщения можно выполнять различные функции, но набор допустимых зависит от сообщения. То есть не всегда можно пользоваться той или иной функцией. Кроме того, некоторые сообщения нужно отрабатывать ОЧЕНЬ быстро.
Обрабатывать нужно только те сообщения, которые интересуют драйвер. Обработчкик обычно устанавливает CF=0 (cls) если не имеет ничего против данного сообщения и CF=1 (stc) если хочет возразить против данного действия.

При инициализации драйвера можно перхватить опеределённые функции и прерывания, установить callback, которые будет вызывать система в определённых ситуациях.

VxD пользуется функциями других vxd (и системы) через механизм VxDCall. Это метод динамического связывания драйверов, в исполняемом файле вызов функций реализается так:
   int   20h
   dw    <номер функции>
   dw    <id устройства>

При первом вызове система заменяет в памяти этот код на инструкцию call с указанием конкретного адреса.
Параметры могут передаваться в функцию разными способами: как через стек (__cdecl, __stdcall), так и через регистры процессора. Результат обычно возвращается в регистрах общего назначения (eax, ebx, ecx, edx, esi, edi) или через Carry Flag.
Re[9]: Driver 9х
От: Whisperer  
Дата: 15.11.02 16:09
Оценка:
Здравствуйте, Igor_Pavlov, Вы писали:


... Я установил ДДК. .....
(Надеюсь поставил 98DDK)

Идешь в папку Help\ и ткрываешь там файл Other.chm в нем ищеш
"Windows 95 Keyboard Driver" и читаешь.

Не хочу тебя огорчать — но я там примера драйвера клавиатуры — не нашел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.