usb - 推出我自己的 Windows 操纵杆 HID 驱动程序?

标签 usb hid joystick

我有一个 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/

相关文章:

linux - 如何在设备插入计算机时自动运行 'sudo modprobe -r ftdi_sio'

c++ - 始终有一个已创建的线程或在必要时创建线程

android - 设备在 android studio 的 "USB debugging mode"中不可见

android - NDK 级别的 Android 低级 USB API,可在 Qt Android 上使用

javascript - 如何在 HTML5 JavaScript 中检测 Joy-Con 输入/运动控件

python - Pygame.joystick 返回 0

macos - Mac OS X 用户空间中的游戏 handle 和操纵杆支持

c# - USB HID 卡在 C# 中的 Read() 上

python - 使用 python 捕获并解释 XI2 RawKeyPress 事件

linux - TIAM57xx 上 Linux 中的 USB HID 小工具 "g_hid"