我有一个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
| 归档时间: |
|
| 查看次数: |
9810 次 |
| 最近记录: |