ZwOpenKey 函数 (wdm.h)

ZwOpenKey 例程打开现有注册表项。

语法

NTSYSAPI NTSTATUS ZwOpenKey(
  [out] PHANDLE            KeyHandle,
  [in]  ACCESS_MASK        DesiredAccess,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes
);

参数

[out] KeyHandle

指向 HANDLE 变量的指针,该变量接收键的句柄。

[in] DesiredAccess

指定一个 ACCESS_MASK 值,该值确定对 对象的请求访问权限。 有关详细信息,请参阅 ZwCreateKeyDesiredAccess 参数。

[in] ObjectAttributes

指向 OBJECT_ATTRIBUTES 结构的指针,该结构指定对象名称和其他属性。 使用 InitializeObjectAttributes 初始化此结构。 如果调用方未在系统线程上下文中运行,则必须在调用 InitializeObjectAttributes 时设置 OBJ_KERNEL_HANDLE 属性。

返回值

如果打开给定密钥,ZwOpenKey 将返回STATUS_SUCCESS。 否则,它可能会返回错误状态,包括以下内容:

  • STATUS_INVALID_HANDLE

  • STATUS_ACCESS_DENIED

注解

ZwOpenKey 提供调用方可用于操作注册表项的句柄。 例程提供 ZwCreateKey 功能的子集。 有关详细信息,请参阅 在驱动程序中使用注册表

如果指定的键不存在, ZwOpenKey 将返回错误状态,并且不返回键句柄。

不再使用 KeyHandle 指向的句柄后,驱动程序必须调用 ZwClose 来关闭它。

ZwOpenKey 忽略 ObjectAttributes 参数指向的结构中的安全信息。

如果调用方未在系统线程上下文中运行,则必须确保它创建的任何句柄都是专用句柄。 否则,运行驱动程序的上下文中的进程可以访问句柄。 有关详细信息,请参阅 对象句柄

有关使用注册表项的详细信息,请参阅 在驱动程序中使用注册表

如果在用户模式下调用此函数,则应使用名称“NtOpenKey”而不是“ZwOpenKey”。

要求

要求
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlZwPassive (wdm) PowerIrpDDis (wdm) ZwRegistryCreate (storport) ZwRegistryOpen (storport) 、ZwRegistryOpen (storport) , ZwRegistryOpen (wdm)

另请参阅

ACCESS_MASK

InitializeObjectAttributes

ZwCreateKey

ZwDeleteKey

ZwEnumerateKey

ZwEnumerateValueKey

ZwFlushKey

ZwQueryKey

ZwQueryValueKey

ZwSetValueKey