KeReleaseMutex 函式 (wdm.h)
KeReleaseMutex 例程會釋放 mutex 物件,並指定呼叫者是否要在 KeReleaseMutex 傳回控件時,立即呼叫其中一個 KeWaitXxx 例程。
語法
LONG KeReleaseMutex(
[in, out] PRKMUTEX Mutex,
[in] BOOLEAN Wait
);
參數
[in, out] Mutex
呼叫端提供記憶體之初始化 Mutex 物件的指標。
[in] Wait
指定呼叫 KeReleaseMutex,是否要緊接著呼叫其中一個 KeWaitXxx 例程。 如果 TRUE,KeReleaseMutex 呼叫必須接著呼叫 KeWaitForMultipleObjects、KeWaitForMutexObject或 KeWaitForSingleObject。 如需詳細資訊,請參閱下列一節。
傳回值
如果傳回值為零,則會釋放 mutex 物件,並取得 發出訊號的狀態。
言論
為了提升效能,請使用快速 Mutex 或受防護的 Mutex。 如需詳細資訊,請參閱 Mutex 物件的替代項目。
如果 Mutex 對象達到訊號狀態,就會嘗試滿足 mutex 物件的等候。
Mutex 物件只能由目前保存 mutex 的線程釋放。 如果嘗試釋放線程未保存的 Mutex,或在 IRQL = DISPATCH_LEVEL 取得 mutex,且線程未在 DISPATCH_LEVEL 執行(反之亦然),則例程會引發STATUS_ABANDONED或STATUS_MUTEX_NOT_OWNED例外狀況。
當 Mutex 物件達到訊號狀態時,它會從該線程所持有的 Mutex 清單中移除。 如果此清單未再包含任何專案,則會還原線程的原始優先順序。
KeReleaseMutex 例程可能會暫時引發 IRQL。 如果 Wait 參數 FALSE,則例程在傳回之前,會將 IRQL 還原至呼叫開始時的原始值。
如果 Wait = TRUE,則例程會傳回而不降低 IRQL。 在此情況下,KeReleaseMutex 呼叫必須緊接著 KeWaitXxx 呼叫。 藉由設定 Wait = TRUE,呼叫端可以防止在呼叫 KeReleaseMu tex 和 KeWaitXxx 呼叫之間發生不必要的內容切換。 KeWaitXxx 例程傳回之前,會在 KeReleaseMutex 呼叫開始時,將 IRQL 還原為其原始值。 雖然 IRQL 會停用兩個呼叫之間的內容切換,但這些呼叫無法可靠地當做不可部分完成作業的開始和結尾使用。 例如,在這兩個呼叫之間,在另一個處理器上同時執行的線程可能會變更事件物件或等候目標的狀態。
如果呼叫端在 IRQL = DISPATCH_LEVEL或在任意線程內容中執行,Timeout 參數 KeWaitXxx 必須是零。
如果以遞歸方式取得 mutex,保留線程必須呼叫 KeReleaseMutex 取得 Mutex 的次數,才能將它設定為訊號狀態。
如需 mutex 物件的詳細資訊,請參閱 Mutex Objects。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport),IrqlKeDispatchLte(wdm) |