Verifica driver: Novità

Il verifica driver è disponibile in tutte le versioni di Windows a partire da Windows 2000. Ogni versione introduce nuove funzionalità e verifica la ricerca di bug nei driver di Windows. Questa sezione riepiloga le modifiche e fornisce collegamenti alla documentazione correlata.

Verifica driver in Windows 11 (aggiornato: 30 settembre 2021)

A partire da Windows 11, molti flag sono ora abilitati senza riavviare usando una sintassi di comando diversa rispetto alla sintassi volatile. Per altre informazioni sulla nuova sintassi, vedere Sintassi dei comandi del verificatore driver .

Verifica driver in Windows 10 (aggiornamento: 8 maggio 2018)

Importante

Per informazioni sull'abilitazione di WDF Verifier in Windows 10, versione 1803 o più recenti, vedere Uso del verificatore kmDF.

  • È comunque possibile abilitare la verifica WDF come parte dei flag di /standard Driver Verifier. Per altre informazioni, vedere Sintassi dei comandi del verificatore driver .
  • Questa modifica influisce sull'abilitazione di DV con sintassi /flags 0x209BB quando la verifica WDF non verrà più abilitata automaticamente.

A partire da Windows 10, il verificatore driver include nuove regole di convalida driver per le tecnologie seguenti:

Verifica driver in Windows 8-1 (aggiornamento: 17 giugno 2013)

A partire da Windows 8.1, Driver Verifier introduce quattro nuove opzioni per rilevare gli errori.

Verifica driver in Windows 8 (aggiornato: 20 ottobre 2012)

A partire da Windows 8, Driver Verifier introduce cinque nuove opzioni per rilevare gli errori.

  • L'opzione Power Framework Delay Fuzzing inserisce ritardi di esecuzione casuali per rilevare i bug di concorrenza nei driver che usano il framework di risparmio energia (PoFx). I ritardi di esecuzione hanno limiti di tempo superiore. Questa opzione non è consigliata per i driver che non usano direttamente il framework di gestione energia (PoFx).
  • L'opzione di controllo della conformità DDI applica le stesse regole di utilizzo dell'interfaccia del driver di dispositivo (DDI) usate dal verificatore driver statico per verificare che il driver effettua chiamate di funzione al irQL richiesto per la funzione. Il controllo di conformità DDI viene eseguito come parte delle opzioni di verifica driver standard.
  • L'opzione Controllo MDL invariante per stack monitora il modo in cui il driver gestisce i buffer MDL invarianti nello stack di driver.
  • L'opzione Controllo MDL invariante per driver monitora il modo in cui il driver gestisce i buffer MDL invarianti in base a un driver.
  • L'opzione Stack Based Failure Injection inserisce errori di allocazione delle risorse nei driver in modalità kernel.

Quando si compila, si distribuisce e si testa il driver usando Visual Studio 2012 e WDK per Windows 8, è anche possibile configurare Il verificatore driver per l'esecuzione in un computer di test quando si distribuisce il driver per i test.

Verifica driver in Windows 7 (aggiornato: 22 ottobre 2012)

Per Windows 7, Il verificatore driver è stato migliorato con nuovi test e funzionalità che consentono a Driver Verifier di esporre più classi di bug tipici del driver.

  • Riferimenti non corretti agli handle utente dai driver del kernel
  • Miglioramenti della verifica di I/O
  • Miglioramenti speciali per pool, rilevamento pool e simulazione di risorse basse
  • Utilizzo errato dei meccanismi di sincronizzazione
  • Riferimenti a oggetti non corretti
  • Costi di quota del pool dalla routine DPC
  • Blocchi di arresto del sistema o ritardi
  • Miglioramento delle richieste di I/O in sospeso

In Windows 7, Driver Verifier fornisce controlli per i blocchi di rotazione in coda, questi controlli sono simili a quelli forniti per lo spin lock nelle versioni precedenti di Windows. Questi controlli includono quanto segue:

  • Verifica che un'operazione che deve aumentare il valore di richiesta di interruzione (IRQL), ad esempio KeAcquireInStackQueuedSpinLock, non riduce effettivamente il valore IRQL.

  • Verificare che un'operazione che deve ridurre il valore IRQL, ad esempio KeReleaseInStackQueuedSpinLock, non genera effettivamente il valore IRQL.

  • Ritaglio del set di lavoro del processo di sistema se l'opzione Force IRQL Check è abilitata, quando viene generato IRQL in DISPATCH_LEVEL o versioni successive, in un tentativo di esporre possibili riferimenti alla memoria impaginabile mentre il driver è in esecuzione con privilegi elevati di IRQL.

  • Stima dei possibili deadlock quando l'opzione Rilevamento deadlock è abilitata.

  • Prova a usare la stessa struttura di dati KSPIN_LOCK sia come blocco di spin che come blocco spin in coda dello stack quando l'opzione Rilevamento deadlock è abilitata.

  • Verifica di valori di puntatore ovviamente non corretti, ad esempio un indirizzo virtuale in modalità utente usato come indirizzo di blocco di rotazione.

  • Registrazione delle transizioni IRQL nel log IRQL driver. Queste informazioni vengono visualizzate quando si usa l'estensione !verifier 8 dei debugger di Windows. Vedere !verifier.

Informazioni aggiuntive sul debug

In Windows 7, Driver Verifier fornisce le informazioni aggiuntive seguenti utili per il debug:

Esiste un log con tracce dello stack in ordine cronologico per le chiamate recenti a KeEnterCriticalRegion e KeLeaveCriticalRegion dai driver verificati. Il contenuto del log viene visualizzato usando l'estensione del debugger !verifier 0x200 dei debugger di Windows. Queste informazioni possono essere utili per comprendere gli scenari in cui un thread è in esecuzione imprevistamente in un'area critica o sta tentando di lasciare un'area critica che ha già lasciato.

È possibile visualizzare informazioni aggiuntive dal log Richieste di I/O in sospeso forza usando l'estensione del debugger !verifier 0x40 . Nelle versioni precedenti di Windows, il log contiene solo una traccia dello stack per ogni IRP che il verificatore driver deve essere in sospeso. Questa è stata la traccia dello stack dal momento in cui È stato chiamato IoCompleteRequest per la prima volta per l'IRP in sospeso forzato. Windows 7 ha almeno due voci di log, possibilmente più di due, per ogni IRP forzato in sospeso:

  • Traccia dello stack al momento in cui Driver Verifier ha selezionato l'IRP in sospeso. Il verificatore driver sceglie alcuni dei provider di integrazione da forzare in sospeso quando uno dei driver verificati chiama IoCallDriver.
  • Tracce dello stack per ogni chiamata IoCompleteRequest per l'IRP in sospeso forzato prima che il completamento raggiunga il driver verificato. Più di una chiamata IoCompleteRequest può esistere per lo stesso IRP perché uno dei driver può arrestare temporaneamente il completamento dalla routine di completamento e quindi riprenderlo chiamando nuovamente IoCompleteRequest .

Nel log di transizione IRQL sono disponibili tracce di stack più valide. Questo log viene visualizzato usando !verifier 8. Nelle versioni di Windows precedenti a Windows 7, Driver Verifier potrebbe aver cercato di registrare alcune di queste tracce dello stack in IRQL con privilegi elevati e non è riuscito a acquisire la traccia dello stack a causa del valore IRQL elevato. In Windows 7, Driver Verifier tenta di acquisire queste tracce dello stack:

  • Prima di generare IRQL, ad esempio quando un driver verificato chiama KeAcquireSpinLock.
  • Dopo che irQL viene abbassato, quando un driver verificato chiama KeReleaseSpinLock.

In questo modo, Driver Verifier può acquisire più di queste tracce dello stack di transizione IRQL.

!analysis può valutare i problemi esposti dai controlli di verifica di I/O avanzati (che fanno parte di I/O Verifier in Windows 7). Nelle versioni precedenti di Windows, la segnalazione degli errori di I/O avanzata consiste nella visualizzazione di una descrizione del difetto del driver rilevato da Driver Verifier seguito da un'interruzione nel debugger. L'esecuzione di !analizza dopo un'interruzione di questo tipo non comporta una valutazione significativa per molte di queste interruzioni perché !analysis non può usare le informazioni dal testo della descrizione dell'errore visualizzato nel debugger. In Windows 7 le informazioni significative su questi difetti del driver vengono salvate da Driver Verifier in memoria. !analizza può trovare queste informazioni ed eseguire un triage automatico molto più significativo per molte di queste interruzioni.

Verifica driver in Windows Vista (aggiornato: 9 febbraio 2009)

Per Windows Vista, Il verificatore driver è stato migliorato con nuovi test e funzionalità.

  • Abilitazione del verifica driver e modifica delle impostazioni senza riavvio
  • Simulazione avanzata di risorse basse
  • Forzare le richieste di I/O in sospeso
  • Controlli di sicurezza
  • Verifica di I/O più approfondita
  • Controllo IRQL avanzato
  • Controlli vari
  • Rilevamento pagina memoria bloccata
  • Controlli automatici aggiuntivi

Driver Verifier in Windows XP (aggiornato: 4 dicembre 2001)

Driver Verifier è uno strumento per il monitoraggio dei driver in modalità kernel e dei driver grafici di Windows. Microsoft incoraggia vivamente i produttori di hardware a testare i driver con Driver Verifier per garantire che i driver non eseseguono chiamate di funzione illegali o causino danneggiamenti del sistema. Driver Verifier è stato migliorato con nuovi test e funzionalità per Microsoft Windows XP.

I driver inviati a WHQL per i test devono superare il driver Verifier. Le nuove funzionalità di Driver Verifier in Windows XP includono:

  • Driver Verifier Manager, un'interfaccia utente grafica (GUI) nuova per verifier.exe
  • Nuovo controllo automatico per il cambio dello stack di monitoraggio
  • Nuove opzioni di verifica driver per la verifica DMA (nota anche come verifica HAL), rilevamento dei deadlock e verifica SCSI
  • Modifiche alla verifica di I/O che combinano test di "livello 1" e "livello 2", test di verifica di I/O avanzati facoltativi
  • Nuove estensioni del debugger !deadlock e !dma
  • Nuovi controlli di bug: 0xE6 (DRIVER_VERIFIER_DMA_VIOLATION) e 0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION)
  • Codici secondari aggiuntivi per i codici di controllo dei bug esistenti 0xC4 e 0xC9

Le funzionalità di Driver Verifier includono anche:

  • Nuove opzioni della riga di comando verifier L'utilità verifier.exe include un nuovo parametro VolatileDriverList, che può essere usato con la parola chiave /adddriver per specificare un elenco di driver da aggiungere alle impostazioni volatili. VolatileDriverList può essere usato con la parola chiave /removedriver per specificare un elenco di driver da rimuovere.

  • Nuove estensioni !verifier Le nuove estensioni !verifier visualizzano informazioni aggiuntive sul log durante il monitoraggio di risorse basse o IRQL genera e spin lock. È disponibile anche la Guida online.

    • Flag impostati con 0x4 fa sì che la visualizzazione includa un log di errori inseriti da Driver Verifier durante la simulazione di risorse ridotte
    • Flag impostati con 0x8 fa sì che la visualizzazione includa un log delle modifiche IRQL più recenti apportate dai driver verificati
    • Se Flags è esattamente 0x4 o 0x8, il parametro Quantity specifica il numero di record o voci di log da includere nella visualizzazione
    • Il parametro ? mostra un breve testo della Guida
  • La Guida online per Driver Verifier Manager Online Help for Driver Verifier Manager può essere visualizzata in uno dei modi seguenti:

    • Selezionare e tenere premuto (o fare clic con il pulsante destro del mouse) su un elemento nella finestra Gestione verifica driver e scegliere Che cos'è? dal menu a comparsa.
    • Selezionare il punto interrogativo (?) nell'angolo superiore destro della finestra e quindi selezionare un elemento nella finestra Gestione verifica driver.