KeSetEvent 関数 (wdm.h)

KeSetEvent ルーチンは、イベントがまだ通知されていない場合にイベント オブジェクトをシグナル状態に設定し、イベント オブジェクトの以前の状態を返します。

構文

LONG KeSetEvent(
  [in, out] PRKEVENT  Event,
  [in]      KPRIORITY Increment,
  [in]      BOOLEAN   Wait
);

パラメーター

[in, out] Event

呼び出し元がストレージを提供する初期化されたイベント オブジェクトへのポインター。

[in] Increment

イベントを設定すると待機が満たされる場合に適用される優先度の増分を指定します。

[in] Wait

KeSetEvent の呼び出しの直後に、KeWaitXxx ルーチンの 1 つを呼び出すかどうかを指定します。 TRUE の場合、KeSetEvent 呼び出しの後に KeWaitForMultipleObjectsKeWaitForMutexObject、または KeWaitForSingleObject を呼び出す必要があります。 詳細については、「解説」を参照してください。

戻り値

イベント オブジェクトの以前の状態が通知された場合は、0 以外の値が返されます。

注釈

KeSetEvent を呼び出すと、イベントはシグナル状態になります。 イベントが通知イベントの場合、システムはイベント オブジェクトに対して可能な限り多くの待機を満たそうとします。 イベントは、 KeClearEvent または KeResetEvent の呼び出しによってクリアされるまで通知されたままになります。 イベントが同期イベントの場合、システムがイベントを自動的にクリアする前に、1 つの待機が満たされます。

KeSetEvent ルーチンは、IRQL を一時的に発生させる可能性があります。 Wait パラメーターが FALSE の場合、ルーチンは戻る前に、IRQL を呼び出しの開始時の元の値に復元します。

WAIT = TRUE の場合、ルーチンは IRQL を下げずに を返します。 この場合、 KeSetEvent 呼び出しの直後に KeWaitXxx 呼び出しが続く必要があります。 Wait = TRUE を設定すると、呼び出し元は KeSetEvent 呼び出しと KeWaitXxx 呼び出しの間で不要なコンテキスト切り替えが発生しないようにできます。 KeWaitXxx ルーチンは、返される前に、KeSetEvent 呼び出しの開始時に IRQL を元の値に復元します。 IRQL では 2 つの呼び出し間のコンテキスト 切り替えを無効にしますが、これらの呼び出しをアトミック操作の開始と終了として確実に使用することはできません。 たとえば、これら 2 つの呼び出しの間に、別のプロセッサで同時に実行されているスレッドによって、イベント オブジェクトまたは待機のターゲットの状態が変更される可能性があります。

IRQL = PASSIVE_LEVEL で実行されるページング可能なスレッドまたはページング可能なドライバー ルーチンは、Wait パラメーターが TRUE に設定された KeSetEvent を呼び出さないでください。 このような呼び出しは、呼び出し元が KeSetEventKeWaitXxx の呼び出しの間にページングされた場合に致命的なページ フォールトを引き起こします。

イベント オブジェクトの詳細については、「 イベント オブジェクト」を参照してください。

WaitFALSE に設定されている場合、呼び出し元は IRQL <= DISPATCH_LEVELで実行できます。 それ以外の場合、 KeSetEvent の呼び出し元は IRQL <= APC_LEVELおよび非arbitrary スレッド コンテキストで実行されている必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL 「解説」を参照してください。
DDI コンプライアンス規則 CompletionEventChecking(wdm)DoubleKeSetEvent(storport)HwStorPortProhibitedDDIs(storport)IoAllocateIrpSignalEventInCompletion(wdm)IoBuildDeviceIoControlSetEvent(wdm)IoBuildFsdIrpSignalEventInCompletion(wdm)IrqlKeSetEvent(wdm)SignalEventInCompletion(wdm)

こちらもご覧ください

KeClearEvent

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject

I/O 要求完了時の優先度引き上げの指定