共用方式為


FltAcquirePushLockShared 函式 (fltkernel.h)

FltAcquirePushLockShared 例程會取得指定的推播鎖定,以供呼叫線程共用存取。

語法

VOID FLTAPI FltAcquirePushLockShared(
  [in, out] PEX_PUSH_LOCK PushLock
);

參數

[in, out] PushLock

類型 為 PEX_PUSH_LOCK的不透明推播鎖定指標。 這個指標必須由先前呼叫 FltInitializePushLock 初始化。

傳回值

無。

備註

FltAcquirePushLockShared 例程會取得指定的推播鎖定,以供呼叫線程共用存取。

推送鎖定類似於 ERESOURCE 結構, (也稱為資源) ,以便取得它們以進行共用或獨佔存取。 如需推播鎖定的詳細資訊,請參閱 FltInitializePushLock 的參考專案。

不同於ERESOURCE結構,推播鎖定無法以遞歸方式取得。 如果呼叫端已經取得獨佔存取的推播鎖定,系統將會停止回應。 如果呼叫端已經取得共用存取的推送鎖定,它可以再次接收共用存取。 不過,每次呼叫 FltAcquirePushLockShared 都必須與 後續對 FltReleasePushLock 的呼叫進行比對。

當呼叫端獲得指定推播鎖定的共用存取權時,取決於下列各項:

  • 如果推送鎖定目前未擁有,則會立即將共用存取權授與目前線程。

  • 如果已取得推播鎖定供另一個線程共用存取,且沒有線程正在等候推送鎖定的獨佔存取權,則會立即將共用存取權授與給呼叫端。 如果有獨佔等候程式,呼叫端會進入等候狀態。

  • 如果已由另一個線程取得推送鎖定以進行獨佔存取,或有另一個線程正在等候獨佔存取,則目前的線程會進入等候狀態,直到取得推播鎖定為止。

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

若要在取得推送鎖定之後釋放,請呼叫 FltReleasePushLock每次呼叫 FltAcquirePushLockShared 都必須與後續對 FltReleasePushLock 的呼叫進行比對。

若要取得獨佔存取的推送鎖定,請呼叫 FltAcquirePushLockExclusive

若要初始化推送鎖定,請呼叫 FltInitializePushLock

若要刪除推播鎖定,請呼叫 FltDeletePushLock

規格需求

需求
目標平台 Universal
標頭 fltkernel.h (包含 Fltkernel.h)
程式庫 FltMgr.lib
IRQL <= APC_LEVEL

另請參閱

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion