打开注册表项对象的句柄
若要打开注册表项对象的句柄,请执行以下两个步骤:
创建 OBJECT_ATTRIBUTES 结构,并通过调用 InitializeObjectAttributes 对其进行初始化。 指定要操作的键的名称作为 InitializeObjectAttributes 的 ObjectName 参数。
如果将 NULL 作为 RootDirectory 参数传递给 InitializeObjectAttributes, 则 ObjectName 必须是注册表项的完整路径,从 \Registry 开始。 否则, RootDirectory 必须是键的打开句柄,而 ObjectName 是相对于该键的路径。
通过调用 ZwCreateKey 或 ZwOpenKey 打开密钥对象的句柄,并将 OBJECT_ATTRIBUTES 结构传递给该对象。 如果该键尚不存在, ZwCreateKey 将创建密钥,而 ZwOpenKey 将返回STATUS_OBJECT_NAME_NOT_FOUND。
将 DesiredAccess 参数传递给包含所请求的访问权限的 ZwCreateKey 或 ZwOpenKey 。 必须指定允许驱动程序执行的操作的访问权限。 下表列出了可以执行的操作以及要请求的相应访问权限。
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。
还可以调用 IoOpenDeviceRegistryKey 和 IoOpenDeviceInterfaceRegistryKey ,分别打开特定于设备的注册表项和设备接口特定的句柄。 有关详细信息,请参阅 即插即用 注册表例程。
注意 对于 对 ZwCreateKey、 ZwOpenKey、 IoOpenDeviceRegistryKey 和 IoOpenDeviceInterfaceRegistryKey 的调用,泛型访问权限GENERIC_READ和GENERIC_WRITE在含义上等效于键特定的访问权限,分别KEY_READ和KEY_WRITE,并且可用作这些特定于密钥的访问权限的替代项。