Condividi tramite


Verifica filtro file system

Convalida dell'utilizzo

Filter Verifier convalida l'utilizzo seguente in un driver minifilter:

  • Uso corretto dei parametri e del contesto di chiamata
  • Correggere i valori restituiti dalle routine di callback di preoperazione e postoperazione
  • Modifiche coerenti e coerenti ai parametri nei dati di callback

Rilevamento oggetti di Gestione filtri

Filter Verifier tiene traccia degli oggetti di gestione filtri seguenti:

  • Contesti di filtro (contesti di flusso, contesti di file e così via)
  • Strutture dei dati di callback
  • Elementi di lavoro in coda
  • Strutture NameInformation
  • Oggetti file
  • Filtrare gli oggetti
  • Oggetti istanza
  • Oggetti Volume

Per le strutture con conteggio dei riferimenti, ad esempio contesti di filtro e strutture di informazioni sui nomi, Filter Verifier si interromperà nel debugger al momento dello scaricamento del driver di filtro se eventuali conteggi dei riferimenti sembrano essere stati persi. Verranno stampate le istruzioni su come usare l'estensione del debugger !fltkd per trovare le strutture perse.

Violazioni del filtro verifier

Quando Filter Verifier rileva una violazione, viene stampato un messaggio nel debugger che descrive la violazione. Per la maggior parte delle violazioni interrompe anche l'esecuzione e chiede all'utente di eseguire alcune azioni. Ad esempio:

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

Per procedere, digitare uno dei quattro comandi di una lettera:

  • B o b per Interruzione: si interrompe nel debugger in cui è possibile eseguire ulteriori indagini.
  • I oppure i per Ignora: riprende l'esecuzione. Se questa violazione viene rilevata di nuovo, Filter Verifier visualizzerà il messaggio di violazione nel debugger, interromperà l'esecuzione e visualizzerà il prompt.
  • Z o z per Zap: riprende l'esecuzione. Se questa violazione viene rilevata di nuovo, Filter Verifier visualizzerà il messaggio di violazione nel debugger, ma NON interromperà l'esecuzione.
  • R o r per Remove: riprende l'esecuzione. Se questa violazione viene rilevata di nuovo, Filter Verifier non visualizzerà il messaggio di violazione e NON interromperà l'esecuzione.

Nota

Quando si usa Filter Verifier in un driver compilato con le ottimizzazioni del compilatore abilitate, è possibile che occasionalmente si verifichi un errore filter Verifier in modo coerente sostenendo che i riferimenti al filtro sono stati persi a una o più risorse anche quando non è possibile trovare una causa di perdita nel codice. Il messaggio inizierà con testo simile al seguente:

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

È anche possibile che venga visualizzato un messaggio che indica che il rilevamento degli oggetti non è sincronizzato, ad esempio:

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

La causa più comune di questa condizione è che Filter Verifier non è riuscito a identificare il chiamante vero di un'API di Gestione filtri a causa di un'ottimizzazione della chiamata finale. Ciò può verificarsi quando una routine nel driver chiama un'API di Gestione filtri come ultima riga. Ad esempio:

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

Esistono due modi per verificare che ciò sia accaduto:

  1. Disabilitare l'ottimizzazione della routine sospetta eseguendo il wrapping in #pragma optimize("", off) ... #pragma optimize("", on).
  2. Riordinare il codice in modo che la chiamata api di Gestione filtri non sia l'ultima cosa che accade nella routine.

Se l'errore non viene più riprodotto dopo aver provato una di queste opzioni, è probabile che si tratti di un falso positivo.

Attivazione di questa opzione

È possibile attivare la funzionalità Verifica filtro file system per uno o più driver usando la verifier.exe riga di comando. Per informazioni dettagliate, vedere Selezione delle opzioni di verifica driver.

Nota

Prima di Windows build 25126 non è supportato per abilitare la verifica del filtro del file system in uno o minifiltri contemporaneamente che ntoskrnl è selezionato per la verifica. In questo modo è possibile che si verifichino errori di verifica spuri.

Per evitare questo problema, non includere ntoskrnl nell'elenco dei componenti per verificare o eseguire l'aggiornamento a una versione di Windows dopo la build 25126.

Il modo consigliato per avviare Filter Verifier è con l'opzione /standard di verifier.exe, poiché fornisce funzionalità utili aggiuntive, ad esempio pool speciali e rilevamento pool:

verifier.exe /standard /driver MyFilter.sys

La verifica viene avviata quando il driver minifiltro viene registrato con gestione filtri.

  • Abilitazione solo filtro verifica in Windows 11 e versioni successive di Windows Per abilitare il set minimo di controlli filtro verifier, abilitare le opzioni Verifica I/O e Verifica filtro file system in Driver Verifier (verifier.exe). Ad esempio:

    verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
    
  • Abilitazione solo filtro verifier in Windows 10 e versioni precedenti di Windows Per abilitare il set minimo di controlli filtro verifier, specificare il nome del driver minifiltro e abilitare l'opzione Verifica I/O in Driver Verifier (verifier.exe). Ad esempio:

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