Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruiksvalidatie
Filterverificator valideert het volgende gebruik in een minifilterstuurprogramma:
- Juist gebruik van parameters en aanroep context
- Retourwaarden corrigeren uit preoperation- en postoperation callback-routines
- Consistente en coherente aanpassingen aan callback-gegevensparameters
Filterbeheerder Objecttracking
Filterverificator houdt de volgende filterbeheerobjecten bij:
- Filtercontexten (streamcontexten, bestandscontexten, enzovoort)
- Callback-gegevensstructuren
- Werkitems in de wachtrij
- Naamgegevensstructuren
- Bestandsobjecten
- Objecten filteren
- Exemplaarobjecten
- Volumeobjecten
Voor structuren met referentieaantallen, zoals filtercontexten en naaminformatiestructuren, zal Filter Verifier de debugger starten bij het verwijderen van het filterstuurprogramma als er aanwijzingen zijn dat referentieaantallen zijn gelekt. Er worden instructies afgedrukt over hoe u de extensie !fltkd debugger kunt gebruiken om de gelekte structuren te vinden.
Schendingen van filterverificatie
Wanneer filterverificator een schending detecteert, wordt er een bericht afgedrukt in het foutopsporingsprogramma waarin de schending wordt beschreven. Voor de meeste schendingen wordt ook de uitvoering gestopt en wordt de gebruiker gevraagd actie te ondernemen. Voorbeeld:
FILTER VERIFIER ERROR: A filter returned an unknown pre-operation callback status.
(Filter = FFFFAC04A21CD8A0 (MyFilter), Status = 0xbaadf00d)
Break, ignore, zap or remove ?
Als u wilt doorgaan, typt u een van de vier opdrachten met één letter:
-
B
ofb
voor Break: Dit opent de debugger zodat u verder onderzoek kunt uitvoeren. -
I
ofi
voor Negeren: hervat de uitvoering. Als deze schending opnieuw wordt aangetroffen, zal Filter Verifier het schendingsbericht naar de debugger afdrukken, de uitvoering stoppen en de prompt weergeven. -
Z
ofz
voor Zap: hervat de uitvoering. Als deze schending opnieuw wordt aangetroffen, zal "Filter Verifier" het schendingsbericht weergeven in het foutopsporingsprogramma, maar de uitvoering zal doorgaan. -
R
ofr
voor Verwijderen: hervat de uitvoering. Als deze schending opnieuw wordt aangetroffen, zal de Filter Verifier het schendingsbericht NIET afdrukken en de uitvoering NIET stoppen.
Opmerking
Wanneer u filterverificator gebruikt op een stuurprogramma dat is gebouwd met compileroptimalisaties ingeschakeld, kan er af en toe een filterverificatorfout optreden waarbij wordt geclaimd dat uw filter verwijzingen naar een of meer resources heeft gelekt, zelfs wanneer u geen oorzaak van een lek in uw code kunt vinden. Het bericht begint met tekst die er ongeveer als volgt uitziet:
FILTER VERIFIER ERROR: A filter (Filter = FFFFAC04A21CD8A0 (MyFilter)) leaked references to the following resources:
U ziet mogelijk ook een bericht dat aangeeft dat het bijhouden van objecten niet is gesynchroniseerd, zoals:
FILTER VERIFIER WARNING: Filter manager verifier object tracking may be out of sync for the system
De meest voorkomende oorzaak van deze voorwaarde is dat Filter Verifier de werkelijke aanroeper van een Filter Manager-API niet kan identificeren vanwege een optimalisatie van tail-aanroepen. Dit kan gebeuren wanneer een routine in uw stuurprogramma een Filter Manager-API aanroept als laatste regel. Voorbeeld:
void MyWorkItemCallback(PFLT_GENERIC_WORKITEM WorkItem,
PVOID Filter,
PVOID Context)
{
// Do some stuff
...
FltFreeGenericWorkItem(WorkItem);
}
Er zijn een aantal manieren om te controleren of dit is gebeurd:
- Schakel optimalisatie van de verdachte routine uit door deze in
#pragma optimize("", off) ... #pragma optimize("", on)
te verpakken. - Rangschik uw code zodanig dat de Filter Manager API-aanroep niet het laatste gebeurt in uw routine.
Als de fout niet meer optreedt nadat u een van deze opties hebt geprobeerd, is dit waarschijnlijk een vals positief.
Deze optie activeren
U kunt de functie Bestandssysteemfilterverificatie voor een of meer stuurprogramma's activeren met behulp van de verifier.exe
opdrachtregel. Zie Opties voor stuurprogrammaverificator selecteren voor meer informatie.
Opmerking
Vóór Windows build 25126 wordt het niet ondersteund om de verificatie van bestandssysteemfilters of minifilters in te schakelen op hetzelfde moment dat ntoskrnl is geselecteerd voor verificatie. Dit kan leiden tot valse verifier-fouten.
Om dit probleem te vermijden, kunt u ervoor kiezen om ntoskrnl niet op te nemen in de lijst met te verifiëren componenten, of upgraden naar een versie van Windows na build 25126.
De aanbevolen manier om filterverificator te starten is met de /standaardoptie , verifier.exe
omdat het extra nuttige functies biedt, zoals speciale pool - en pooltracering:
verifier.exe /standard /driver MyFilter.sys
Verificatie wordt gestart wanneer het minifilterstuurprogramma wordt geregistreerd bij de filterbeheerder.
Alleen filterverificator inschakelen in Windows 11 en latere versies van Windows Als u de minimale set filtercontrolecontroles wilt inschakelen, schakelt u de opties voor I/O-verificatie en bestandssysteemfilterverificatie in stuurprogrammacontrole (verifier.exe). Voorbeeld:
verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
Alleen filterverificator inschakelen in Windows 10 en eerdere versies van Windows Als u de minimale set filtercontrolecontroles wilt inschakelen, geeft u de naam van het minifilterstuurprogramma op en schakelt u de optie I/O-verificatie in Driver Verifier (verifier.exe). Voorbeeld:
verifier.exe /flags 0x10 /driver MyFilter.sys