檔案系統篩選驗證

使用方式驗證

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

  • 正確使用參數和呼叫內容
  • 正確從 preoperation 和 postoperation 回呼常式傳回值
  • 回呼資料中參數的一致且一致變更

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:繼續執行。 如果再次遇到此違規,篩選驗證程式會將違規訊息列印到偵錯工具,但不會停止執行。
  • Rr 針對 [移除]:繼續執行。 如果再次發生此違規,篩選驗證程式將不會列印違規訊息,而且不會停止執行。

注意

在已啟用編譯器優化的情況下建置的驅動程式上使用篩選驗證器時,您偶爾可能會遇到篩選驗證器錯誤,指出即使找不到程式碼中外泄的原因,也會一致地宣告篩選遺漏對一或多個資源的參考。 訊息會以類似下列的文字開頭:

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

此狀況最常見的原因是,篩選驗證器因尾呼叫優化而無法識別篩選管理員 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 檔案系統篩選驗證功能。 如需詳細資訊,請參閱 選取驅動程式驗證器選項

啟動篩選驗證器的建議方法是使用 的 /standard 選項 verifier.exe ,因為它提供額外的實用功能,例如 特殊集 區和 集區追蹤

verifier.exe /standard /driver MyFilter.sys

當迷你篩選驅動程式向篩選管理員註冊時,就會啟動驗證。

  • 在Windows 11和更新版本的 Windows 中啟用 [僅篩選驗證程式],若要啟用最少的篩選驗證程式檢查集,請在驅動程式驗證器中啟用I/O 驗證檔案系統篩選驗證選項, (verifier.exe) 。 例如:

    verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
    
  • 在Windows 10和舊版 Windows 中啟用 [僅篩選驗證程式] 啟用最小集合的篩選驗證程式,請指定迷你篩選驅動程式的名稱,並在驅動程式驗證程式 (verifier.exe) 中啟用I/O 驗證選項。 例如:

    verifier.exe /flags 0x10 /driver MyFilter.sys