共用方式為


ExAcquireSharedWaitForExclusive 函式 (wdm.h)

ExAcquireSharedWaitForExclusive 例程會取得共用存取的指定資源,如果可以授與共用存取權,而且沒有獨佔的等候者。

語法

BOOLEAN ExAcquireSharedWaitForExclusive(
  [in, out] PERESOURCE Resource,
  [in]      BOOLEAN    Wait
);

參數

[in, out] Resource

要取得以供共用存取之資源的指標。

[in] Wait

指定每當無法立即取得資源時,例程的行為。 如果 TRUE,則呼叫端會進入等候狀態,直到可以取得資源為止。 如果 FALSE,則不論是否可以取得資源,例程都會立即傳回。

傳回值

如果已授與要求的存取權或獨佔擁有者釋放資源,ExAcquireSharedWaitForExclusive 會傳回 true TRUE。 如果輸入 WaitFALSE 且無法立即授與共用存取權,此例程會傳回 FALSE

言論

大部分的驅動程式都應該使用 ExAcquireResourceSharedLite,而不是使用 ExAcquireSharedWaitForExclusive

呼叫端可以呼叫 ExReleaseResourceLiteExReleaseResourceForThreadLite來釋放資源。

如果無法立即授與共用存取權,呼叫端可以等候其他線程取得並釋放資源的獨佔擁有權。

呼叫端是否獲得指定資源的共用存取權取決於下列專案:

  • 如果資源目前未擁有,則會立即將共用存取權授與目前的線程。
  • 如果呼叫端已經具有資源的獨佔存取權,則目前的線程會以遞歸方式授與相同類型的存取權。
  • 如果資源目前擁有為共用,而且沒有暫止嘗試取得獨佔存取權,則會立即將共用存取權授與給呼叫端。
  • 如果資源目前以共用的形式擁有,但有暫止嘗試取得獨佔存取權,則呼叫端會進入等候狀態(Wait 設為 TRUE),或 ExAcquireSharedWaitForExclusive 傳回 FALSE

    當目前線程等候取得資源,直到釋放擱置的獨佔擁有權之後,ExAcquireSharedWaitForExclusive 傳回 TRUE 當目前線程獲得資源的共用存取權並繼續執行時。

ExAcquireSharedWaitForExclusive 的行為與 ExAcquireResourceSharedLite 的行為相同,除非呼叫線程已將資源擁有為共用且有獨佔等候者。 在此情況下,ExAcquireSharedWaitForExclusive 可讓獨佔服務員取得資源的獨佔擁有權。

如果呼叫端為 Wait 參數指定 TRUE,則呼叫端會封鎖直到另一個線程代表呼叫端釋放資源為止,使用 ExReleaseResourceForThread。 驅動程式寫入器必須小心,以確保另一個線程實際釋放資源;否則呼叫端會死結。 ExAcquireResourceSharedLite 沒有這個屬性,因此驅動程式應該使用該例程,除非它們需要 ExAcquireSharedWaitForExclusive的特定行為。

呼叫此例程之前,必須先停用一般核心 APC 傳遞。 呼叫 KeEnterCriticalRegion來停用一般核心 APC 傳遞。 傳遞必須保持停用,直到資源發行為止,此時可以藉由呼叫 KeLeaveCriticalRegion重新啟用。 如需詳細資訊,請參閱 停用 APC。

要求

要求 價值
最低支援的用戶端 從 Windows 2000 開始提供。
目標平臺 普遍
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIS(storport)IrqlExApcLte3(wdm)SpNoWait(storport)WithinCriticalRegion(storport),WithinCriticalRegion(storport),WithinCriticalRegion(wdm)

另請參閱

ExAcquireResourceSharedLite

ExAcquireSharedStarveExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite

ExReleaseResourceForThread