Сообщения из ядра
От: Ignoramus  
Дата: 17.11.03 13:34
Оценка:
Господа!

Хочу написать драйвер, который, подобно хуку мышки, будет пропускать через себя ввод через это устройство и передавать сообщения моему приложению.

На данный момент мне удалось "написать" WDM-драйвер пустышку, который устанавливается как "upper filter" к какому-либо устройству и выдает в DebugPrint информацию обо всех IOCTL, которые этому устройству передаются системой.

Теперь меня интересуют следующие ламерские вопросы:

1) Можно ли из ядра передавать сообщения окнам? Обязательно всем (broadcast) или можно указать конкретное окно? Как получить хендл окна из ядра? (Я читал, что для общения драйвера с приложениями обычно используются объекты ядра (event, mutant etc.), но ведь это, насколько я понимаю, довольно медленный механизм, а если сообщения "сыпятся" очередями, то будет тормозить? Так хочется просто послать сообщение... )

2) Каким образом проходят сообщения от lower драйверов? Т.е. в отличие от IOCTL, которые передаются системой "сверху вниз", сообщения от реальных устройств очевидно движутся в обратном направлении, т.е. "снизу вверх". Как выглядят сообщения от lower драйверов в upper драйвере? Какой механизм используется чтобы сообщить системе о возникновении ввода? Как сообщения затем "расбрасываются" по окнам системой?

Спасибо.

19.11.03 03:22: Перенесено модератором из 'WIN API' — H_D
Re: Сообщения из ядра
От: jamj  
Дата: 17.11.03 14:12
Оценка:
Здравствуйте, Ignoramus, Вы писали:

I>Господа!


I>Хочу написать драйвер, который, подобно хуку мышки, будет пропускать через себя ввод через это устройство и передавать сообщения моему приложению.


I>На данный момент мне удалось "написать" WDM-драйвер пустышку, который устанавливается как "upper filter" к какому-либо устройству и выдает в DebugPrint информацию обо всех IOCTL, которые этому устройству передаются системой.


I>Теперь меня интересуют следующие ламерские вопросы:


I>1) Можно ли из ядра передавать сообщения окнам?


Напрямую нельзя. Только через приложение (сервис), работающее в паре с драйвером, т.е. из user mode.
Окна реализуются в подсистеме win32 и компоненты ядра ничего о них не знают.

I>Обязательно всем (broadcast) или можно указать конкретное окно?

I>Как получить хендл окна из ядра?

Никак, Такого объекта в ядре нет и соответственно нет нужных функций. Все это реализовано в user-mode.

I>(Я читал, что для общения драйвера с приложениями обычно используются объекты ядра (event, mutant etc.), но ведь это, I>насколько я понимаю, довольно медленный механизм, а если сообщения "сыпятся" очередями, то будет тормозить? Так хочется I>просто послать сообщение... )


Все функции для общения с окнами доступны только из юзер-мода.

I>2) Каким образом проходят сообщения от lower драйверов? Т.е. в отличие от IOCTL, которые передаются системой "сверху вниз", сообщения от реальных устройств очевидно движутся в обратном направлении, т.е. "снизу вверх". Как выглядят сообщения от lower драйверов в upper драйвере? Какой механизм используется чтобы сообщить системе о возникновении ввода? Как сообщения затем "расбрасываются" по окнам системой?


Если отвечать на вопросы подробно, то понадобится несколько часов. Ты неправильно преставляешь себе архитектуру ядра. Читай документацию DDK, она входит в последние MSDN и есть в онлайне.

I>Спасибо.


WBR, Alexey
Re[2]: Сообщения из ядра
От: Ignoramus  
Дата: 17.11.03 14:44
Оценка:
Здравствуйте, jamj, Вы писали:

J>Напрямую нельзя. Только через приложение (сервис), работающее в паре с драйвером, т.е. из user mode.

J>Окна реализуются в подсистеме win32 и компоненты ядра ничего о них не знают.

Но ведь WDM модель работает и на Win9x платформе, где, насколько мне известно, сервисов нет.

J>Никак, Такого объекта в ядре нет и соответственно нет нужных функций. Все это реализовано в user-mode.

J>Все функции для общения с окнами доступны только из юзер-мода.

Как в таком случае Вы порекомендовали бы мне решать подобную задачу?

J>Если отвечать на вопросы подробно, то понадобится несколько часов. Ты неправильно преставляешь себе архитектуру ядра. Читай документацию DDK, она входит в последние MSDN и есть в онлайне.


Понимаю. Я читал DDK и Walter Oney 2-ю часть. Возможно, недостаточно тщательно, потому надеюсь на наводящие вопросы. Спасибо, что уделяете внимание.
Re[3]: Сообщения из ядра
От: jamj  
Дата: 18.11.03 08:32
Оценка:
Здравствуйте, Ignoramus, Вы писали:

<snip>

J>>Никак, Такого объекта в ядре нет и соответственно нет нужных функций. Все это реализовано в user-mode.

J>>Все функции для общения с окнами доступны только из юзер-мода.

I>Как в таком случае Вы порекомендовали бы мне решать подобную задачу?


Посмотри пример Moufiltr в winddk.

WBR, Alexey
Re[4]: Сообщения из ядра
От: Ignoramus  
Дата: 18.11.03 11:13
Оценка:
Здравствуйте, jamj, Вы писали:

J>Посмотри пример Moufiltr в winddk.


Ок.

Я еще открыл ветку DirectInput vs. Keyboard/Mouse Hooks. Не могли бы заодно прокомментировать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.