了解 设备设置类 和设备 接口类 之间的区别对于成功的 Windows 驱动程序开发和设备管理至关重要。 虽然这些类可能看起来类似,但它们在 Windows 设备生态系统中具有根本不同的用途。 安装程序类控制作系统如何安装和配置设备。 接口类支持驱动程序、应用程序和设备之间的运行时通信和功能。 了解此区别有助于为设备安装选择正确的类类型,实现适当的设备通知,并避免常见的开发陷阱。
设备通常属于安装类,同时在不同的接口类中公开多个设备接口。 然而,这两种类型的类具有不同的用途,不可互换。
Comparison
下表总结了设置类和接口类之间的主要差异和关系:
| 方面 | 安装类 | 接口类 |
|---|---|---|
| 主要用途 | 使用类似的安装和配置对设备进行分组 | 对提供类似功能和通信的设备接口进行分组 |
| 使用情况 | 在设备安装过程中由 Windows 使用 | 驱动程序和应用程序用于设备交互 |
| GUID 定义 | 通常在 Devguid.h 中定义 | 在特定于设备的头文件中定义(例如 Ntddmou.h、 Ntddpar.h) |
| 分组条件 | 安装并配置类似的设备 | 通常,实现特定 IO 协定的设备接口 |
| 通知 | 不用于设备到达或删除通知 | 用于注册设备接口到达和删除通知 |
| Examples | 传感器、固件、蓝牙 | 音频捕获、音频呈现、环境光传感器 |
| 关系 | 设备属于一个安装类 | 设备可以在不同的接口类中公开零个或多个设备接口 |
| 辈子 | 在安装过程中相关 | 在设备作期间相关 |
必须区分两种类型的设备类: 设备接口类 和设备 设置类。 两者很容易混淆。 在用户模式代码中,两个类都使用相同的 设备安装功能集。 它们还使用相同的数据结构集(设备信息集)。
相同的安装类,不同的接口类:
- 设备:两个不同的传感器设备
- 安装程序类:这两台设备都在 Sensors 类中。
- 接口类:一个传感器公开环境光传感器设备接口,另一个传感器公开加速计设备接口。
请考虑 USB 鼠标设备和 USB 键盘设备。 两者都使用相同的接口类(人机接口设备)。 但它们分别属于不同的设置类、 鼠标 和 键盘。
相同的接口类,不同的设置类:
- 设备:USB 鼠标和 USB 键盘
- 接口类:两台设备都使用同一接口类(人机接口设备)与系统通信。
- 设置类:鼠标设备属于 鼠标 设置类,而键盘设备属于 键盘 设置类。
设备设置类
设备设置类 是预定义类别,仅用于 Windows 中的设备的安装和配置。 它们可帮助作系统了解如何在安装过程中管理设备。 安装程序类提供一种机制,用于按相同方式对安装和配置的设备进行分组。 有关设置类的详细信息,请参阅 供应商可用的系统定义的设备安装类。
Windows 设备设置类在系统文件 Devguid.h 中定义。 此文件为安装类定义一系列 GUID。 但是, Devguid.h 中表示的设备设置类不得与设备 接口 类混淆。 Devguid.h 文件仅包含安装类的 GUID。
设备接口类
设备接口类 提供一种机制,用于根据共享特征或功能对设备接口进行分组。 驱动程序和用户应用程序可以注册特定接口类中有关设备接口的通知。 这意味着当属于该类的任何设备接口已启用(到达)或已禁用(已删除)时,它们会收到通知。 它们不需要跟踪单个设备。 设备接口类正在对设备公开的设备接口进行分组。 注册有关到达和删除设备接口的通知。
接口类的定义不在单个文件中提供。 设备接口类始终在属于特定设备类的头文件中定义。 例如, Ntddmou.h 包含GUID_DEVINTERFACE_MOUSE的定义,该 GUID 表示鼠标接口类。 Ntddpar.h 为并行设备定义接口类 GUID。 Ntddpcm.h 定义 PCMCIA 设备的标准接口类 GUID。 Ntddstor.h 定义存储设备的接口类 GUID。
若要注册设备接口通知,请使用特定于设备接口类的头文件中找到的 GUID。 这些 GUID 允许在设备接口实例到达时收到通知。 如果驱动程序使用安装类 GUID 而不是接口类 GUID 注册通知,则接口到达时不会收到通知。
定义新接口类时, 不要使用单个 GUID 来标识安装类和接口类。