Depuración de Minidriver WIA
Los controladores WIA se ejecutan dentro del proceso de servicio WIA. Por lo tanto, para realizar la depuración en modo de usuario de estos controladores, debe conectar el depurador al servicio WIA. Hay varias maneras diferentes de hacerlo; en este tema se presentan dos de ellos. (Consulte Debugging Services en la documentación de Microsoft Windows SDK para obtener información adicional).
El depurador se puede iniciar de una de estas dos maneras:
Iniciar automáticamente el servicio WIA en un depurador.
Adjuntar el depurador al proceso adecuado en tiempo de ejecución.
Tenga en cuenta los dos puntos siguientes al depurar el minidriver:
Si necesita acceso de red a símbolos y otros archivos desde el depurador, es posible que estos no sean visibles si inicia automáticamente el servicio WIA en el depurador. WIA se ejecuta como un servicio LocalSystem en Windows XP y como localService para Microsoft Windows Server 2003 y versiones posteriores del sistema operativo y no tiene los privilegios adecuados para acceder a la red. Por lo tanto, aunque la máquina pueda "ver" todo en la red, es posible que el depurador que ejecuta el servicio no pueda hacerlo. Para obtener más información sobre el nivel de privilegios cambiados del servicio WIA, consulte Problemas de seguridad para controladores WIA.
Si se produce un problema durante la carga del controlador o la inicialización de la parte de STI del controlador (por ejemplo, durante IStiUSD::Initialize), el momento en que se adjunta un depurador, el error ya se ha producido y es demasiado tarde para obtener información útil. Un síntoma común de este problema es que el dispositivo no aparece en la carpeta Mi computadora, pero aparece en la carpeta Administrador de dispositivos.
Iniciar el servicio WIA en un depurador
Cuando se inicia el servicio WIA, el administrador de control de servicios (SCM) examina la entrada de la base de datos de control de servicio e inicia el archivo ejecutable al que apunta esa entrada. Una manera sencilla de iniciar el servicio WIA en un depurador es reemplazar esa entrada por una que incluya el depurador. La entrada se puede encontrar en el Registro en:
HKLM\System\CurrentControlSet\Services\StiSvc\ImagePath
Inicialmente, la clave ImagePath se establece en el siguiente valor de cadena:
"%SystemRoot%\System32\svchost.exe -k imgsvc"
Para ejecutar el servicio WIA en NTSD, por ejemplo, modifique el valor anterior de la siguiente manera:
"ntsd -g -G %SystemRoot%\System32\svchost.exe -k imgsvc"
Con este cambio, el servicio WIA siempre se inicia en NTSD. Tenga en cuenta que si el servicio ya está en ejecución, debe detenerse y reiniciarse antes de que este cambio surta efecto. Consulte Inicio y detención del servicio Still Image para obtener más información.
Para que la ventana del depurador esté visible, también debe cambiar otra clave del Registro. La ruta de acceso a esta clave del Registro es:
HKLM\System\CurrentControlSet\Services\StiSvc\Type
El valor inicial de la clave Type , 0X20, impide que se muestre la ventana del depurador. Cambie el valor de la clave Type al valor DWORD 0X120.
Adjuntar el depurador en tiempo de ejecución
La mayoría de los depuradores requieren el PID del proceso en ejecución para asociarlo después de que el proceso ya se haya iniciado. Dado que WIA se ejecuta en un proceso de hospedaje genérico denominado svchost.exe, encontrar la instancia correcta de svchost.exe es esencial.
Si descargó el paquete del depurador desde el sitio de Microsoft, incluye un programa de utilidad denominado tlist.exe. Tlist.exe muestra todos los procesos en ejecución. Si ejecuta tlist.exe mediante el modificador s, esta utilidad también muestra qué procesos hospedan los servicios. Por ejemplo, la ejecución detlist.exe -s genera una salida similar a la siguiente:
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
En el ejemplo anterior, se ejecutan cinco instancias de svchost.exe . El servicio WIA, StiSvc (servicio Still Image), se ejecuta en la instancia desvchost.exe cuyo PID es 1076. Adjunte el depurador al proceso 1076 para iniciar la depuración.
En lugar de usar un programa de utilidad como tlist.exe, para identificar una sola instancia de varias instancias de svchost.exe , puede realizar una copia de svchost.exe y cambiarle el nombre (por ejemplo, stisvc.exe). A continuación, cambie el valor imagePath de la entrada de control de servicio para usar esta copia de svchost.exe (el cuyo nombre ahora es stisvc.exe). Por ejemplo, puede establecer la clave cuya ruta de acceso es .
HKLM\System\CurrentControlSet\Control\Services\Stisvc\ImagePath
al siguiente valor de cadena:
%SystemRoot%\System32\stisvc.exe -k imgsvc"
Cuando se inicia el servicio WIA, se ejecuta en stisvc.exe en lugar de svchost.exe. Encontrar este proceso es más sencillo, ya que solo hay una sola instancia de stisvc.exe. No tiene que buscar el PID para encontrarlo. Por ejemplo, si va a desarrollar el controlador con Microsoft Visual Studio, puede ir al elemento de menú Iniciar depuración en el menú Compilar , hacer clic en Asociar al proceso... y seleccionar stisvc.exe en la lista.