Функция ZwCreateKeyTransacted (wdm.h)
Подпрограмма ZwCreateKeyTransacted создает новый раздел реестра или открывает существующий и связывает его с транзакцией.
Синтаксис
NTSYSAPI NTSTATUS ZwCreateKeyTransacted(
[out] PHANDLE KeyHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
ULONG TitleIndex,
[in, optional] PUNICODE_STRING Class,
[in] ULONG CreateOptions,
[in] HANDLE TransactionHandle,
[out, optional] PULONG Disposition
);
Параметры
[out] KeyHandle
Указатель на переменную HANDLE, в которую подпрограмма записывает дескриптор в ключ.
[in] DesiredAccess
Указывает тип доступа к ключу, который запрашивает вызывающий объект. Этот параметр является ACCESS_MASK значением. Дополнительные сведения см. в описании параметра DesiredAccess подпрограммы ZwCreateKey .
[in] ObjectAttributes
Указатель на атрибуты объекта открываемого ключа. Этот параметр указывает на структуру OBJECT_ATTRIBUTES , которая должна быть ранее инициализирована подпрограммой InitializeObjectAttributes . Вызывающий объект должен указать имя раздела реестра в качестве параметра ObjectName в вызове InitializeObjectAttributes. Если вызывающий объект не выполняется в контексте системного потока, он должен задать атрибут OBJ_KERNEL_HANDLE при вызове InitializeObjectAttributes.
TitleIndex
Драйверы устройств и промежуточных параметров задают для этого параметра нулевое значение.
[in, optional] Class
Драйверы устройства и промежуточные драйверы устанавливают для этого параметра значение NULL.
[in] CreateOptions
Задает параметры, применяемые при создании или открытии ключа подпрограммой. Присвойте этому параметру значение ноль или побитовое ЗНАЧЕНИЕ ИЛИ одного или нескольких следующих битов флага REG_OPTION_XXX .
Флаг CreateOptions | Описание |
---|---|
REG_OPTION_VOLATILE | Ключ не сохраняется после перезагрузки компьютера. |
REG_OPTION_NON_VOLATILE | Ключ сохраняется после перезагрузки компьютера. |
REG_OPTION_CREATE_LINK | Ключ является символьной ссылкой. Этот флаг не используется драйверами устройств и промежуточными драйверами. |
REG_OPTION_BACKUP_RESTORE | Откройте ключ со специальными привилегиями, которые позволяют выполнять операции резервного копирования и восстановления. Этот флаг не используется драйверами устройств и промежуточными драйверами. |
[in] TransactionHandle
Дескриптор объекта транзакции. Чтобы получить этот дескриптор, можно вызвать подпрограмму ZwCreateTransaction . Или, если у вас есть указатель на объект транзакции, можно указать указатель на подпрограмму ObOpenObjectByPointer , чтобы получить соответствующий дескриптор транзакции.
[out, optional] Disposition
Указатель на расположение, в которое подпрограмма записывает одно из следующих значений, чтобы указать, создал ли вызов новый ключ или открыл существующий.
Значение ликвидации | Описание |
---|---|
REG_CREATED_NEW_KEY | Создан новый ключ. |
REG_OPENED_EXISTING_KEY | Был открыт существующий ключ. |
Если эти сведения не требуются, можно задать для ликвидации = значение NULL .
Возвращаемое значение
ZwCreateKeyTransacted возвращает STATUS_SUCCESS, если вызов успешно создает или открывает ключ. Возможные возвращаемые значения ошибок:
Код возврата | Описание |
---|---|
|
Параметр ObjectAttributes имеет значение NULL или указывает на недопустимые сведения, либо значение параметра CreateOptions указывает недопустимые параметры. |
|
Недопустимый путь реестра в атрибутах объекта. |
|
Путь к реестру в атрибутах объекта не найден. |
|
У вызывающего не было прав доступа, необходимых для открытия дескриптора для именованного раздела реестра. |
|
Сбой операции выделения памяти. |
Комментарии
Эта подпрограмма предоставляет дескриптор, с помощью который вызывающий объект может получить доступ к разделу реестра. Кроме того, эта подпрограмма связывает ключ с активной транзакцией.
После того как дескриптор, на который указывает KeyHandle , больше не используется, драйвер должен вызвать подпрограмму ZwClose , чтобы закрыть ее.
Как и ZwCreateKeyTransacted, подпрограмма ZwOpenKeyTransacted связывает ключ с транзакцией. В отличие от ZwCreateKeyTransacted, который может создать новый раздел или открыть существующий ключ, ZwOpenKeyTransacted может открывать только уже существующий раздел реестра.
После того как драйвер в режиме ядра получает дескриптор транзакции (например, путем вызова ZwCreateTransaction), драйвер может выполнять ряд операций реестра, которые являются частью этой транзакции. Драйвер может закрыть транзакцию, зафиксировав изменения, внесенные в транзакцию, или откатив транзакцию.
После успешного завершения всех операций реестра, которые являются частью транзакции, драйвер может вызвать подпрограмму ZwCommitTransaction для фиксации изменений. Драйвер может вызвать подпрограмму ZwRollbackTransaction для отката транзакции.
Во время транзакции операция реестра является частью транзакции, если системный вызов, выполняющий операцию, соответствует одно из следующих условий:
- Вызов задает в качестве входного параметра дескриптор транзакции. Например, вызовы ZwCreateKeyTransacted и ZwOpenKeyTransacted могут связать один или несколько дескрипторов с разделами реестра с транзакцией.
- Вызов задает в качестве входного параметра дескриптор раздела реестра, полученный при вызове ZwCreateKeyTransacted или ZwOpenKeyTransacted , которому был предоставлен дескриптор транзакции. Например, вызов подпрограммы ZwSetValueKey может использовать дескриптор ключа, полученный таким образом, для задания значения раздела реестра в рамках транзакции.
Дескриптор безопасности в атрибутах объекта определяет, предоставляются ли права доступа, указанные в параметре DesiredAccess , при последующих вызовах подпрограмм, таких как ZwOpenKeyTransacted , которые обращаются к ключу, или подпрограмм, таких как ZwCreateKeyTransacted, создающих подразделы ключа.
Если вызывающий объект режима ядра не выполняется в контексте системного потока, он должен убедиться, что все создаваемые дескрипторы являются дескрипторами ядра. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер. Дополнительные сведения см. в разделе Дескрипторы объектов.
Дополнительные сведения о работе с разделами реестра в режиме ядра см. в разделе Использование реестра в драйвере.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows Vista и более поздних версиях Windows. |
Целевая платформа | Универсальное |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |