Открытие дескриптора для объекта 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

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

DELETE

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

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

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