Débogage de minidriver WIA

Les pilotes WIA s’exécutent à l’intérieur du processus de service WIA. Par conséquent, pour effectuer le débogage en mode utilisateur de ces pilotes, vous devez connecter le débogueur au service WIA. Il existe plusieurs façons de procéder ; cette rubrique présente deux d’entre elles. (Consultez la documentation des services de débogage dans la documentation du Kit de développement logiciel (SDK) Microsoft Windows pour plus d’informations.

Votre débogueur peut être démarré de deux façons :

  • Démarrage automatique du service WIA sous un débogueur.

  • Attachement du débogueur au processus approprié en temps d'exécution.

Gardez à l’esprit les deux points suivants lorsque vous déboguez votre minidriver :

  1. Si vous avez besoin d’un accès réseau aux symboles et à d’autres fichiers à partir du débogueur, ceux-ci peuvent ne pas être visibles si vous démarrez automatiquement le service WIA sous le débogueur. WIA s’exécute en tant que service LocalSystem dans Windows XP et en tant que LocalService pour Microsoft Windows Server 2003 et versions ultérieures du système d’exploitation et n’a pas les privilèges appropriés pour accéder au réseau. Ainsi, même si votre ordinateur peut « voir » tout sur votre réseau, le débogueur exécutant le service peut ne pas être en mesure de le faire. Pour plus d’informations sur le niveau de privilège modifié du service WIA, consultez Problèmes de sécurité pour les pilotes WIA.

  2. Si un problème se produit lors du chargement du pilote ou de l’initialisation de la partie STI du pilote (par exemple, pendant IStiUSD ::Initialize), au moment où un débogueur est attaché, l’erreur s’est déjà produite et il est trop tard pour obtenir des informations utiles. Un symptôme courant de ce problème est que l’appareil ne s’affiche pas dans le dossier Mon ordinateur , mais qu’il s’affiche dans le dossier Gestionnaire de périphériques .

Démarrage du service WIA sous un débogueur

Lorsque le service WIA est démarré, le gestionnaire de contrôle de service (SCM) examine l’entrée dans la base de données de contrôle de service et lance le fichier exécutable vers lequel pointe cette entrée. Un moyen simple de démarrer le service WIA sous un débogueur consiste à remplacer cette entrée par une entrée qui inclut votre débogueur. L’entrée se trouve dans le Registre sous :

HKLM\System\CurrentControlSet\Services\StiSvc\ImagePath

Initialement, la clé ImagePath est définie sur la valeur de chaîne suivante :

«%SystemRoot%\System32\svchost.exe -k imgsvc »

Pour exécuter le service WIA sous NTSD, par exemple, modifiez la valeur précédente comme suit :

« ntsd -g -G %SystemRoot%\System32\svchost.exe -k imgsvc »

Avec cette modification, le service WIA démarre toujours sous NTSD. Notez que si le service est déjà en cours d’exécution, il doit être arrêté et redémarré avant que cette modification ne prenne effet. Pour plus d’informations, consultez Démarrage et arrêt du service Still Image .

Pour rendre la fenêtre du débogueur visible, vous devez également modifier une autre clé de Registre. Le chemin d’accès à cette clé de Registre est le suivant :

HKLM\System\CurrentControlSet\Services\StiSvc\Type

La valeur initiale de la clé Type , 0X20, empêche l’affichage de la fenêtre du débogueur. Remplacez la valeur de la clé Type par la valeur DWORD 0X120.

Attachement du débogueur au moment de l’exécution

La plupart des débogueurs nécessitent le PID du processus en cours pour s'y attacher après que celui-ci a démarré. Étant donné que WIA s’exécute sous un processus d’hébergement générique appelé svchost.exe, la recherche de l’instance correcte de svchost.exe est essentielle.

Si vous avez téléchargé le package du débogueur à partir du site Microsoft, il inclut un programme utilitaire nommé tlist.exe. Tlist.exe affiche tous les processus en cours d’exécution. Si vous exécutez tlist.exe à l’aide du commutateur s, cet utilitaire indique également quels processus hébergent les services. Par exemple, l’exécution detlist.exe -s produit une sortie similaire à ce qui suit :

   0 System Process
   4 System
 160 smss.exe
 216 csrss.exe       Title:
 208 winlogon.exe    Title: NetDDE Agent
 268 services.exe    Svcs:  Eventlog,PlugPlay
 280 lsass.exe       Svcs:  Netlogon,PolicyAgent,ProtectedStorage,SamSs
 416 svchost.exe     Svcs:  RpcSs
 444 svchost.exe     Svcs:  AudioSrv,CryptSvc,Dhcp,EventSystem,FastUserSwitching,CompatibilityServices,helpsvc,Irmon,lanmanserver,lanmanworkstation,Netman,Nla,Schedule,SENS,ShellHWDetection,srservice,TapiSrv,TermService,ThemeService,uploadmgr,W32Time,winmgmt,WmdmPmSp
 504 svchost.exe     Svcs:  Dnscache
 372 svchost.exe     Svcs:  LmHosts,Messenger,RemoteRegistry,SSDPSRV,WebClient
 616 spoolsv.exe     Svcs:  Spooler
 680 inojobsv.exe    Svcs:  Cheyenne InocuLAN Anti-Virus Server
 700 emsvc.exe       Svcs:  EMSVC
 912 fxssvc.exe      Svcs:  Fax
 192 explorer.exe    Title: Program Manager
1076 svchost.exe     Svcs:  stisvc
22824 tlist.exe

Dans l’exemple précédent, cinq instances de svchost.exe sont en cours d’exécution. Le service WIA, StiSvc (service Still Image), s’exécute sous l’instance svchost.exe dont le PID est 1076. Attachez le débogueur au processus 1076 pour démarrer le débogage.

Au lieu d’utiliser un programme utilitaire tel que tlist.exe, pour identifier une seule instance de plusieurs instances svchost.exe , vous pouvez effectuer une copie de svchost.exe et le renommer (par exemple, stisvc.exe). Ensuite, modifiez la valeur ImagePath de l’entrée de contrôle de service pour utiliser cette copie de svchost.exe (celle dont le nom est maintenant stisvc.exe). Par exemple, vous pouvez définir la clé dont le chemin est

HKLM\System\CurrentControlSet\Control\Services\Stisvc\ImagePath

à la valeur de chaîne suivante :

%SystemRoot%\System32\stisvc.exe -k imgsvc »

Lorsque le service WIA démarre, il s’exécute sous stisvc.exe au lieu de svchost.exe. La recherche de ce processus est plus simple, car il n’existe qu’une seule instance de stisvc.exe. Vous n’avez pas à rechercher le PID pour le trouver. Par exemple, si vous développez le pilote à l’aide de Microsoft Visual Studio, vous pouvez accéder à l’élément de menu Démarrer le débogage sous le menu Générer , cliquer sur Attacher au processus..., puis sélectionner stisvc.exe dans la liste.