Uso del verificatore KMDF

Il framework offre funzionalità di verifica predefinite che è possibile usare per testare un driver KMDF in esecuzione. Questa funzionalità, denominata KmDF Verifier, convalida ampiamente lo stato del driver e gli argomenti che il driver passa ai metodi dell'oggetto framework. È possibile usare il verificatore del framework stesso o insieme allo strumento di verifica del driver di utilizzo generico (Verifier.exe).

Se la verifica kmDF è abilitata, il framework controlla l'acquisizione e le gerarchie di blocco, garantisce che le chiamate al framework si verifichino nel sistema IRQL corretto, verifica l'utilizzo corretto dell'I/O e della coda e garantisce che il driver e il framework seguono i contratti documentati. Può anche simulare condizioni di memoria non aggiornate in modo che lo sviluppatore del driver possa testare se il driver risponde correttamente senza arresto anomalo, sospensione o mancata scaricamento.

Quando viene abilitato il verificatore kmDF, il framework si interrompe nel debugger se un periodo di timeout predefinito di 60 secondi scade prima che alcuni degli eventi descritti in precedenza siano stati completati. A questo punto, è possibile eseguire il debug del problema o digitare "g" nel debugger per riavviare il periodo di timeout. È possibile modificare il periodo di timeout predefinito usando il valore del Registro di sistema DbgWaitForSignalTimeoutInSec descritto in Controllo del comportamento del verificatore.

È consigliabile eseguire il verifica driver (Verifier.exe) durante il test e aggiungere driver e wdf01000.sys all'elenco di verifica.

Nota

La verifica kmDF viene abilitata automaticamente quando si usano le impostazioni di /standard Driver Verifier. Se si usa /flags invece dell'impostazione /standard del verificatore driver, tenere presente che in Windows 10, versione 1803 o più recenti, /flags è deprecato a favore di /ruleclasses. La classe rule per WDF è 34. Per abilitare il verificatore WDF quando /standard non viene usato, usare /ruleclasses 34.

È anche possibile usare l'applicazione di controllo del verificatore WDF (WdfVerifier.exe) per abilitare e disabilitare il verificatore KMDF.

Abilitazione e disabilitazione della verifica predefinita di Framework

È possibile abilitare manualmente il verificatore kmdf usando questa procedura:

  1. Se il driver è già caricato, usare Gestione dispositivi per disabilitare il dispositivo. La disabilitazione del dispositivo causa il caricamento del driver.

  2. Usare RegEdit per impostare VerifierOn su un valore diverso da zero nella sottochiave Parameters\Wdf del driver della chiave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services nel Registro di sistema di Windows. Un valore diverso da zero indica che il verificatore kmDF è abilitato.

    Potrebbe essere necessario aggiungere VerifierOn manualmente alla sottochiave se non è già presente.

  3. Usare Gestione dispositivi per ripristinare il dispositivo, caricando così il driver.

  4. Quando il driver chiama WdfDriverCreate, il framework esamina il Registro di sistema e abilita il verificatore del framework se VerifierOn a un valore diverso da zero.

Per disabilitare il verificatore del framework, seguire la stessa procedura, ma impostare il valore di VerifierOn su zero.

Per determinare se il verificatore del framework è abilitato, impostare un punto di interruzione in una posizione dopo che il driver chiama WdfDriverCreate e usare il comando di estensione del debugger !wdfdriverinfo :

!wdfkd.wdfdriverinfo<nome driver> **** 0x1

Per altre informazioni sui comandi dell'estensione del debugger, vedere Estensioni debugger per driver basati su Framework.

Controllo del comportamento del verificatore

È consigliabile usare l'applicazione di controllo del verificatore WDF per controllare le opzioni seguenti. È tuttavia possibile modificare direttamente i valori seguenti nel Registro di sistema.

I valori pertinenti si trovano nella sottochiave Parameters\Wdf della chiave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services .

VerifyOn (REG_DWORD)
Impostare questo valore su un valore diverso da zero per abilitare la macro WDFVERIFY .

DbgBreakOnError (REG_DWORD)
Se questo valore è impostato su un valore diverso da zero, il framework si interromperà nel debugger (se disponibile) ogni volta che un driver chiama WdfVerifierDbgBreakPoint.

DbgWaitForSignalTimeoutInSec (REG_DWORD)
A partire da Windows 8, quando VerifierOn e DbgBreakOnError sono impostati su valori non zero, il driver può modificare il periodo di timeout predefinito impostando DbgWaitForSignalTimeoutInSec.

VerifierAllocateFailCount (REG_DWORD)
Se questo valore è impostato su un valore n, il framework ha esito negativo ogni tentativo di allocare memoria per gli oggetti del driver dopo l'allocazione nth .

TrackHandles (REG_MULTI_SZ)
Se questo valore è impostato su un elenco di uno o più nomi di tipi di handle di oggetti framework, il framework tiene traccia dei riferimenti a tutti gli handle di oggetti corrispondenti ai tipi di handle specificati.

EnhancedVerifierOptions (REG_DWORD)
Solo KMDF

Contiene una bitmap che è possibile usare per abilitare le funzionalità facoltative del verificatore del framework.

VerifyDownLevel (REG_DWORD)
Se impostato su un valore diverso da zero e se il driver è stato compilato con una versione del framework precedente alla versione corrente, il verificatore del framework include test aggiunti dopo la compilazione del driver.

Come regola generale, se si impostano i valori del Registro di sistema precedenti, eliminarli quando non sono più necessari.

Per le descrizioni complete di questi valori del Registro di sistema, vedere Valori del Registro di sistema per i driver basati su Framework di debug.