设备接口可用于内核模式组件和用户模式应用程序。 用户模式代码可以使用 CfgMgr32 函数 (例如 ,CM_Get_Device_Interface_List)或 SetupDiXxx 函数(请参阅 SetupDi 设备接口函数)来了解已注册、已启用的设备接口。 然后,用户模式应用程序可以使用 I/O API(如 CreateFile )获取设备的句柄,以便向其发送 I/O。 若要获取有关启用和禁用设备接口以及如何对这些操作做出反应的通知,请参阅 注册接收有关设备接口到达和设备移除的通知。
在内核模式组件可以使用特定设备或文件对象之前,它必须执行以下操作:
确定是否注册并启用所需的设备接口类。
驱动程序可以向 PnP 管理器注册,以便在某个设备接口实例被启用或禁用时收到通知。 若要注册,组件将调用 IoRegisterPlugPlayNotification。 此例程存储驱动程序提供的回调地址;对于指定的设备类,在设备接口实例被启用或禁用时,会调用该回调。 回调例程接收 DEVICE_INTERFACE_CHANGE_NOTIFICATION 结构,该结构包含表示接口实例符号链接的 Unicode 字符串。 有关详细信息,请参阅 使用 PnP 设备接口更改通知 。
驱动程序或其他内核模式组件还可以调用 IoGetDeviceInterfaces 以获取特定设备接口类的所有已注册、已启用的设备接口实例的列表。 返回的列表包含指向标识设备接口实例的 Unicode 符号链接字符串的指针。
获取指向与接口实例相对应的设备或文件对象的指针。
若要访问特定设备对象,驱动程序必须调用 IoGetDeviceObjectPointer,并传递 ObjectName 参数中所需接口的 Unicode 字符串。 若要访问文件对象,驱动程序必须调用 InitializeObjectAttributes,在 ObjectName 参数中传递 Unicode 字符串,然后在调用 ZwCreateFile 时传递已初始化的属性结构。