KeReleaseMutex 関数 (wdm.h)

KeReleaseMutex ルーチンはミューテックス オブジェクトを解放し、KeReleaseMutex が制御を返すとすぐに呼び出し元が KeWaitXxx ルーチンの 1 つを呼び出すかどうかを指定します。

構文

LONG KeReleaseMutex(
  [in, out] PRKMUTEX Mutex,
  [in]      BOOLEAN  Wait
);

パラメーター

[in, out] Mutex

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

[in] Wait

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

戻り値

戻り値が 0 の場合、ミューテックス オブジェクトは解放され、 シグナル状態になります。

注釈

パフォーマンスを向上させるには、高速ミューテックスまたは保護されたミューテックスを使用します。 詳細については、「 Mutex オブジェクトの代替方法」を参照してください。

ミューテックス オブジェクトがシグナル状態に達すると、ミューテックス オブジェクトの待機を満たそうとします。

ミューテックス オブジェクトは、現在ミューテックスを保持しているスレッドによってのみ解放できます。 スレッドが保持していないミューテックスを解放しようとした場合、または IRQL = DISPATCH_LEVELでミューテックスが取得され、スレッドがDISPATCH_LEVELで実行されていない場合 (およびその逆も同様)、ルーチンはSTATUS_ABANDONEDまたはSTATUS_MUTEX_NOT_OWNED例外を発生させます。

ミューテックス オブジェクトがシグナル状態になると、そのスレッドによって保持されているミューテックスの一覧から削除されます。 このリストにこれ以上エントリが含まれない場合は、スレッドの元の優先度が復元されます。

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

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

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

ミューテックスが再帰的に取得された場合、保持スレッドは、ミューテックスを取得した回数だけ KeReleaseMutex を呼び出して、シグナル状態に設定する必要があります。

ミューテックス オブジェクトの詳細については、「 ミューテックス オブジェクト」を参照してください。

要件

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

こちらもご覧ください

ExReleaseFastMutex

ExReleaseFastMutexUnsafe

KeInitializeMutex

KeReadStateMutex

KeWaitForMultipleObjects

KeWaitForSingleObject