我试图在内核堆栈的其他部分可以读取它之前收听鼠标动作。为此,我找到了 Microsoft 创建的资源,它正是这样做的。以下链接指向他们的示例过滤器驱动程序,该驱动程序连接到鼠标数据包链中,从而能够在其他软件查看鼠标输入之前侦听和修改鼠标输入。 https://github.com/microsoft/Windows-driver-samples/tree/main/input/moufiltr
问题是我无法让它工作。我首先使用 Visual Studio 的 KMDF 模板,然后添加了 moufiltr 标头和类。然后我在我的 VM 上运行它并使用调试器来侦听调试消息。 DriveryEntry 调试消息得到正确打印,但其他任何函数都没有打印出来,这让我相信它们没有被调用。如果我不得不猜测,我会说问题出在这样的事情上......
WDF_DRIVER_CONFIG_INIT(&config, MouFilter_EvtDeviceAdd);
这里 MouFilter_EvtDeviceAdd 不包含任何参数,所以我假设它没有尝试调用我的那个函数版本,这就是为什么没有从该函数中打印调试消息的原因。但话虽如此,我不知道如何提供正确的参数
(IN WDFDRIVER Driver, IN PWDFDEVICE_INIT DeviceInit)
。这也是 VOID MouFilter_EvtIoInternalDeviceControl(IN WDFQUEUE Queue, IN WDFREQUEST Request, IN size_t OutputBufferLength, IN size_t InputBufferLength, IN ULONG IoControlCode)
的问题,因为我不知道如何获取这些参数,而且我在那个 Microsoft 示例中找不到任何内容。