Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйверы WIA выполняются внутри процесса обслуживания WIA. Поэтому для отладки этих драйверов в пользовательском режиме необходимо подключить отладчик к службе WIA. Это можно сделать несколькими разными способами. В этом разделе представлено два из них. (См. раздел "Службы отладки" в документации по SDK для Microsoft Windows для получения дополнительной информации).
Отладчик можно запустить одним из двух способов:
Автоматическое запуск службы WIA в отладчике.
Присоединение отладчика к соответствующему процессу во время выполнения.
При отладке минидрайвера следует учитывать следующие два пункта:
Если требуется сетевой доступ к символам и другим файлам в отладчике, они могут не отображаться при автоматическом запуске службы WIA в отладчике. WIA выполняется как служба LocalSystem в Windows XP и в качестве локальной службы для Microsoft Windows Server 2003 и более поздних версий операционной системы и не имеет соответствующих привилегий для доступа к сети. Таким образом, несмотря на то что ваш компьютер может "видеть" всё в вашей сети, отладчик, на котором выполняется служба, может не иметь к этому доступа. Дополнительные сведения об измененных уровнях привилегий службы WIA см. в разделе "Проблемы безопасности для драйверов WIA".
Если проблема возникает во время загрузки или инициализации части драйвера STI (например, во время IStiUSD::Initialize), то к моменту подключения отладчика ошибка уже произошла, и это слишком поздно, чтобы получить полезные сведения. Распространенный симптом этой проблемы заключается в том, что устройство не отображается в папке "Мой компьютер", но отображается в папке Диспетчера устройств.
Запуск службы WIA в отладчике
При запуске службы WIA диспетчер управления службами (SCM) просматривает запись в базе данных управления службами и запускает исполняемый файл, на который указывает эта запись. Простой способ запуска службы WIA в отладчике — заменить эту запись одной из них, включающую отладчик. Запись можно найти в реестре в разделе:
HKLM\System\CurrentControlSet\Services\StiSvc\ImagePath
Изначально для ключа ImagePath задано следующее строковое значение:
"%SystemRoot%\System32\svchost.exe -k imgsvc"
Чтобы запустить службу WIA в NTSD, например, измените предыдущее значение следующим образом:
ntsd -g -G %SystemRoot%\System32\svchost.exe -k imgsvc
С этим изменением служба WIA всегда запускается под управлением NTSD. Обратите внимание, что если служба уже запущена, она должна быть остановлена и перезапущена до того, как это изменение вступило в силу. См. раздел "Запуск и остановка службы неподвижных изображений" для подробностей.
Чтобы окно отладчика стало видимо, необходимо также изменить другой ключ реестра. Путь к этому разделу реестра:
HKLM\System\CurrentControlSet\Services\StiSvc\Type
Начальное значение ключа Type , 0X20, предотвращает отображение окна отладчика. Измените значение ключа Type на значение DWORD 0X120.
Подключение отладчика в процессе выполнения
Большинству отладчиков требуется идентификатор процесса, чтобы присоединиться к нему после того, как процесс уже запущен. Так как WIA выполняется в рамках унифицированного хост-процесса с именемsvchost.exe, поиск правильного экземпляра svchost.exe является важным.
Если вы скачали пакет отладчика с сайта Майкрософт, он включает программу служебной программы с именем tlist.exe. Tlist.exe отображает все выполняемые процессы. Если вы выполняете tlist.exe с помощью переключателя s, эта программа также показывает, какие процессы обслуживают какие службы. Например, выполнение tlist.exe -s создает выходные данные, аналогичные следующему:
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
В предыдущем примере выполняются пять экземпляров svchost.exe. Служба WIA StiSvc (служба статических изображений) выполняется в экземпляре svchost.exe, идентификатор которого равен 1076. Подключите отладчик к процессу 1076, чтобы начать отладку.
Вместо использования служебной программы, например, tlist.exe, для определения одного из нескольких экземпляров svchost.exe, можно сделать копию svchost.exe и переименовать её (например, stisvc.exe). Затем измените значение imagePath элемента управления службой, чтобы использовать эту копию svchost.exe (имя которого теперь stisvc.exe). Например, можно задать ключ, путь которого имеет значение
HKLM\System\CurrentControlSet\Control\Services\Stisvc\ImagePath
для следующего строкового значения:
%SystemRoot%\System32\stisvc.exe -k imgsvc"
При запуске службы WIA она выполняется в stisvc.exe вместо svchost.exe. Поиск этого процесса проще, так как существует только один экземпляр stisvc.exe. Вам не нужно искать идентификатор piD, чтобы найти его. Таким образом, например, если вы разрабатываете драйвер с помощью Microsoft Visual Studio, вы можете перейти к элементу меню "Пуск отладки " в меню "Сборка ", нажать кнопку "Присоединить к процессу", а затем выбрать stisvc.exe в списке.