圈圈.第10章.过滤驱动_实验记录(20181218)
1、环境
1.1、驱动编译:XP(VMWARE)
1.2、Keil:Win7x64
1.2、实验机:XP(笔记本[ 真实物理机 ])
2、代码:
2.1、过滤驱动使用的是 第10章 的代码
2.2、(1)USB模块的代码 用的是 第4章 的代码(我使用 未带鼠标功能的代码:[ UsbKeyboard__ZC_forChapter10 ])
(2)访问HID设备的应用程序是 第5章 的代码(我使用的是 [ MyUsbHidTestApp__ZC_forChapter10 ])
3、疑问:
3.1、关于GUID,搜索了 圈圈 的源码,貌似里面没有指定 GUID的部分... 那么 XP中注册表里面的 GUID({4D36E96F-E325-11CE-BFC1-08002BE10318} 和 {745A17A0-74D3-11D0-B6FE-00A0C90F57DA})是怎么回事?是固定的吗?
ZC:比较了一下,貌似 HKLM\SYSTEM\CurrentControlSet\Enum\HID 中的 项:
ZC: 如果 "Class"为"Mouse",则 "Driver"就是"{4D36E96F-E325-11CE-BFC1-08002BE10318}"
ZC: 若"Class"为"HIDClass",则 "Driver"就是"{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}"
ZC: 可能就是固定的...
3.2、第4章的代码 说是 "USB键盘"为何 HKLM\SYSTEM\CurrentControlSet\Enum\USB\Vid_8888&Pid_0002 中的 项"2018-07-12"里面的 "Class"是"HIDClass"?而非KeyBoard之类的?就是这么表示的么?没有 "Class"是"KeyBoard"的这种写法么?
3.3、我的代码(UsbKeyboard__ZC_forChapter10),在 安装到 USB模块后 XP的设备管理器中 没有出现 "键盘-->HID Keyboard Drvice"。
(1)于是 尝试 使用 圈圈 的随书光盘里面的代码(我复制过来后为"E:\Project_Keil\UsbKeyboard__QQ"),安装后,发现 XP的设备管理器中 出现了 "键盘-->HID Keyboard Drvice",Regedit 中的信息为 "HKLM\SYSTEM\CurrentControlSet\Enum\USB\Vid_8888&Pid_0002\2018-01-01"(这里是∵ 我将源码中的"SerialNumberStringDescriptor" 修改为"2018-01-01"了),截图为:
ZC:圈圈的代码(UsbKeyboard__QQ) 和 我的代码(UsbKeyboard__ZC_forChapter10),哪里不同?导致我的代码 出不来 "XP设备管理器-->键盘-->HID Keyboard Drvice"? 得 好好的看看

这里的 "Class"为"HIDClass"
(1.1)、然后 看到 "HKLM\SYSTEM\CurrentControlSet\Enum\HID\Vid_8888&Pid_0002\6&37873005&0&0000",里面的 "Class"为"Keyboard"
4、
5、过滤驱动的 安装过程
5.1、(PDF.P309[书.P296])
注意 被安装过滤驱动的设备是一个“USB人体学输入设备”,它的硬件ID开头为USB。
而原来的键盘是由该“USB人体学输入设备”产生的,它的硬件ID以HID开头。
安装过滤驱动之后的“HID兼容设备”也是由这个“USB人体学输入设备”产生的,硬件ID也是以HID开头。
“USB人体学输入设备”和“HID兼容设备”的安装类GUID都为{745A17A0-74D3-11D0-B6FE-00A0C90F57DA},通过硬件ID可以区分它们。
而键盘设备的安装类GUID为{4D36E96F-E325-11CE-BFC1-08002BE10318}可以与“HID兼容设备”。
ZC:这里 不知道 在说什么... 参看 书中 图10.6.1、图10.6.2。
5.2、书P292(PDF.P305)最底部:
另外,由于该过滤驱动修改了报告描述符应用集合的用途,导致最终产生的设备不一样(原来为键盘设备,安装过滤驱动后变成了HID兼容设备),
需要先将原来的驱动卸载掉,然后才能安装过滤驱动;否则系统会不知道这个驱动,还是使用以前的驱动,也就是说,并不会出现新的硬件。
如果这是强行将设备拔下,还会导致系统死机。
安装过滤驱动后还需要重新启动设备,主机才后悔识别到新硬件。
ZC:怎么个顺序?有点不明白了...
5.3、步骤:
(1)、复制驱动文件,就是将驱动文件 复制到 系统目录
(2)、卸载旧的键盘驱动
... ...
6、测试
6.1、没安装 过滤驱动时,操作MyUsbHidTestApp.exe 的现象 (见 PDF.P310 中的解说[书.P297])
开始查找设备 (14:25:27) 设备已经找到 (14:25:27) 读访问打开设备失败 (14:25:27) 写访问打开设备成功 (14:25:27) 无效的读报告句柄,可能是打开设备时失败 (14:25:27) // ZC: 这一行是我加的,上半部分是 点击按钮"打开设备"时输出的信息,下半部分是 点击按钮"关闭设备"是输出的信息 发送输出报告9字节 (14:25:33) 00 00 00 00 00 00 00 00 00 发送失败,错误代码:1 (14:25:33) 该设备不支持WriteFile函数。 关闭设备 (14:25:33)
6.2、
7、
8、
9、
10、

浙公网安备 33010602011771号