Поделиться через


Открытие хэндла для объекта Registry-Key

Чтобы открыть дескриптор объекта ключа реестра, выполните следующий процесс, состоящий из двух этапов:

  1. Создайте структуру OBJECT_ATTRIBUTES и инициализируйте ее путем вызова InitializeObjectAttributes. Укажите имя ключа для манипулирования в качестве параметра ObjectName функции InitializeObjectAttributes.

    Если вы передаете NULL в качестве параметра RootDirectory функции InitializeObjectAttributes, ObjectName должен быть полным путем к ключу реестра, начиная с \Registry. В противном случае RootDirectory должен быть открытым дескриптором ключа, а ObjectName — это путь относительно этого ключа.

  2. Откройте дескриптор ключевого объекта, вызвав ZwCreateKey или ZwOpenKey, и передайте в него структуру OBJECT_ATTRIBUTES. Если ключ еще не существует, ZwCreateKey создаст ключ, в то время как ZwOpenKey вернет STATUS_OBJECT_NAME_NOT_FOUND.

Вы передаете параметр DesiredAccess в ZwCreateKey или ZwOpenKey, который содержит права доступа, которые вы запрашиваете. Необходимо указать права доступа, разрешающие операции, которые будут выполняться драйвером. В следующей таблице перечислены операции, которые можно выполнить, и соответствующие права доступа для запроса.

Операция Необходимое право доступа

Получите значение ключа реестра.

KEY_QUERY_VALUE или KEY_READ

Задайте значение ключа реестра.

KEY_SET_VALUE или KEY_WRITE

Прокрутите все вложенные ключи.

KEY_ENUMERATE_SUB_KEYS (Перечисление подключей) или KEY_READ (Чтение ключа)

Создайте вложенный ключ.

KEY_CREATE_SUB_KEY или KEY_WRITE

Удалите ключ.

Удалить

Дополнительные сведения о доступных значениях параметра DesiredAccess см. в ZwCreateKey.

Вы также можете вызывать IoOpenDeviceRegistryKey и IoOpenDeviceInterfaceRegistryKey, чтобы открыть дескрипторы для тех разделов реестра, которые специфичны для устройств и интерфейса устройства соответственно. Дополнительные сведения см. подпрограммы реестра Plug and Play .

Примечание Для вызовов ZwCreateKey, ZwOpenKey, IoOpenDeviceRegistryKeyи IoOpenDeviceInterfaceRegistryKeyуниверсальные права доступа GENERIC_READ и GENERIC_WRITE эквивалентны правам доступа к ключу, KEY_READ и KEY_WRITE, и могут использоваться в качестве замены этих прав доступа для определенных ключей.