Функция ZwNotifyChangeKey (ntifs.h)

Подпрограмма ZwNotifyChangeKey позволяет драйверу запрашивать уведомление при изменении раздела реестра.

Синтаксис

NTSYSAPI NTSTATUS ZwNotifyChangeKey(
  [in]            HANDLE           KeyHandle,
  [in, optional]  HANDLE           Event,
  [in, optional]  PIO_APC_ROUTINE  ApcRoutine,
  [in, optional]  PVOID            ApcContext,
  [out]           PIO_STATUS_BLOCK IoStatusBlock,
  [in]            ULONG            CompletionFilter,
  [in]            BOOLEAN          WatchTree,
  [out, optional] PVOID            Buffer,
  [in]            ULONG            BufferSize,
  [in]            BOOLEAN          Asynchronous
);

Параметры

[in] KeyHandle

Обработка ключа для регистрации подпрограммы уведомлений. Этот дескриптор создается путем успешного вызова ZwCreateKey или ZwOpenKey. Вызывающий объект должен указать KEY_NOTIFY доступ.

[in, optional] Event

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

[in, optional] ApcRoutine

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

[in, optional] ApcContext

Указатель для передачи в качестве аргумента в подпрограмму APC, на которую указывает ApcRoutine . Этот аргумент является обязательным, если ApcRoutine не имеет значение NULL и должен быть приведен к типу PVOID. В противном случае, если ApcRoutine имеет значение NULL, присвойте этому параметру значение NULL.

Значение этого параметра зависит от того, вызывается ли подпрограмма из режима ядра или из пользовательского режима:

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

    • CriticalWorkQueue
    • DelayedWorkQueue
  • Для вызова в пользовательском режиме этот параметр указывает на контекст, заданный вызывающим объектом, для подпрограммы APC.

[out] IoStatusBlock

Указатель на структуру IO_STATUS_BLOCK , содержащую конечное состояние и сведения об операции. Для успешных вызовов, возвращающих данные, количество байтов, записанных в Buffer, предоставляется в IoStatusBlock-Information>.

[in] CompletionFilter

Битовая маска операций, которые приводят к уведомлению драйвера. Укажите один или несколько следующих флагов:

Значение Значение
REG_NOTIFY_CHANGE_NAME Уведомите вызывающего абонента о добавлении или удалении подраздела.
REG_NOTIFY_CHANGE_ATTRIBUTES Уведомите вызывающий объект об изменениях атрибутов ключа, таких как сведения о дескрипторове безопасности.
REG_NOTIFY_CHANGE_LAST_SET Уведомите вызывающий объект об изменениях в значении ключа. Это может включать добавление или удаление значения, а также изменение существующего значения. (Вызывающий объект не получает уведомления, если новое значение, записанное в ключ, соответствует предыдущему значению ключа.)
REG_NOTIFY_CHANGE_SECURITY Уведомите вызывающий объект об изменениях дескриптора безопасности ключа.

[in] WatchTree

Если задано значение TRUE, драйвер получает уведомление об изменениях во всех подразделах указанного ключа. При значении FALSE драйвер получает уведомление только об изменениях указанного ключа.

[out, optional] Buffer

Зарезервировано. Укажите ЗНАЧЕНИЕ NULL.

[in] BufferSize

Зарезервировано. Укажите ноль.

[in] Asynchronous

Если значение РАВНО FALSE, подпрограмма не возвращается, пока не произойдет указанное событие. Если задано значение TRUE, подпрограмма возвращается немедленно.

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

Подпрограмма ZwNotifyChangeKey возвращает STATUS_SUCCESS при успешном выполнении или соответствующее значение NTSTATUS в противном случае. Если вызывающий объект задает значение TRUE для параметра Асинхронный , а событие еще не произошло, подпрограмма возвращает STATUS_PENDING.

Комментарии

Если вызов функции ZwNotifyChangeKey происходит в пользовательском режиме, следует использовать имя NtNotifyChangeKey вместо ZwNotifyChangeKey.

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

Требования

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

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

IO_STATUS_BLOCK

WORK_QUEUE_ITEM

WORK_QUEUE_TYPE

ZwCreateKey

ZwOpenKey