共用方式為


FltAcquireResourceExclusive 函式 (fltkernel.h)

FltAcquireResourceExclusive 例程會取得指定的資源,供呼叫線程獨佔存取。

語法

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

參數

[in/out] Resource

不透明 ERESOURCE 結構的指標。 這個結構必須由來自非分頁集區的呼叫端配置,並藉由呼叫 ExInitializeResourceLiteExReinitializeResourceLite 進行初始化。

傳回值

備註

FltAcquireResourceExclusive 會取得指定的資源,以供呼叫線程獨佔存取。

下列情況會判斷呼叫端是否獲得指定資源的獨佔存取權:

  • 如果資源目前未擁有,則會立即將獨佔存取權授與目前線程。

  • 如果呼叫端已經取得資源以供獨佔存取,則目前的線程會以遞歸方式授與相同的存取類型。

  • 擁有資源分享存取權的呼叫端必須釋放鎖定,然後獨佔重新取得鎖定。

  • 如果資源目前由另一個線程所擁有,或呼叫端只擁有資源的共用存取權,則目前的線程會進入等候狀態,直到取得資源為止。

如果兩個線程分別在相同的資源上保存共享鎖定,而且兩者都嘗試獨佔取得鎖定,而不會釋放其共用鎖定,它們將會死結。 這表示每個線程都會等待另一個線程釋放其鎖定的共用保留,而且兩者都不會釋放其共用保留,直到另一個線程為止。

FltAcquireResourceExclusiveExAcquireResourceExclusiveLite 的包裝函式,可停用一般核心 APC 傳遞。

由於 FltAcquireResourceExclusive 會停用一般核心 APC 傳遞,因此在呼叫 FltAcquireResourceExclusive 之前,不需要呼叫 KeEnterCriticalRegionFsRtlEnterFileSystem

若要在取得資源之後釋放資源,請呼叫 FltReleaseResource。 每次成功呼叫 FltAcquireResourceExclusive 時,都必須比對 FltReleaseResource 的後續呼叫。

若要取得共用存取的資源,請呼叫 FltAcquireResourceShared

若要從系統的資源清單中刪除資源,請呼叫 ExDeleteResourceLite

若要初始化資源以供重複使用,請呼叫 ExReinitializeResourceLite

如需ERESOURCE結構的詳細資訊,請參閱 ERESOURCE例程簡介

規格需求

需求
最低支援的用戶端 Windows XP SP2
最低支援的伺服器 Windows Server 2003 SP1
標頭 fltkernel.h
程式庫 FltMgr.lib
IRQL IRQL <= APC_LEVEL