Partager via


Débogage de minidriver WIA

Les pilotes WIA s’exécutent à l’intérieur du processus de service WIA. Par conséquent, pour effectuer un 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 eux. (Pour plus d’informations, consultez Débogage des services dans la documentation Microsoft Windows SDK).

Votre débogueur peut être démarré de l’une des deux manières suivantes :

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

  • Attachement du débogueur au processus approprié au moment de l’exécution.

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

  1. Si vous avez besoin d’un accès réseau aux symboles et 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 ne dispose pas des 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 pendant le chargement ou l’initialisation du pilote 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 n’apparaît pas dans le dossier Poste de travail, mais 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 pointé par 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 d’images fixes .

Pour que la fenêtre du débogueur soit 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 d’exécution pour s’y attacher une fois que le processus a déjà démarré. Étant donné que WIA s’exécute sous un processus d’hébergement générique appelé svchost.exe, il est essentiel de rechercher la instance correcte de svchost.exe.

Si vous avez téléchargé le package de 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 quels 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 Image fixe), s’exécute sous le svchost.exe instance 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 desvchost.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 besoin de 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.