Windows HID 属性 IOCTL 在 Windows 中如何工作?

问题描述

我正在对一个实现 HID 的驱动程序进行逆向工程,以便搜索漏洞。

它实现的主要 IOCTL 均来自 WDK 中的 HID 微型驱动程序库。

我对向 IOCTL_HID_SET_FEATURE IOCTL 发送格式错误的值特别感兴趣。但是,根据 Microsoft 的文档:

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/hidclass/ni-hidclass-ioctl_hid_set_feature

我将如何为一个特定的 HID 设备设置一个功能,而不是文档中的任何其他设备,这有点不清楚。对于功能报告中的预期内容,有点摇摆不定。

输入缓冲区大小(以字节为单位)必须足够大以容纳特征报告——不包括其报告 >ID,如果使用报告 ID——加上一个额外的字节,指定非零报告 ID 或零。

Irp->AssociatedIrp.SystemBuffer 成员指向包含特征报告的输入缓冲区。如果 > 集合包含报告 ID,则请求者必须将缓冲区的第一个字节设置为非零 > 报告 ID;否则请求者必须将第一个字节设置为零。功能报告——不包括其>报告ID,如果使用报告ID——位于((PUCHAR)ReportBuffer + 1)。

文档将 IOCTL 称为针对“顶级集合”。但根据我对自己的驱动程序反汇编的阅读,您似乎可以在粒度级别上指定特定于单个设备的功能

这里有两个相互关联的问题:

  1. 是否可以将这些 IOCTL 定位到特定设备而不是一类设备?如果是这样怎么办?如果您能向我指出执行此操作的客户示例,那就太棒了。
  2. HID 功能报告中的具体内容/在哪里可以找到定义它的规范?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)