设备接口类概述
用户模式代码可将 I/O 请求定向到的物理、逻辑或虚拟设备的任何驱动程序都必须为其用户模式客户端提供名称。 使用名称,用户模式应用程序 (或其他系统组件) 标识其请求 I/O 的设备。
在 Windows NT 4.0 及更低版本的基于 NT 的操作系统中,驱动程序为其设备对象命名,然后在注册表中设置这些名称和用户可见的 Win32 逻辑名称之间的符号链接。
从 Windows 2000 开始,驱动程序不会命名设备对象。 相反,它们使用按设备接口类分组的设备接口。 设备接口类是一种将设备和驱动程序功能导出到其他系统组件(包括其他驱动程序以及用户模式应用程序)的方法。 驱动程序可以为用户 模式 I/O 请求可能发送到的每个设备对象注册并启用 设备接口类的设备接口 实例。 每个 设备接口类 都应表示该类中的任何 设备接口 都应支持或表示的概念功能,例如特定的 I/O 协定。
每个设备接口类都与 GUID 相关联。 系统为特定于设备的头文件中的常见设备接口类定义 GUID。 供应商可以创建其他设备接口类。
例如,三种不同类型的鼠标设备可以注册属于同一 设备接口类成员的设备接口 ,即使其中一个通过 USB 端口连接,第二个通过串行端口连接,第三个通过红外端口连接。 每个驱动程序将其设备注册为接口类GUID_DEVINTERFACE_MOUSE的成员。 此 GUID 在头文件 Ntddmou.h 中定义。
驱动程序可以为它们控制的设备注册和启用设备 接口 ,以便为设备和驱动程序支持该功能的任意数量的 设备接口类 。 例如,可装载的磁盘的驱动程序应注册其磁盘接口类 (GUID_DEVINTERFACE_DISK) 和可装载设备类 (MOUNTDEV_MOUNTED_DEVICE_GUID) 。
当驱动程序注册设备接口类的设备接口实例时,I/O 管理器会将设备和设备接口类 GUID 与符号链接名称相关联。 驱动程序必须启用设备接口,以便该符号链接可供驱动程序或应用程序向其发送 I/O。 链接名称的注册在系统启动时保持不变,但 设备接口 必须由驱动程序在设备的每个枚举上启用。 使用特定 设备接口类 的应用程序可以查询该类中 设备接口 的实例,并接收表示支持接口的设备的符号链接名称列表。 然后,应用程序可以使用符号链接名称作为 I/O 请求的目标。
不要将设备接口与驱动程序在响应IRP_MN_QUERY_INTERFACE请求时可以导出 的 接口混淆。 该 IRP 用于在内核模式驱动程序之间传递例程入口点。