IoRegisterDeviceInterface 函数 (wdm.h)

IoRegisterDeviceInterface 例程注册 设备接口类(如果之前尚未注册),并创建接口类的新实例,驱动程序随后可以启用该实例供应用程序或其他系统组件使用。

语法

NTSTATUS IoRegisterDeviceInterface(
  [in]           PDEVICE_OBJECT  PhysicalDeviceObject,
  [in]           const GUID      *InterfaceClassGuid,
  [in, optional] PUNICODE_STRING ReferenceString,
  [out]          PUNICODE_STRING SymbolicLinkName
);

参数

[in] PhysicalDeviceObject

指向设备的 PDO 的指针。

[in] InterfaceClassGuid

指向标识要注册的功能(设备接口类)的类 GUID 的指针。

[in, optional] ReferenceString

(可选)指向 UNICODE_STRING。 字符串不得包含任何路径分隔符(“/”或“\”)。 函数驱动程序通常为此参数指定 NULL。 筛选器驱动程序必须指定 NULL

引用字符串仅由几个总线驱动程序使用,例如 swenum,它是使用设备接口实例作为按需创建的软件设备的占位符的总线驱动程序。 当打开接口的实例时,I/O 管理器会将实例的引用字符串传递给驱动程序。 字符串将成为接口实例名称的一部分(作为追加路径组件)。 然后,驱动程序可以使用引用字符串区分单个设备的同一类的两个接口实例。

在 Microsoft Windows 98/Me 系统上,ReferenceString 值不能超过MAX_PATH个字符。 Windows 2000 及更高版本的 Windows 没有长度限制。

[out] SymbolicLinkName

指向调用方分配的 Unicode 字符串结构的指针。 如果此例程成功,它将初始化 Unicode 字符串,并将包含内核模式路径的字符串缓冲区分配给指定设备接口类实例的符号链接。

调用方必须将 SymbolicLinkName 视为不透明,并且不得将其反汇编。

调用方负责在不再需要时使用 RtlFreeUnicodeString 释放 SymbolicLinkName

返回值

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

返回代码 描述
STATUS_INVALID_DEVICE_REQUEST
参数无效。 可能包括 PhysicalDeviceObject 不指向有效的 PDO,或者 ReferenceString 字符串包含无效字符。

言论

IoRegisterDeviceInterface 注册设备接口类(如果以前尚未注册)并创建接口类的新实例。 驱动程序可以多次调用给定设备的此例程来注册多个接口类并创建类的实例。 函数或筛选器驱动程序通常在其 AddDevice 例程中注册设备接口。 例如,容错卷驱动程序可能会为特定卷注册容错卷接口的实例和卷接口的实例。

如果设备接口类以前尚未注册,则 I/O 管理器会为其创建注册表项,以及密钥下特定于实例的持久存储。 驱动程序可以使用 IoOpenDeviceInterfaceRegistryKey访问此永久性存储。

驱动程序注册一次接口实例,然后调用 IoSetDeviceInterfaceState 来启用和禁用接口。

注册的接口在操作系统重新启动时会持续存在。 如果已注册指定的接口,则 I/O 管理器在 SymbolicLinkName 中传递其名称,并返回信息性成功状态STATUS_OBJECT_NAME_EXISTS。

大多数驱动程序对设备接口实例使用 NULL 引用字符串。 如果驱动程序使用非NULL 引用字符串,则必须执行其他工作,包括可能管理自己的命名空间和安全性。 公开设备接口的筛选器驱动程序必须使用 NULLReferenceString 以避免与设备堆栈中的其他驱动程序冲突。

不再需要此例程的调用方即可删除设备接口的注册。 如有必要,可以从用户模式中删除设备接口注册。

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

要求

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

另请参阅

IoGetDeviceInterfaces

IoOpenDeviceInterfaceRegistryKey

IoSetDeviceInterfaceState

RtlFreeUnicodeString