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

要为其注册通知例程的密钥句柄。 此句柄是通过成功调用 ZwCreateKeyZwOpenKey创建的。 调用方必须指定KEY_NOTIFY访问权限。

[in, optional] Event

在操作完成时,调用方创建的事件的可选句柄设置为 Signaled 状态。 如果不是 NULL,则调用方将进入等待状态,直到操作成功,此时事件将设置为 Signaled 状态。

[in, optional] ApcRoutine

指向调用方提供的 APC 例程的指针,该例程在操作完成后运行。 此参数是可选的,可以是 NULL。

[in, optional] ApcContext

指向 ApcRoutine 指向的 APC 例程的参数的指针。 如果 ApcRoutine 不为 NULL,并且必须强制转换为 PVOID 类型,则此参数是必需的。 否则,如果 ApcRoutine 为 NULL,则此参数也设置为 NULL。

此参数的含义取决于例程是从内核模式还是从用户模式调用:

  • 对于内核模式调用,请将此参数设置为以下 WORK_QUEUE_TYPE 枚举值之一:

    • CriticalWorkQueue
    • DelayedWorkQueue
  • 对于用户模式调用,此参数指向 APC 例程的调用方指定的上下文。

[out] IoStatusBlock

指向包含最终状态和操作信息 IO_STATUS_BLOCK 结构的指针。 对于返回数据的成功调用,IoStatusBlock中提供了写入 Buffer 的字节数 ->信息

[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”。

对于内核模式驱动程序的调用,NtXxxZwXxx 版本的 Windows 本机系统服务例程的行为方式可能以不同的方式处理和解释输入参数。 有关 NtXxxZwXxx 例程之间的关系的详细信息,请参阅 使用 Nt 和 Zw 版本的本机系统服务例程

要求

要求 价值
最低支持的客户端 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