Все началось, когда я смог установить свой биометрический драйвер, но он показал «Желтый восклицательный знак» и общее сообщение «Это устройство не запускается. (Код 10)»
Проект биометрических образцов неВключите пример, как правильно подписать EngineAdapter.dll с помощью Visual Studio. Я нашел этот ресурс (стр. 33-34) , где показано Как подписать EngineAdapter на свойствах проекта События сборки -> Событие после сборки :
Command Line: signtool sign /v /ac "Path_to_cross_certificate_DigiCert Assured ID Root CA.crt" /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f "path_to_my_certificate_file.pfx" /p mypassword "$(Platform)\$(ConfigurationName)\EngineAdapter.dll"
Use In Build: Yes
Далее В этом первом видеоуроке приведен пример отладки драйвера umdf с использованием инструмента из WDK wdfverifier.exe Я не смог прикрепитьотладчик моего процесса драйвера, потому что процесс отсутствует.Но я мог отладить при запуске до сбоя процесса.
Для отладки с wdfverifier.exe Я предпринял следующие шаги:
Вкладка «Настройки»: Установите флажок «Автоматически запускать отладчик пользовательского режима при запросе», укажите 15 секунд на входе «Процесс хоста будет ждать»
Вкладка «Предпочтения»: Установите флажок «Использовать WinDbg», затем
Отключить / включить мое устройство в диспетчере устройств
Запускается WinDbg, и я могу проверить, был ли мой модуль драйвера загружен следующей командой:
lm m *bio*
//the module is not loaded, use g commant to continue
g
//again see if the module was loaded
lm m *bio*
//module shows up, great!
Теперь я могу установить точки останова, но до этого мне пришлось указать WinDbg, где находятся файл символов (* .pdb) и исходный код драйвера с помощью следующих команд (пути могут отличаться, если вы создаете пакет *Проект 1036 *, я создаю WudfBioUsbSample со ссылкой на проект EngineAdapter):
.symfix
.srcpath+ C:\Users\myuser\Documents\Windows-driver-samples\biometrics\driver
.sympath+ C:\Users\myuser\Documents\Windows-driver-samples\biometrics\driver\x64\Debug
.reload /f
Далее я могу установить точку останова:
//x command is used to search if the method exist
x WudfBioUsbSample!CBiometricDriver::*
x WudfBioUsbSample!CBiometricDevice::*
x WudfBioUsbSample!CBiometricDevice::OnGetAttributes
//examples of breakpoints
bp WudfBioUsbSample!CBiometricDriver::OnDeviceAdd
bp WudfBioUsbSample!CBiometricDevice::OnGetAttributes
bp WudfBioUsbSample!CBiometricDevice::CreateUsbIoTargets
метод CreateUsbIoTargets, где ошибки объявиться.Эти ошибки были исправлены JinZhuXing в этой проблеме github
После исправления кода драйвера и отладки, что метод CreateUsbIoTargets работает Ok
Все еще показал мне Желтый восклицательный знак , но на этот раз ошибка была в EngineAdapter.dll.Следующая ошибка отображается в EventViewer: журналы приложений и служб> Microsoft \ Windows \ Biometrics
Сбой процедуры инициализации модуля «Адаптер двигателя» с ошибкой: 0x80004001
EngineAdapterМетоды проекта возвращали E_NOTIMPL Я просто изменил это, чтобы вместо всех методов возвращать S_OK .И биометрическое устройство было успешно создано.
Также отладка модуля Engine Engine выполняется с помощью Visual Studio .Вот шаги, которые я выполнил:
Используйте wdfverifier.exe, чтобы присоединить WinDbg к процессу моего драйвера umdf и установить точку останова для метода OnGetAttributes (этот метод вызывается при запуске / перезапуске биометрической службы Windows)Эта точка останова заставит службу ждать, прежде чем она вызовет код подключаемого модуля EngineAdapter.
x WudfBioUsbSample!CBiometricDevice::OnGetAttributes
bp WudfBioUsbSample!CBiometricDevice::OnGetAttributes
g
Перезапустите или запустите биометрическую службу Windows ( WbioSrvc на Диспетчере задач-> вкладка Службы)
Скопировать идентификатор процесса (PID)
Запустить Visual Studio от имени администратора, открыть проект WBDIsample
Использовать меню Отладка -> Присоединить к процессу ...
Введите следующие значения:
Connection Type: Windows User Mode Debugger
Connection Target: Localhost
Check "Show processes from all users"
Filter by Process ID
Select the process and Click Attach button.
Установить точки останова на WbioQueryEngineInterface, EngineAdapterAttach, EngineAdapterDetach a Пример реализации на msdn
выполните команду g (Go) на WinDbg
g
После этого вы можете отладить код плагина в Visual Studio.
Осталось реализовать коддля биометрического драйвера и необходимые плагины для вашего устройства