滚动我自己的Windows操纵杆HID驱动程序?

vic*_*tcu 17 usb hid joystick

我有一个USB操纵杆,我想为它编写自己的HID驱动程序.值得注意的是,我希望在Windows收到操纵杆输入和我的应用程序收到输入事件通知之间注入延迟.我还想改变我的应用程序所获得的操纵杆的身份.我从来没有为Windows编写驱动程序,更不用说HID驱动程序了.任何人都可以向我提供有关如何做到这一点的建议或指示吗?

cly*_*yfe 14

当您按下操纵杆上的旋钮时,电子信号通过驱动链以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;
    ...
}
Run Code Online (Sandbox Code Playgroud)

要延迟内部转发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