Windows 如何确定“设备管理器”中的设备分类?
例如,设备管理器列出了“成像设备”、“键盘”、“声音、视频和游戏控制器”等类别——Windows 如何“知道”将设备归入这些类别中的任何一个?
Windows 如何确定哪个设备是哪个,然后将其归入某个类别?
作为参考,我理解 Windows 使用硬件和供应商 ID 来“了解”设备是什么,并且设备的可见命名源自初始 INF 文件。但据我了解,INF 文件没有定义设备的类别或类型,因此我想知道 Windows 如何进行区分。
答案1
这基本上是设备驱动程序的责任。Windows 通过以下方式表示设备:设备对象. 每个设备对象都有一个设备类型,存储在其 DEVICE_OBJECT 结构的 DeviceType 成员中。设备类型表示驱动程序的底层硬件类型。请参阅下面的源代码页面以及有关内核和用户模式驱动程序、Windows 驱动模型 (WDM) 架构等的相关 MSDN 文档。
答案2
您的理解是错误的 - INF 文件确实定义了设备在设备管理器中的类别。Windows 根据用于安装设备的 INF 文件中的 Class 和 ClassGuid 条目对设备进行分类。
例如,转到设备管理器 -> 键盘 -> HID 键盘设备(假定)-> 右键单击 -> 属性 -> 详细信息选项卡 -> 属性下拉菜单 -> 设备类 GUID。您应该看到设备类 GUID 为 {4d36e96b-e325-11ce-bfc1-08002be10318}。这与 MSDN 链接“供应商可用的系统定义设备设置类”中键盘的 GUID 相匹配http://msdn.microsoft.com/en-us/library/ff553426%28v=vs.85%29.aspx
您甚至可以创建自己的设备管理器类别。“创建新的设备安装类别”http://msdn.microsoft.com/en-us/library/ff540189%28VS.85%29.aspx 但这通常是不受欢迎的,您应该在适当的情况下使用现有的类 GUID。例如,如果您选择为键盘使用不同的类 GUID,(我认为)操作系统将无法识别按下的键,即使操作系统识别设备本身(即它枚举,它发送数据,但数据不会进入系统的键盘缓冲区)