檔系統篩選驗證
使用方式驗證
篩選驗證器會驗證迷你篩選驅動程式中的下列使用方式:
- 正確使用參數和呼叫內容
- 更正預先操作和後續操作回呼例程的傳回值
- 回呼數據中參數的一致和一致變更
Filter Manager 對象追蹤
篩選驗證程式會追蹤下列篩選管理員物件:
- 篩選內容 (資料串流內容、檔案內容)
- 回呼數據結構
- 已排入佇列的工作專案
- NameInformation 結構
- 檔案物件
- 篩選物件
- 實例物件
- 磁碟區物件
對於參考計數結構,例如篩選內容和名稱信息結構,如果有任何參考計數似乎已外泄,篩選驗證器會在卸除篩選驅動程式時中斷調試程式。 它會列印如何使用 !fltkd 調試程式延伸模組 來尋找流失結構的指示。
篩選驗證程序違規
當 Filter Verifier 偵測到違規時,它會在描述違規的調試程式中列印訊息。 對於大部分違規,它也會停止執行,並提示用戶採取一些動作。 例如:
FILTER VERIFIER ERROR: A filter returned an unknown pre-operation callback status.
(Filter = FFFFAC04A21CD8A0 (MyFilter), Status = 0xbaadf00d)
Break, ignore, zap or remove ?
若要繼續,請輸入四個一個字母命令的其中一個:
B
或b
for Break:這會中斷至調試程式,您可以在其中執行進一步的調查。I
或i
表示 忽略:繼續執行。 如果再次發生此違規,篩選驗證程式會將違規訊息列印至調試程式、停止執行,並顯示提示。Z
或z
適用於 Zap:繼續執行。 如果再次發生此違規,Filter Verifier 會將違規訊息列印至調試程式,但不會停止執行。R
或r
,適用於 Remove:繼續執行。 如果再次發生此違規,篩選驗證程式將不會列印違規訊息,而且不會停止執行。
注意
當您在已啟用編譯程式優化所建置的驅動程式上使用 Filter Verifier 時,您偶爾可能會遇到篩選驗證器錯誤,指出您的篩選遺漏了一或多個資源的參考,即使您在程式碼中找不到流失的原因也一致。 訊息會以類似下列的文字開頭:
FILTER VERIFIER ERROR: A filter (Filter = FFFFAC04A21CD8A0 (MyFilter)) leaked references to the following resources:
您也可以看到訊息,指出物件追蹤已同步,例如:
FILTER VERIFIER WARNING: Filter manager verifier object tracking may be out of sync for the system
此狀況最常見的原因是 Filter Verifier 因尾端呼叫優化而無法識別篩選管理員 API 的真正呼叫端。 當驅動程式中的例程呼叫篩選管理員 API 做為其最後一行時,可能會發生這種情況。 例如:
void MyWorkItemCallback(PFLT_GENERIC_WORKITEM WorkItem,
PVOID Filter,
PVOID Context)
{
// Do some stuff
...
FltFreeGenericWorkItem(WorkItem);
}
有幾種方式可以驗證是否已發生:
- 將可疑例程包裝在 中
#pragma optimize("", off) ... #pragma optimize("", on)
,以停用優化。 - 重新排序您的程式代碼,讓篩選管理員 API 呼叫不是您例程中最後發生的事情。
如果錯誤在嘗試其中一個選項之後不再重現,可能是誤判。
啟用此選項
您可以使用命令行為一或多個驅動程式 verifier.exe
啟用檔案系統篩選驗證功能。 如需詳細資訊,請參閱 選取驅動程式驗證器選項。
注意
在 Windows 組建 25126 之前,不支援在選取 ntoskrnl 進行驗證的一或小型篩選程式上啟用文件系統篩選驗證。 這樣做可能會導致假驗證器錯誤。
若要避免此問題,請在元件清單中不包含 ntoskrnl ,以在組建 25126 之後驗證或升級至 Windows 版本。
啟動篩選驗證器的建議方法是使用 的 /standard 選項verifier.exe
,因為它提供額外的實用功能,例如特殊集區和集區追蹤:
verifier.exe /standard /driver MyFilter.sys
當迷你篩選驅動程式向篩選管理員註冊時,驗證就會啟動。
在 Windows 11 和更新版本中 啟用 [僅篩選驗證程式] 若要啟用最小一組篩選驗證程式檢查,請在驅動程式驗證器中啟用 I/O 驗證 和 檔案系統篩選驗證 選項(verifier.exe)。 例如:
verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
在 Windows 10 和舊版 Windows 中啟用 [僅篩選驗證程式] 若要啟用最小篩選驗證程式檢查集,請指定迷你篩選驅動程式的名稱,並在驅動程式驗證器中啟用 I/O 驗證選項(verifier.exe)。 例如:
verifier.exe /flags 0x10 /driver MyFilter.sys