Analisi del driver

L'analisi del driver tramite l'opzione di 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 necessari per verificare il driver. Registra i risultati dell'analisi in Sdv-map.h, un file creato nella directory delle origini 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 mancano o non sono corretti, la verifica potrebbe non essere affidabile. Più importante, se SDV non riesce a rilevare eventuali punti 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 verificare il driver, aprire il file Sdv-map.h ed esaminare il file. Sdv-map.h è un file di testo formattato. È possibile leggerlo 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 dispatch 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 di funzione principali di IRP o i tipi di ruolo di funzione usati nell'analisi. Non aggiungere codici di funzione principali IRP o tipi di ruolo di funzione 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.

Nell'esempio seguente viene illustrato 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 funzione corrispondente, la routine driver non verrà visualizzata nel file Sdv-map.h. Di conseguenza, è possibile individuare i difetti nel codice perché SDV considera le regole che usano i tipi di ruolo della funzione come non applicabili, anche se sono state specificate tali regole 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 esaminare nuovamente il 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 mantiene il file Sdv-map.h approvato per il driver per le verifiche future. Se si vuole che SDV analizzi di nuovo il codice sorgente per le dichiarazioni di tipo di ruolo della funzione, eliminare il file.

Nell'esempio seguente viene illustrato 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 di funzione necessari 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