Analyse du pilote

L’analyse du pilote à l’aide de l’option de commande /scan est facultative. Si vous n’analysez pas avant de vérifier votre pilote, SDV analyse les déclarations de type de rôle de fonction et crée un fichier Sdv-map.h lorsque vous vérifiez le pilote.

Au cours de cette analyse, SDV tente de détecter les points d’entrée du pilote dont il a besoin pour vérifier le pilote. Il enregistre les résultats de l’analyse dans Sdv-map.h, un fichier qu’il crée dans le répertoire des sources du pilote.

Toutefois, il est très important que vous examiniez ce fichier, soit après l’étape d’analyse, soit après la vérification, pour vous assurer que SDV a détecté les points d’entrée corrects. Si les points d’entrée sont manquants ou incorrects, la vérification peut ne pas être fiable. Plus important encore, si SDV ne peut pas détecter de points d’entrée, il ne peut pas vérifier le pilote.

Vous n’avez besoin d’analyser qu’une seule fois pour chaque pilote. Par la suite, SDV conserve le fichier Sdv-map.h pour le pilote pour les vérifications ultérieures.

Examiner le fichier Sdv-map.h

Après avoir exécuté une commande d’analyse ou vérifié le pilote, ouvrez le fichier Sdv-map.h et examinez le fichier. Sdv-map.h est un fichier texte mis en forme. Vous pouvez le lire n’importe quel éditeur de texte, tel que le Bloc-notes.

Comparez le contenu du fichier Sdv-map.h avec les types de rôles de fonction déclarés pour votre pilote. Examinez le contenu du fichier Sdv-map.h pour vérifier que les routines de rappel ou de distribution du pilote ont été correctement identifiées.

Le fichier Sdv-map.h n’est pas obligatoire pour répertorier tous les points d’entrée dans votre pilote ; uniquement les points d’entrée pour les codes de fonction principale IRP ou les types de rôles de fonction utilisés dans l’analyse. N’ajoutez pas de codes de fonction principale ou de types de rôle de fonction IRP au fichier.

Pour plus d’informations sur le fichier Sdv-map.h, consultez Sdv-map.h. Le format est décrit dans Format du fichier Sdv-map.h. Les erreurs qui peuvent apparaître dans le fichier Sdv-map.h sont décrites dans Approbation du fichier Sdv-map.h.

L’exemple suivant montre le contenu du fichier Sdv-map.h de Fail_driver1, un exemple de pilote WDM dans le répertoire 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

Corriger le fichier Sdv-map.h

Avant de vérifier un pilote, corrigez toutes les erreurs dans le fichier Sdv-map.h. SDV vérifie un pilote, même si le fichier Sdv-map.h est incorrect ou non approuvé, mais que les résultats de la vérification peuvent ne pas être fiables. Par exemple, si vous ne déclarez pas la distribution ou la routine de rappel d’un pilote à l’aide du type de rôle de fonction correspondant, la routine de pilote n’apparaîtra pas dans le fichier Sdv-map.h. Par conséquent, vous pourriez manquer de trouver des défauts dans votre code, car SDV considère les règles qui utilisent des types de rôle de fonction comme non applicables, même si vous avez spécifié ces règles dans le cadre de la vérification.

Pour corriger un fichier Sdv-map.h, assurez-vous que les routines de distribution ou de rappel de votre pilote sont déclarées à l’aide des types de rôles de fonction appropriés. Ensuite, réanalysez le pilote et vérifiez qu’ils apparaissent dans le fichier Sdv-map.h..

Approuver le fichier Sdv-map.h

Après avoir déterminé que le fichier Sdv-map.h est correct, vous pouvez approuver le fichier. Si vous n’avez apporté aucune modification au fichier, vous n’avez pas besoin de l’approuver.

SDV vérifie un pilote même si le fichier Sdv-map.h n’est pas approuvé.

Pour approuver le fichier Sdv-map.h, sur la première ligne du fichier, modifiez :

//Approved=false

à :

//Approved=true

Vous ne devez approuver le fichier Sdv-map.h qu’une seule fois pour chaque pilote. Par la suite, SDV conserve le fichier Sdv-map.h approuvé pour le pilote pour les vérifications futures. Si vous souhaitez que SDV analyse à nouveau votre code source pour les déclarations de type de rôle de fonction, supprimez simplement le fichier.

L’exemple suivant montre le fichier Sdv-map.h approuvé pour l’exemple de pilote KMDF, Fail_Driver1. SDV utilise le fichier Sdv-map.h pour mapper les fonctions de rappel déclarées du pilote avec les types de rôles de fonction dont SDV a besoin pour la vérification.

//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