FltAcquireResourceExclusive 函式 (fltkernel.h)
FltAcquireResourceExclusive 例程會取得指定的資源,供呼叫線程獨佔存取。
語法
VOID FLTAPI FltAcquireResourceExclusive(
[in/out] PERESOURCE Resource
);
參數
[in/out] Resource
不透明 ERESOURCE 結構的指標。 這個結構必須由來自非分頁集區的呼叫端配置,並藉由呼叫 ExInitializeResourceLite 或 ExReinitializeResourceLite 進行初始化。
傳回值
無
備註
FltAcquireResourceExclusive 會取得指定的資源,以供呼叫線程獨佔存取。
下列情況會判斷呼叫端是否獲得指定資源的獨佔存取權:
如果資源目前未擁有,則會立即將獨佔存取權授與目前線程。
如果呼叫端已經取得資源以供獨佔存取,則目前的線程會以遞歸方式授與相同的存取類型。
擁有資源分享存取權的呼叫端必須釋放鎖定,然後獨佔重新取得鎖定。
如果資源目前由另一個線程所擁有,或呼叫端只擁有資源的共用存取權,則目前的線程會進入等候狀態,直到取得資源為止。
如果兩個線程分別在相同的資源上保存共享鎖定,而且兩者都嘗試獨佔取得鎖定,而不會釋放其共用鎖定,它們將會死結。 這表示每個線程都會等待另一個線程釋放其鎖定的共用保留,而且兩者都不會釋放其共用保留,直到另一個線程為止。
FltAcquireResourceExclusive 是 ExAcquireResourceExclusiveLite 的包裝函式,可停用一般核心 APC 傳遞。
由於 FltAcquireResourceExclusive 會停用一般核心 APC 傳遞,因此在呼叫 FltAcquireResourceExclusive 之前,不需要呼叫 KeEnterCriticalRegion 或 FsRtlEnterFileSystem。
若要在取得資源之後釋放資源,請呼叫 FltReleaseResource。 每次成功呼叫 FltAcquireResourceExclusive 時,都必須比對 FltReleaseResource 的後續呼叫。
若要取得共用存取的資源,請呼叫 FltAcquireResourceShared。
若要從系統的資源清單中刪除資源,請呼叫 ExDeleteResourceLite。
若要初始化資源以供重複使用,請呼叫 ExReinitializeResourceLite。
如需ERESOURCE結構的詳細資訊,請參閱 ERESOURCE例程簡介。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP SP2 |
最低支援的伺服器 | Windows Server 2003 SP1 |
標頭 | fltkernel.h |
程式庫 | FltMgr.lib |
IRQL | IRQL <= APC_LEVEL |