ExAcquireSharedWaitForExclusive 函式 (wdm.h)
ExAcquireSharedWaitForExclusive 例程會在可授與共用存取權且沒有獨佔等候程序的情況下,取得共用存取的指定資源。
語法
BOOLEAN ExAcquireSharedWaitForExclusive(
[in, out] PERESOURCE Resource,
[in] BOOLEAN Wait
);
參數
[in, out] Resource
要取得以供共用存取之資源的指標。
[in] Wait
指定每當無法立即取得資源時,例程的行為。 如果 為 TRUE,則呼叫端會進入等候狀態,直到取得資源為止。 如果 為 FALSE,則不論是否可以取得資源,例程都會立即傳回。
傳回值
如果授與要求的存取權或獨佔擁有者釋放資源,ExAcquireSharedWaitForExclusive 會傳回 TRUE。 如果輸入 Wait 為 FALSE 且無法立即授與共用存取權,此例程會傳回 FALSE。
備註
大部分驅動程式都應該使用 ExAcquireResourceSharedLite ,而不是 ExAcquireSharedWaitForExclusive。
呼叫端可以呼叫 ExReleaseResourceLite 或 ExReleaseResourceForThreadLite 來釋放資源。
如果無法立即授與共用存取權,呼叫端可以等候其他線程取得並釋放資源的獨佔擁有權。
呼叫端是否獲得指定資源的共用存取權取決於下列專案:
- 如果資源目前未擁有,則會立即將共用存取權授與目前線程。
- 如果呼叫端已經有資源的獨佔存取權,則目前的線程會以遞歸方式授與相同的存取類型。
- 如果資源目前擁有為共用,而且沒有暫止嘗試取得獨佔存取權,則會立即將共用存取權授與給呼叫端。
-
如果資源目前擁有為共用,但有暫止嘗試取得獨佔存取權,則呼叫端會進入等候狀態, (Wait 設定為 TRUE) 或 ExAcquireSharedWaitForExclusive 會傳回 FALSE。
當目前的線程等候取得資源,直到釋放擱置的獨佔擁有權之後, ExAcquireSharedWaitForExclusive 會在目前線程獲得資源的共用存取權並繼續執行時傳回 TRUE 。
如果呼叫端指定 Wait 參數的 TRUE,呼叫端會封鎖直到另一個線程使用 ExReleaseResourceForThread 釋放資源為止。 驅動程式寫入器必須小心,以確保另一個線程實際釋放資源;否則呼叫端會死結。 ExAcquireResourceSharedLite 沒有這個屬性,因此驅動程式應該使用該例程,除非它們需要 ExAcquireSharedWaitForExclusive 的特定行為。
呼叫此例程之前,必須先停用一般核心 APC 傳遞。 呼叫 KeEnterCriticalRegion 以停用一般核心 APC 傳遞。 傳遞必須保持停用狀態,直到資源釋放為止,呼叫 KeLeaveCriticalRegion即可重新啟用它。 如需詳細資訊,請參閱 停用 APC。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDDIs (storport) 、 IrqlExApcLte3 (wdm ) 、 SpNoWait (storport ) 、 WithinCriticalRegion (storport) 、WithinCriticalRegion (storport ) 、WithinCriticalRegion (wdm) |
另請參閱
ExAcquireSharedStarveExclusive
ExConvertExclusiveToSharedLite
ExIsResourceAcquiredExclusiveLite