Поделиться через


Функция 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, содержащую окончательное состояние и сведения об операции. Для успешных вызовов, возвращающих данные, число байтов, записанных в буфер буфера, предоставляется в 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 Native System Services могут вести себя по-разному в том, как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между NtXxx и ZwXxx версиями подпрограммы см. в разделе Using Nt and Zw Versions of the Native System Services Routines.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
правил соответствия DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

См. также

IO_STATUS_BLOCK

WORK_QUEUE_ITEM

WORK_QUEUE_TYPE

ZwCreateKey

ZwOpenKey