Analisi del driver

L'analisi del driver tramite l'opzione del comando /scan è facoltativa. Se non si esegue l'analisi prima di verificare il driver, SDV analizza le dichiarazioni del tipo di ruolo della funzione e crea un file Sdv-map.h quando si verifica il driver.

Durante questa analisi, SDV tenta di rilevare i punti di ingresso del driver che è necessario verificare il driver. Registra i risultati dell'analisi in Sdv-map.h, un file creato nella directory sources del driver.

Tuttavia, è molto importante esaminare questo file, dopo il passaggio di analisi o dopo la verifica, per assicurarsi che SDV abbia rilevato i punti di ingresso corretti. Se i punti di ingresso sono mancanti o erre, la verifica potrebbe non essere affidabile. Ancora più importante, se SDV non è in grado di rilevare alcun punto di ingresso, non può verificare il driver.

È necessario eseguire l'analisi una sola volta per ogni driver. Successivamente, SDV mantiene il file Sdv-map.h per il driver per le verifiche future.

Esaminare il file Sdv-map.h

Dopo aver eseguito un comando di analisi o verificato il driver, aprire il file Sdv-map.h ed esaminare il file. Sdv-map.h è un file di testo formattato. È possibile leggerlo in qualsiasi editor di testo, ad esempio Blocco note.

Confrontare il contenuto del file Sdv-map.h con i tipi di ruolo di funzione dichiarati per il driver. Esaminare il contenuto del file Sdv-map.h per verificare che le routine di callback o di invio del driver siano state identificate correttamente.

Il file Sdv-map.h non è necessario per elencare tutti i punti di ingresso nel driver. solo i punti di ingresso per i codici funzione principali IRP o i tipi di ruolo della funzione usati nell'analisi. Non aggiungere codici di funzione principali O tipi di ruolo di funzione IRP al file.

Per informazioni dettagliate sul file Sdv-map.h, vedere Sdv-map.h. Il formato è descritto in Formato del file Sdv-map.h. Gli errori che possono essere visualizzati nel file Sdv-map.h sono descritti in Approvazione del file Sdv-map.h.

L'esempio seguente mostra il contenuto del file Sdv-map.h da Fail_driver1, un driver WDM di esempio nella directory tools\sdv\samples\fail_drivers\wdm.

//Approved=false
//DriverAddDevice
#define fun_AddDevice DriverAddDevice
//DriverEntry
#define fun_DriverEntry DriverEntry
//DriverUnload
#define fun_DriverUnload DriverUnload
//CompletionRoutine
#define fun_IO_COMPLETION_ROUTINE_1 CompletionRoutine
//DpcForIsrRoutine
#define fun_IO_DPC_ROUTINE_1 DpcForIsrRoutine
//DispatchCreate
#define fun_IRP_MJ_CREATE DispatchCreate
//DispatchPnp
#define fun_IRP_MJ_PNP DispatchPnp
//DispatchPower
#define fun_IRP_MJ_POWER DispatchPower
//DispatchRead
#define fun_IRP_MJ_READ DispatchRead
//DispatchSystemControl
#define fun_IRP_MJ_SYSTEM_CONTROL DispatchSystemControl
//InterruptServiceRoutine
#define fun_KSERVICE_ROUTINE_1 InterruptServiceRoutine

Correggere il file Sdv-map.h

Prima di verificare un driver, correggere eventuali errori nel file Sdv-map.h. SDV verificherà un driver, anche se il file Sdv-map.h non è corretto o non è approvato, ma i risultati della verifica potrebbero non essere affidabili. Ad esempio, se non si dichiara la routine di invio o callback di un driver usando il tipo di ruolo della funzione corrispondente, la routine del driver non verrà visualizzata nel file Sdv-map.h. Di conseguenza, è possibile perdere la ricerca di difetti nel codice perché SDV considera le regole che usano i tipi di ruolo di funzione come non applicabili, anche se tali regole sono specificate come parte della verifica.

Per correggere un file Sdv-map.h, assicurarsi che le routine di invio o callback del driver siano dichiarate usando i tipi di ruolo di funzione appropriati. Quindi, eseguire di nuovo l'analisi del driver e verificare che vengano visualizzati nel file Sdv-map.h.

Approvare il file Sdv-map.h

Dopo aver determinato che il file Sdv-map.h è corretto, è possibile approvare il file. Se non sono state apportate modifiche al file, non è necessario approvarlo.

SDV verificherà un driver anche se il file Sdv-map.h non è approvato.

Per approvare il file Sdv-map.h, nella prima riga del file modificare:

//Approved=false

in:

//Approved=true

È necessario approvare il file Sdv-map.h una sola volta per ogni driver. Successivamente, SDV conserva il file Sdv-map.h approvato per il driver per le verifiche future. Se si vuole che SDV aneli nuovamente il codice sorgente per le dichiarazioni del tipo di ruolo della funzione, è sufficiente eliminare il file .

L'esempio seguente mostra il file Sdv-map.h approvato per il driver di esempio KMDF, Fail_Driver1. SDV usa il file Sdv-map.h per eseguire il mapping delle funzioni di callback dichiarate del driver con i tipi di ruolo funzione che SDV richiede per la verifica.

//Approved=true
//DriverEntry
#define fun_DriverEntry DriverEntry
//EvtDriverDeviceAdd
#define fun_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
//EvtIoDeviceControl
#define fun_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl
//EvtIoInternalDeviceControl
#define fun_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl
//EvtIoRead
#define fun_WDF_IO_QUEUE_IO_READ EvtIoRead
//EvtRequestCancel
#define fun_WDF_REQUEST_CANCEL_1 EvtRequestCancel