Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los controladores WIA se ejecutan dentro del proceso de servicio WIA. Por lo tanto, para efectuar 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 Servicios de depuración en la documentación del SDK de Microsoft Windows para más información).
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 a medida que depura 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 tu máquina pueda "ver" todo en tu 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), por 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 equipo , pero se muestra en la carpeta Administrador de dispositivos.
Iniciar el servicio WIA bajo 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 bajo NTSD. Tenga en cuenta que si el servicio ya se está ejecutando, 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.
Acoplar 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, es esencial encontrar la instancia correcta de svchost.exe .
Si descargó el paquete del depurador desde el sitio de Microsoft, incluye un programa de utilidad denominadotlist.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 qué 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 desvchost.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
en el siguiente valor de cadena de caracteres:
%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 lo tanto, si está desarrollando el controlador con Microsoft Visual Studio, puede ir al elemento de menú Iniciar depuración en el menú Compilar, hacer clic en Adjuntar al proceso... y seleccionar stisvc.exe en la lista.