共用方式為


檔系統篩選驗證

使用方式驗證

篩選驗證器會驗證迷你篩選驅動程式中的下列使用方式:

  • 正確使用參數和呼叫內容
  • 更正預先操作和後續操作回呼例程的傳回值
  • 回呼數據中參數的一致和一致變更

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 ?

若要繼續,請輸入四個一個字母命令的其中一個:

  • Bb for Break:這會中斷至調試程式,您可以在其中執行進一步的調查。
  • Ii 表示 忽略:繼續執行。 如果再次發生此違規,篩選驗證程式會將違規訊息列印至調試程式、停止執行,並顯示提示。
  • Zz 適用於 Zap:繼續執行。 如果再次發生此違規,Filter Verifier 會將違規訊息列印至調試程式,但不會停止執行。
  • Rr ,適用於 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);
}

有幾種方式可以驗證是否已發生:

  1. 將可疑例程包裝在 中 #pragma optimize("", off) ... #pragma optimize("", on),以停用優化。
  2. 重新排序您的程式代碼,讓篩選管理員 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