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