次の方法で共有


KePulseEvent 関数 (ntddk.h)

KePulseEvent ルーチンは、イベント オブジェクトをシグナル状態にアトミックに設定し、できるだけ多くの待機を満たそうとしてから、イベント オブジェクトをシグナル化されていない状態にリセットします。

構文

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

パラメーター

[in, out] Event

KEVENT 型のディスパッチャー オブジェクトへのポインター。

[in] Increment

イベントをパルスした結果として準備されるスレッドの優先度に適用するブーストを指定します。 通常は 0 に設定されますが、1 に設定できます。

[in] Wait

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

戻り値

イベント オブジェクトの以前のシグナル状態。

注釈

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

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

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

呼び出し元が IRQL = DISPATCH_LEVELまたは任意のスレッド コンテキストで実行している場合、KeWaitXxx への Timeout パラメーターは 0 である必要があります。

警告

Event を待機しているスレッドが現在カーネル APC を実行している場合、KePulseEvent が呼び出されると、このスレッドの待機は満たされません。 カーネル APC が完了すると、スレッドは待機状態のままになります。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header ntddk.h (Ntddk.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

こちらもご覧ください

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject