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

ApcRoutine が指す APC ルーチンに引数として渡すポインター。 この引数は、 ApcRoutine が NULL ではなく、PVOID 型にキャストする必要がある場合に必要です。 それ以外の場合、 ApcRoutine が NULL の場合は、このパラメーターも NULL に設定します。

このパラメーターの意味は、ルーチンがカーネル モードから呼び出されるか、ユーザー モードから呼び出されるかによって異なります。

  • カーネル モード呼び出しの場合は、このパラメーターを次のいずれかの WORK_QUEUE_TYPE 列挙値に設定します。

    • CriticalWorkQueue
    • DelayedWorkQueue
  • ユーザー モード呼び出しの場合、このパラメーターは APC ルーチンの呼び出し元指定のコンテキストを指します。

[out] IoStatusBlock

最終的 な状態 と操作に関する情報を含むIO_STATUS_BLOCK構造体へのポインター。 データを返す呼び出しが成功した場合、Buffer に書き込まれたバイト数は IoStatusBlock-Information> で指定されます。

[in] CompletionFilter

ドライバーに通知を受け取る操作のビットマスク。 次のフラグを 1 つ以上指定します。

説明
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

予約済み。 0 を指定します。

[in] Asynchronous

FALSE の場合、指定したイベントが発生するまでルーチンは戻りません。 TRUE の場合、ルーチンは直ちにを返します。

戻り値

ZwNotifyChangeKey ルーチンは、成功した場合はSTATUS_SUCCESSを返し、それ以外の場合は適切な NTSTATUS 値を返します。 呼び出し元が Async パラメーターに TRUE を指定し、イベントがまだ発生していない場合、ルーチンはSTATUS_PENDINGを返します。

注釈

ZwNotifyChangeKey 関数の呼び出しがユーザー モードで行われる場合は、"ZwNotifyChangeKey" の代わりに "NtNotifyChangeKey" という名前を使用する必要があります。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx バージョンと ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンの使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

こちらもご覧ください

IO_STATUS_BLOCK

WORK_QUEUE_ITEM

WORK_QUEUE_TYPE

ZwCreateKey

ZwOpenKey