Condividi tramite


Verifica del filtro del 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 consistenti ai parametri nei dati di callback

Rilevamento degli oggetti del Gestore 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 delle Informazioni sul Nome
  • Oggetti file
  • Filtrare gli oggetti
  • Oggetti istanza
  • Oggetti di 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. Per 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, dove è 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 utilizza Filter Verifier su un driver compilato con le ottimizzazioni del compilatore abilitate, è possibile che occasionalmente si presenti un errore di Filter Verifier che segnala costantemente che il filtro ha fatto trapelare riferimenti a una o più risorse, anche quando non si riesce a trovare una causa del leak 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. Per 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 incapsulandola 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 del Verificatore Driver.

Nota

Prima di Windows build 25126, non è supportata l'abilitazione della verifica del filtro del file system su uno o più minifiltri quando ntoskrnl è stato 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 ulteriori funzionalità utili, ad esempio pool speciale e tracciamento pool:

verifier.exe /standard /driver MyFilter.sys

La verifica viene avviata quando il driver minifiltro si registra con il gestore dei filtri.

  • Attivare solo il verificatore dei filtri in Windows 11 e versioni successive di Windows Per attivare il set minimo di controlli del Verificatore dei Filtri, abilitare le opzioni Verifica I/O e Verifica dei filtri del file system in Driver Verifier (verifier.exe). Per esempio:

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

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