ioGetDeviceInterfaces 函数 (wdm.h)

IoGetDeviceInterfaces 例程返回特定设备接口类的设备接口实例列表, (例如系统上支持 HID 接口) 的所有设备。

语法

NTSTATUS IoGetDeviceInterfaces(
  [in]           const GUID     *InterfaceClassGuid,
  [in, optional] PDEVICE_OBJECT PhysicalDeviceObject,
  [in]           ULONG          Flags,
  [out]          PZZWSTR        *SymbolicLinkList
);

参数

[in] InterfaceClassGuid

指向指定设备接口类的类 GUID 的指针。 类的 GUID 应位于特定于设备的头文件中。

[in, optional] PhysicalDeviceObject

指向可选 PDO 的指针,该可选 PDO 将搜索范围缩小到仅由 PDO 表示的设备接口实例。

[in] Flags

指定修改设备接口搜索的标志。 目前仅定义了一个标志,下表中对其进行了说明。

标志 含义
DEVICE_INTERFACE_INCLUDE_NONACTIVE 除启用的接口实例外,还返回已禁用的设备接口实例。
 

搜索支持特定接口类的设备时,调用方需要已启用的接口实例,因此不会设置DEVICE_INTERFACE_INCLUDE_NONACTIVE标志。

驱动程序通常设置 DEVICE_INTERFACE_INCLUDE_NONACTIVE 标志,以查找驱动程序必须启用的已禁用接口实例。 例如,INF 文件指示设备的类安装程序为设备注册一个或多个接口实例。 接口实例将被注册,但在驱动程序 (使用 IoSetDeviceInterfaceState) 启用它们之前,它们不可用。 若要将返回的接口实例列表缩小到仅由给定设备公开的接口实例列表,驱动程序可以指定 PhysicalDeviceObject

[out] SymbolicLinkList

指向宽字符指针的指针,如果成功,例程将写入包含 Unicode 字符串列表的缓冲区的基址。 这些字符串是符号链接名称,用于标识与搜索条件匹配的设备接口实例。 列表中的每个 Unicode 字符串都以 null 结尾;整个列表的末尾标有一个额外的 null 字符。 例程从分页系统内存中为这些字符串分配缓冲区。 调用方负责在不再需要 ExFreePool 例程) 时释放缓冲区 (。

如果没有设备接口实例与搜索条件匹配,则此例程返回STATUS_SUCCESS,并且字符串包含单个 NULL 字符。

返回值

如果调用成功,IoGetDeviceInterfaces 将返回STATUS_SUCCESS。 可能的错误返回值包括以下内容。

返回代码 说明
STATUS_INVALID_DEVICE_REQUEST
可能指示 PhysicalDeviceObject 不是有效的 PDO 指针。

注解

IoGetDeviceInterfaces 返回与搜索条件匹配的设备接口实例的列表。 内核模式组件通常调用此例程来获取特定设备接口类的所有已启用设备接口实例的列表。 此类组件可以通过调用 IoGetDeviceObjectPointerZwCreateFile 例程获取指向接口的文件对象和/或设备对象的指针。 IoGetDeviceObjectPointer 返回的设备对象指针指向设备堆栈的顶部,可用于调用 IoCallDriver 例程。

如果请求的设备接口类有默认接口,则它首先列在 SymbolicLinkList 中。 默认接口可以按用户模式设置,但不能按内核模式设置。

符号链接名称的格式不透明;调用方不应尝试分析符号链接名称。

设备接口实例的符号链接可以跨系统启动使用。

若要在系统上启用特定类的其他设备接口实例时收到通知,请通过调用 IoRegisterPlugPlayNotification 例程注册设备类更改通知。

IoGetDeviceInterfaces 的调用方必须在系统线程的上下文中以 IRQL = PASSIVE_LEVEL 运行。

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (请参阅“备注”部分)
DDI 符合性规则 HwStorPortProhibitedDDI (storport) MarkPower (wdm) MarkPowerDown (wdm) MarkQueryRelations (wdm) MarkStartDevice (wdm) PowerIrpDDis (wdm)

另请参阅

ExFreePool

IoCallDriver

IoGetDeviceObjectPointer

IoRegisterDeviceInterface

IoRegisterPlugPlayNotification

IoSetDeviceInterfaceState

ZwCreateFile