![]() |
1
16
好的,我终于解决了这个问题,我的司机在工作。 一种KMDF滤波器驱动程序的实现 : 感谢Sergius,他建议使用COM端口方法,因为这有助于我设置 WinDbg. This awesome blog post 解释如何快速设置它,基本上是让vpc将COM端口设置为命名管道,在虚拟化操作系统上启用内核调试模式,并在启动时连接到它。然后,您可以在加载驱动程序时获得所有dbgprint消息,并做更多的工作,但是在启动过程中,仅仅跟踪消息对我来说是一个巨大的帮助。 我认为我的主要问题是试图在Kbfiltr中重用内部ioctl。对于我来说,这只是一个错误的设计思想,因为我不理解内部ioctl和其他ioctl之间的区别-内部ioctl,如ioctl_internal_keyboard_disconnect具有受限的访问条件,应该只由其他驱动程序或内核发送。阿尔索 this KB article "How to send IOCTL to filter driver" 是一个使用相同控制设备结构的例子,但它是WDM。 总之,在整个周末与Kbfiltr示例进行了斗争之后,我终于放弃并重新开始使用 WDF Toaster/filtr example .这是一个更为简陋的kmdf过滤器驱动程序,我不得不用kbfiltr和mouffiltr填充很多空白。烤面包机过滤器驱动程序的操作类似于kbfiltr,但它创建了一个控制设备而不是PDO。它还为控制设备设置一个DOS设备名,这样您就可以从用户模式与它通信,而无需PInvoke执行该步骤。控制设备允许您通过迭代集合来控制所有加载了筛选器驱动程序的设备。WaitLock用于同步对集合的访问。 我还可以修改inf文件(使用鼠标类而不是烤面包机类),直接在我的测试机上应用它,而不需要修改驱动程序代码! 从有用的东西开始要容易得多。 This page 给出了一个全面的列表,列出了为适应示例而应该更改的内容。 |
![]() |
2
3
首先:你可以在用户模式下做你想做的(当鼠标插入时禁用我笔记本电脑上的触摸板)。它会更简单更安全。看 Using Device Installation Functions 和 WM_DEVICECHANGE 调试代码中的问题:从bsod获取内存转储或设置内核调试程序连接(使用虚拟PC上的COM端口重定向到管道)。见 Debugging Tools for Windows 玩得高兴! |
![]() |
Jack · 如何在Linux内核中设置设备文件的组id? 7 年前 |