Прокрутить мой собственный Windows Joystick HID Driver?

У меня есть Джойстик USB, и я хочу записать свой собственный драйвер HID для него. Особенно я хочу ввести задержку между тем, когда вход джойстика получен Windows и когда мое приложение уведомляется относительно того входного события. Я также хотел бы изменить идентификационные данные джойстика, воспринятого моим приложением. Я никогда не писал драйвер, уже не говоря о драйвере HID, для Windows. Кто-либо может предоставить мне совет или указатели о том, как пойти о выполнении этого?

17
задан vicatcu 24 June 2010 в 02:29
поделиться

2 ответа

Когда вы нажимаете на ручки джойстика, электрические сигналы поступают в операционную систему (и в игру) в виде IRP'ов через цепочку драйверов. Перехват этих IRP в какой-то момент и задержка пересылки их следующему драйверу может задержать ввод джойстика. Этого можно добиться с помощью фильтров драйверов.

Для написания драйверов windows необходимо использовать WinDDK.

Точкой входа драйвера windows является функция DriverEntry. В этой функции вы будете подключать те IRP, которые вы хотите перехватить, и функции обратного вызова, которые с ними работают, в нашем случае, функции обратного вызова, которые задерживают пересылку.

Например, допустим, наш IRP, который нужно задержать, это IRP_MJ_READ, а наша функция обратного вызова называется CallbackDelayForwarding:

// the function that delays the IRP
NTSTATUS CallbackDelayForwarding(
    IN PDEVICE_OBJECT pDeviceObject, 
    IN PIRP pIrp
){
    // delay the forwarding
}

// this is the driver entrypoint, similar to "main" in user-mode executables
NTSTATUS DriverEntry(
    IN PDRIVER_OBJECT pDriverObject, 
    IN PUNICODE_STRING RegistryPath 
){
    pDriverObject->MajorFunction[IRP_MJ_READ] = CallbackDelayForwarding;
    ...
}

Чтобы задержать пересылку внутри CallbackDelayForwarding, вы должны использовать функции из семейства KeInitializeTimer для имитации своего рода сна (возможно, в сочетании с блокировками), KeDelayExecutionThread и т.д.

Для установки своего драйвера фильтра в цепочку драйверов джойстика можно использовать .inf файлы.

Проверьте образец драйвера фильтра тостера в WinDDK, вы можете найти его в INSTALL_DIR/src/general/toaster/ смотрите также здесь.

Похожие ссылки:
http://www.rootkit.com/newsread.php?newsid=187
http://www.techtalkz.com/microsoft-device-drivers/269654-toaster-filter-driver.html

14
ответ дан 30 November 2019 в 13:45
поделиться

То, что вы пытаетесь сделать, это драйвер фильтра.

Драйверы фильтров - это необязательные драйверы, которые добавляют ценность или изменяют поведение устройства. Драйвер фильтра может обслуживать одно или несколько устройств. источник: http://msdn.microsoft.com/en-us/library/ff545890.aspx

Я думаю, что WDK содержит образцы. Вам необходимо загрузить Windows Driver Kit отсюда: http: //www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx

WDK, вероятно, содержит образец кода для создания фильтра.

На сайте Microsoft также есть следующая загрузка: http://support.microsoft.com/kb/176417

Вероятно, он немного устарел, поскольку USB не поддерживался до NT5.0, но, может быть, это все еще актуально.

3
ответ дан 30 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: