共用方式為


檔系統篩選驗證

使用方式驗證

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

  • 正確使用參數和呼叫內容
  • 更正預操作和後操作回呼常式的傳回值
  • 回呼數據中參數的一致性和連貫性變更

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

備註

當您在已啟用編譯器優化的驅動程式上使用 Filter Verifier 時,您可能會偶爾遇到一個 Filter Verifier 錯誤,該錯誤一再指出您的 Filter遺漏了一個或多個資源的參考,即便您無法在程式碼中找到洩漏的原因。 訊息會以類似下列的文字開頭:

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