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 |