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 oggetti
  • Oggetti istanza
  • Oggetti volume

Per le strutture con conteggio dei riferimenti, ad esempio i contesti di filtro e le strutture delle informazioni sui nomi, Filter Verifier si suddividerà 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, visualizza un messaggio nel debugger che descrive la violazione. Per la maggior parte delle violazioni interrompe anche l'esecuzione e chiede all'utente di eseguire un'azione. 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 o 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à la richiesta.
  • 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 creato con le ottimizzazioni del compilatore abilitate, occasionalmente è possibile che si verifichi un errore di Filtro verifica in modo coerente che il filtro abbia rilevato riferimenti 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. Questo problema 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 riga verifier.exe di comando. Per informazioni dettagliate, vedere Selezione delle opzioni di verifica driver.

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

verifier.exe /standard /driver MyFilter.sys

La verifica viene avviata quando il driver minifilter esegue la registrazione con il gestore filtri.

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

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

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