Sdílet prostřednictvím


Ověření filtru systému souborů

Ověření využití

Nástroj Filtr Verifier validuje následující použití v ovladači minifiltru:

  • Správné použití parametrů a kontextu volání
  • Oprava návratových hodnot z rutin zpětného volání předoperačních a pooperačních operací
  • Konzistentní a koherentní změny parametrů v datech zpětného volání

Sledování objektů Správce filtrů

Filtr Verifier sleduje následující objekty správce filtru:

  • Kontexty filtru (kontexty streamu, kontexty souborů atd.)
  • Datové struktury zpětného volání
  • Pracovní položky zařazené do fronty
  • struktury informací o názvech
  • Objekty souborů
  • Filtrování objektů
  • Instanční objekty
  • Objekty svazků

U odkazovaných struktur, jako jsou kontexty filtrů a struktury informací o názvech, nástroj Filter Verifier zastaví v ladicím režimu při uvolnění ovladače filtru, pokud se zdá, že některé počty odkazů byly uniklé. Vytiskne pokyny, jak můžete použít rozšíření ladicího programu !fltkd k nalezení uniklých struktur.

Porušení ověřovatele filtru

Když nástroj Filter Verifier zjistí porušení, vytiskne zprávu v ladicím programu, který popisuje porušení. U většiny porušení se také zastaví spuštění a vyzve uživatele, aby nějakou akci podnikl. Například:

FILTER VERIFIER ERROR: A filter returned an unknown pre-operation callback status.
(Filter = FFFFAC04A21CD8A0 (MyFilter), Status = 0xbaadf00d)
Break, ignore, zap or remove ?

Pokud chcete pokračovat, zadejte jeden ze čtyř příkazů s jedním písmenem:

  • B nebo b pro přerušení: Tím se přepne do ladicího programu, kde můžete provést další šetření.
  • I nebo i pro Ignorovat: Obnoví provádění. Pokud k tomuto porušení dojde znovu, filtr Verifier vytiskne zprávu o porušení do ladicího programu, zastaví spuštění a zobrazí výzvu.
  • Z nebo z pro Zap: Obnoví provádění. Pokud k tomuto porušení dojde znovu, filtr Verifier vytiskne zprávu o porušení do ladicího programu, ale nezastaví provádění.
  • R nebo r pro Odstranit: Obnoví provádění. Pokud k tomuto porušení dojde znovu, filtr Verifier netiskne zprávu o porušení a nezastaví provádění.

Poznámka:

Při použití nástroje Filter Verifier na ovladači, který byl vytvořen s povolenými optimalizacemi kompilace, se můžete občas setkat s chybou Filter Verifier, která neustále tvrdí, že filtr uskutěčnil úniky odkazů na jeden nebo více prostředků, i když nemůžete najít příčinu úniku ve vašem kódu. Zpráva bude začínat textem podobným následujícímu:

FILTER VERIFIER ERROR: A filter (Filter = FFFFAC04A21CD8A0 (MyFilter)) leaked references to the following resources:

Může se také zobrazit zpráva, že sledování objektů není synchronizované, například:

FILTER VERIFIER WARNING: Filter manager verifier object tracking may be out of sync for the system

Nejčastější příčinou této situace je, že Filter Verifier nemohl identifikovat skutečného volajícího rozhraní API správce filtru kvůli optimalizaci zadního volání. K tomu může dojít, když rutina v ovladači volá rozhraní API Správce filtrů jako poslední řádek. Například:

void MyWorkItemCallback(PFLT_GENERIC_WORKITEM WorkItem,
                        PVOID Filter,
                        PVOID Context)
{
   // Do some stuff
   ...
   FltFreeGenericWorkItem(WorkItem);
}

Existuje několik způsobů, jak ověřit, že k tomu došlo:

  1. Zakažte optimalizaci podezřelé rutiny tím, že ji zabalíte do #pragma optimize("", off) ... #pragma optimize("", on).
  2. Změna pořadí kódu tak, aby volání rozhraní API Filter Manageru nebylo poslední věcí, která se v rutině děje.

Pokud se chyba po vyzkoušení některé z těchto možností už nereprodukuje, pravděpodobně je falešně pozitivní.

Aktivace této možnosti

Funkci Ověření filtru systému souborů můžete aktivovat pro jeden nebo více ovladačů pomocí příkazového verifier.exe řádku. Podrobnosti najdete v tématu Výběr možností ověření ovladače.

Poznámka:

Před sestavením Windows 25126 není podporováno povolit ověření filtru systému souborů na jednom nebo více minifiltrech současně s tím, že je pro ověření vybrán `ntoskrnl`. To může vést k nechutným chybám verifieru.

Chcete-li se tomuto problému vyhnout, nezahrňte ntoskrnl do seznamu komponent k ověření nebo upgradu na verzi Systému Windows po sestavení 25126.

Doporučený způsob spuštění nástroje Filter Verifier je s volbou /standard , protože poskytuje další užitečné funkce, jako je speciální paměťový fond a sledování paměťového fondu :

verifier.exe /standard /driver MyFilter.sys

Ověření se spustí, když se ovladač minifiltru zaregistruje ve správci filtru.

  • Povolení pouze ověřovatele filtru ve Windows 11 a novějších verzích Windows Pokud chcete povolit minimální sadu kontrol ověřovatele filtru, povolte možnosti ověřování vstupně-výstupních operací a ověření filtru systému souborů v nástroji Driver Verifier (verifier.exe). Například:

    verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
    
  • Povolení pouze ověřovatele filtru ve Windows 10 a předchozích verzích Windows Chcete-li povolit minimální sadu kontrol ověřovatele filtru, zadejte název ovladače minifiltru a povolte možnost Ověření vstupně-výstupních operací v nástroji Ověření ovladače (verifier.exe). Například:

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