对于用户模式代码可向其发送 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 用于在内核模式驱动程序之间传递例程入口点。