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) |