IRP_MN_QUERY_CAPABILITIES和IRP_MN_QUERY_INTERFACE在USB总线驱动中的作用
2021-06-30
340
1
在USB驱动总线开发中,IRP_MN_QUERY_BUS_INFORMATION和IRP_MN_QUERY_INTERFACE还挺重要的。
对于HID设备,这两个IRP其实只要支持IRP_MN_QUERY_CAPABILITIES就行,而且这个CAPABILITIES不要额外的信息。
但对于像UVC,UAC这种复杂的设备,有就点不同了。
一个复合设备(composite device),可以枚举出三个设备,分别为一个UVC摄像头,一个UAC音频麦克风和一个自定义HID设备。
设备树如下:
- USB BUS Enumerator
- USB COMPOSITE dEVICE
- XXXX Camera
- XXXX Auio
- USB Input Device
HID-compliant vendor-defined device
- USB COMPOSITE dEVICE
测试一
通过测试发现当不支持IRP_MN_QUERY_CAPABILITIES时,这个根设备IRP_MN_QUERY_CAPABILITIES直接罢工。
在Windows设备管理器中,USB COMPOSITE dEVICE设备显示感吧号。在设备管理器设备状态是:
This device cannot start.(code 10)
The request in not supported.
测试二
支持IRP_MN_QUERY_CAPABILITIES和不支持IRP_MN_QUERY_INTERFACE时,只有HID设备启动成功,UVC和UAC设备启动失败。
UVC和UAC设备的设备状态均提示:
关于这2个IRP的详细功能可参见MSDN:
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/irp-mn-query-interface
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/irp-mn-query-capabilities
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936