打开注册表项对象的句柄

若要打开注册表项对象的句柄,请执行以下两个步骤:

  1. 创建 OBJECT_ATTRIBUTES 结构,并通过调用 InitializeObjectAttributes 对其进行初始化。 指定要操作的键的名称作为 InitializeObjectAttributesObjectName 参数。

    如果将 NULL 作为 RootDirectory 参数传递给 InitializeObjectAttributes则 ObjectName 必须是注册表项的完整路径,从 \Registry 开始。 否则, RootDirectory 必须是键的打开句柄,而 ObjectName 是相对于该键的路径。

  2. 通过调用 ZwCreateKeyZwOpenKey 打开密钥对象的句柄,并将 OBJECT_ATTRIBUTES 结构传递给该对象。 如果该键尚不存在, ZwCreateKey 将创建密钥,而 ZwOpenKey 将返回STATUS_OBJECT_NAME_NOT_FOUND。

DesiredAccess 参数传递给包含所请求的访问权限的 ZwCreateKeyZwOpenKey 。 必须指定允许驱动程序执行的操作的访问权限。 下表列出了可以执行的操作以及要请求的相应访问权限。

Operation 所需的访问权限

获取注册表项值。

KEY_QUERY_VALUE或KEY_READ

设置注册表项值。

KEY_SET_VALUE或KEY_WRITE

循环访问键的所有子项。

KEY_ENUMERATE_SUB_KEYS或KEY_READ

创建子项。

KEY_CREATE_SUB_KEY或KEY_WRITE

删除密钥。

DELETE

有关 DesiredAccess 参数的可用值的详细信息,请参阅 ZwCreateKey

还可以调用 IoOpenDeviceRegistryKeyIoOpenDeviceInterfaceRegistryKey ,分别打开特定于设备的注册表项和设备接口特定的句柄。 有关详细信息,请参阅 即插即用 注册表例程

注意 对于 对 ZwCreateKeyZwOpenKeyIoOpenDeviceRegistryKeyIoOpenDeviceInterfaceRegistryKey 的调用,泛型访问权限GENERIC_READ和GENERIC_WRITE在含义上等效于键特定的访问权限,分别KEY_READ和KEY_WRITE,并且可用作这些特定于密钥的访问权限的替代项。