共用方式為


FltInitializePushLock 函式 (fltkernel.h)

FltInitializePushLock 例程會初始化推送鎖定變數。

語法

VOID FLTAPI FltInitializePushLock(
  [out] PEX_PUSH_LOCK PushLock
);

參數

[out] PushLock

呼叫端提供的記憶體指標,其至少必須是 sizeof(EX_PUSH_LOCK的值,才能初始化推送鎖定變數。 記憶體必須在32位平臺上對齊4位元組,且64位平臺上對齊8位元組。

傳回值

沒有

言論

推送鎖定是同步處理基本類型,用來管理多個線程對共用資源的存取。 推送鎖定類似於 ERESOURCE 結構,(也稱為「資源」)的方式如下:

  • 推送鎖定可供一組線程進行同步處理。

  • 您可以取得推送鎖定以進行共享或獨佔存取。

  • 雖然呼叫端提供推送鎖定變數的記憶體,但EX_PUSH_LOCK結構不透明:也就是說,其成員會保留供系統使用。

推送鎖定可能不是文件系統迷你篩選的正確選擇,因為它們的某些特性可能與文件系統原本重新進入的本質不相容。

相較於ERESOURCE結構,推送鎖定具有下列 缺點:

  • 授與獨佔存取權的演算法並不適用於所有線程。 如果有高階的獨佔鎖定競爭,則不保證線程將獲授與獨佔存取的順序。

  • 不支援在運行時間判斷推送鎖定的目前擁有者。 ERESOURCE 結構的使用者可以呼叫例程,例如 ExIsResourceAcquiredExclusiveLite,以判斷目前線程是否具有資源的獨佔存取權。

  • 在偵錯階段判斷推送鎖定的目前擁有者,以診斷死結,不支援擴充功能。 ERESOURCE 結構的使用者可以使用 kd 或 windbg 中的 !locks 延伸模組來判斷目前的擁有者。

  • 沒有驅動程序驗證器支援,可透過推入鎖定協助早期診斷死結。

  • 無法以遞歸方式取得獨佔推送鎖定。

推送鎖定提供下列 優點, ERESOURCE 結構:

  • 當推送鎖定主要是為了共用存取而取得時,它們比 ERESOURCE 結構更有效率。

  • 推送鎖定的記憶體可以從分頁或非分頁集區進行配置。 ERESOURCE 結構只能從非分頁集區配置。

  • EX_PUSH_LOCK結構遠小於ERESOURCE結構。

除非上述任何優點都令人信服,否則 ERESOURCE 通常是讀取/寫入同步處理問題更強固且更容易維護的解決方案。

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

若要取得共用存取的推送鎖定,請呼叫 FltAcquirePushLockExclusive

若要釋放推送鎖定,請呼叫 FltReleasePushLock

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

要求

要求 價值
最低支援的用戶端 Windows XP SP2 Microsoft
支援的最低伺服器 Windows Server 2003 SP1
目標平臺 普遍
標頭 fltkernel.h (包括 Fltkernel.h)
連結庫 FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

另請參閱

ExIsResourceAcquiredExclusiveLite

FltAcquirePushLockExclusive

FltAcquirePushLockShared

FltDeletePushLock

FltReleasePushLock