Функция ZwCreateKey (wdm.h)

Подпрограмма ZwCreateKey создает новый раздел реестра или открывает существующий.

Синтаксис

NTSYSAPI NTSTATUS ZwCreateKey(
  [out]           PHANDLE            KeyHandle,
  [in]            ACCESS_MASK        DesiredAccess,
  [in]            POBJECT_ATTRIBUTES ObjectAttributes,
                  ULONG              TitleIndex,
  [in, optional]  PUNICODE_STRING    Class,
  [in]            ULONG              CreateOptions,
  [out, optional] PULONG             Disposition
);

Параметры

[out] KeyHandle

Указатель на переменную HANDLE, которая получает дескриптор ключа.

[in] DesiredAccess

Задает значение ACCESS_MASK , определяющее запрошенный доступ к объекту. Помимо прав доступа, определенных для всех типов объектов (см. ACCESS_MASK), вызывающий объект может указать одно или несколько из следующих прав доступа, относящихся к каталогам объектов:

Флаг DesiredAccess Позволяет вызывающей службе сделать это
KEY_QUERY_VALUE Чтение значений ключей.
KEY_SET_VALUE Запись значений ключа.
KEY_CREATE_SUB_KEY Создайте подразделы для ключа.
KEY_ENUMERATE_SUB_KEYS Чтение подразделов ключа.
KEY_CREATE_LINK Создайте символьную ссылку на ключ. Этот флаг не используется устройствами и промежуточными драйверами.
KEY_NOTIFY Попросите получать уведомление при изменении имени, значения или атрибутов ключа. Дополнительные сведения см. в разделе ZwNotifyChangeKey.

Вызывающий объект также может указать одну из следующих констант, которая объединяет несколько флагов ACCESS_MASK.

Константа Состоит из этих флагов ACCESS_MASK
KEY_READ STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS и KEY_NOTIFY
KEY_WRITE STANDARD_RIGHTS_WRITE, KEY_SET_VALUE и KEY_CREATE_SUB_KEY
KEY_EXECUTE То же, что и KEY_READ.
KEY_ALL_ACCESS STANDARD_RIGHTS_ALL, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY и KEY_CREATE_LINK

[in] ObjectAttributes

Указатель на структуру OBJECT_ATTRIBUTES , указывающую имя объекта и другие атрибуты. Используйте InitializeObjectAttributes для инициализации этой структуры. Если вызывающий объект не выполняется в контексте системного потока, он должен задать атрибут OBJ_KERNEL_HANDLE при вызове InitializeObjectAttributes.

TitleIndex

Драйверы устройств и промежуточных параметров задают для этого параметра нулевое значение.

[in, optional] Class

Указатель на строку Юникода, содержащую класс объекта ключа. Эти сведения используются диспетчером конфигурации.

[in] CreateOptions

Указывает параметры, применяемые при создании или открытии ключа, указанные в качестве совместимого сочетания следующих флагов.

Флаг CreateOptions Описание
REG_OPTION_VOLATILE Ключ не сохраняется при перезагрузке системы.
REG_OPTION_NON_VOLATILE Ключ сохраняется при перезагрузке системы.
REG_OPTION_CREATE_LINK Только что созданный ключ является символьной ссылкой. Этот флаг не используется устройствами и промежуточными драйверами.
REG_OPTION_BACKUP_RESTORE Ключ следует создавать или открывать с особыми привилегиями, разрешающими операции резервного копирования и восстановления. Этот флаг не используется устройствами и промежуточными драйверами.

[out, optional] Disposition

Указатель на переменную, которая получает значение, указывающее, был ли создан новый ключ или открытый существующий.

Значение ликвидации Описание
REG_CREATED_NEW_KEY Был создан новый ключ.
REG_OPENED_EXISTING_KEY Был открыт существующий ключ.

Возвращаемое значение

ZwCreateKey возвращает STATUS_SUCCESS при успешном выполнении или соответствующий код ошибки NTSTATUS при сбое.

Комментарии

ZwCreateKey предоставляет дескриптор, который вызывающий объект может использовать для управления разделом реестра. Дополнительные сведения см. в статье Использование реестра в драйвере.

Когда дескриптор, на который указывает KeyHandle , больше не используется, драйвер должен вызвать ZwClose , чтобы закрыть его.

Существует два альтернативных способа указать имя файла, который будет создан или открыт с помощью ZwCreateKey:

  1. В виде полного имени пути, указанного в элементе ObjectName входных атрибутов ObjectAttributes. Путь к разделам реестра начинается с \Registry.

  2. В качестве pathname относительно другого раздела реестра, представленного дескриптором в элементе RootDirectory входного объекта ObjectAttributes.

Если ключ, указанный objectAttributes , не существует, подпрограмма пытается создать ключ. Для успешной попытки новый ключ должен быть прямым подразделом ключа, на который ссылается RootDirectory, а ключ, на который ссылается RootDirectory , должен быть открыт для KEY_CREATE_SUB_KEY доступа.

Если указанный ключ уже существует, он открывается и его значение никак не влияет.

Атрибуты безопасности, заданные ObjectAttributes при создании ключа, определяют, предоставляется ли указанный элемент DesiredAccess при последующих вызовах ZwCreateKey и ZwOpenKey.

Если вызывающий объект не выполняется в контексте системного потока, он должен убедиться, что все создаваемые дескрипторы являются частными. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер. Дополнительные сведения см. в разделе Дескрипторы объектов.

Дополнительные сведения о работе с разделами реестра см. в статье Использование реестра в драйвере.

Если вызов этой функции выполняется в пользовательском режиме, следует использовать имя NtCreateKey вместо ZwCreateKey.

Подпрограмма NtCreateKey в ядре Windows недоступна напрямую для драйверов режима ядра.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы Собственные системные службы Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями подпрограмм NtXxx и ZwXxx см. в разделе Использование версий NT и Zw подпрограмм собственных системных служб.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(wdm)

См. также раздел

ACCESS_MASK

InitializeObjectAttributes

Использование версий Nt и Zw собственных процедур системных служб

ZwClose

ZwDeleteKey

ZwEnumerateKey

ZwEnumerateValueKey

ZwFlushKey

ZwNotifyChangeKey

ZwOpenKey

ZwQueryValueKey

ZwSetValueKey