Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
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.
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.