次の方法で共有


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 値を返します。 呼び出し元が 非同期 パラメーターに TRUE を指定し、イベントがまだ発生していない場合、ルーチンはSTATUS_PENDINGを返します。

備考

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

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxxZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの 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