我有一个 USB 操纵杆,我想为其编写自己的 HID 驱动程序。值得注意的是,我想在 Windows 接收操纵杆输入和我的应用程序收到该输入事件通知之间插入延迟。我还想更改我的应用程序感知的操纵杆的身份。我从未为 Windows 编写过驱动程序,更不用说 HID 驱动程序了。任何人都可以向我提供有关如何执行此操作的建议或指示吗?
最佳答案
当您按下操纵杆上的旋钮时,电信号会以 IRP's 的形式到达操作系统(并进入游戏)。通过驱动链。在某个时刻拦截这些 IRP 并延迟转发到下一个驱动程序可以延迟操纵杆输入。这可以通过 driver filters 来实现.
要编写 Windows 驱动程序,您需要使用 WinDDK .
Windows 驱动程序的入口点是 DriverEntry function 。在此函数中,您将 Hook 要拦截的 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 中的函数系列来模拟某种 sleep (可能与锁结合),KeDelayExecutionThread 等。
要将过滤器驱动程序安装在操纵杆驱动程序链中,您可以使用 .inf files 。
检查toaster filter driver sample在 WinDDK 中,您可以在 INSTALL_DIR/src/general/toaster/
中找到它,另请参阅 here .
相关链接:
http://www.rootkit.com/newsread.php?newsid=187
http://www.techtalkz.com/microsoft-device-drivers/269654-toaster-filter-driver.html
关于usb - 推出我自己的 Windows 操纵杆 HID 驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3106862/