Compartir a través de


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:

  1. 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.

  2. 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.