IoOpenDeviceRegistryKey 函数 (wdm.h)

IoOpenDeviceRegistryKey 例程返回特定设备实例的注册表状态位置的句柄。

语法

NTSTATUS IoOpenDeviceRegistryKey(
  [in]  PDEVICE_OBJECT DeviceObject,
  [in]  ULONG          DevInstKeyType,
  [in]  ACCESS_MASK    DesiredAccess,
  [out] PHANDLE        DeviceRegKey
);

参数

[in] DeviceObject

指向要为其打开注册表状态位置的设备实例 物理设备对象(PDO) 的指针。

[in] DevInstKeyType

指定指示是打开特定于设备的硬件密钥还是特定于驱动程序的软件密钥的标志。 标志还指示密钥是否相对于当前硬件配置文件。 有关硬件和软件密钥的详细信息,请参阅 驱动程序的注册表项简介

标志的定义如下:

PLUGPLAY_REGKEY_DEVICE

打开设备的硬件密钥,这是一个特定于设备的注册表状态位置,其中包含有关设备的信息。 不能使用PLUGPLAY_REGKEY_DRIVER指定此标志。

PLUGPLAY_REGKEY_DRIVER

打开设备的软件密钥,这是用于存储特定于驱动程序的信息的设备特定的注册表状态位置。 不能使用PLUGPLAY_REGKEY_DEVICE指定此标志。

PLUGPLAY_REGKEY_CURRENT_HWPROFILE

硬件配置文件已弃用,不应相对于硬件配置文件存储状态。

打开相对于设备或驱动程序信息的当前硬件配置文件的密钥。 这允许驱动程序访问特定于硬件配置文件的配置信息。 调用方必须使用此标志指定PLUGPLAY_REGKEY_DEVICE或PLUGPLAY_REGKEY_DRIVER。

[in] DesiredAccess

指定表示调用方对密钥所需的访问的 ACCESS_MASK 值。 有关每个 KEY_XXX 访问权限的说明,请参阅 ZwCreateKey 例程。

[out] DeviceRegKey

指向调用方分配的缓冲区的指针,在成功返回时,该缓冲区包含所请求的注册表状态位置的句柄。

返回值

IoOpenDeviceRegistryKey 如果调用成功,则返回STATUS_SUCCESS。 可能的错误返回值包括:

返回代码 描述
STATUS_INVALID_PARAMETER 可能表示调用方指定了一组非法的 DevInstKeyType 标志,或者提供了非有效 PDO 的 DeviceObject

言论

驱动程序必须调用 ZwClose 才能在不再需要访问时关闭从此例程返回的句柄。

此例程打开的注册表项是非易失性。

用户模式设置应用程序可以使用 CM_Open_DevNode_Key设备信息函数 访问这些注册表项,例如 SetupDiOpenDevRegKeySetupDiCreateDevRegKey

若要在驱动程序包安装时预先填充这些注册表状态位置中的状态,请在 INF 文件中使用 INF AddReg 指令

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

要求

要求 价值
目标平台 普遍
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL(请参阅“备注”部分)
DDI 符合性规则 HwStorPortProhibitedDIS(storport)PowerIrpDDis(wdm)

另请参阅

驱动程序的注册表项简介

ACCESS_MASK

ZwCreateKey

ZwClose

设备节点和设备堆栈