Драйвер umdf для биометрической структуры Windows: это устройство не запускается. (Код 10)
Я пытаюсь запустить образец биометрического драйвера для Windows и наивен в разработке драйверов.
Я изменил идентификатор оборудования в INX-файле, перестроил проект драйвера и установил полученный драйвер на мою Windows 10 Pro версии 1803.
Я использую устройство отпечатков пальцев Morpho 1300 E3
Драйвер успешно установлен, но обнаружена одна ошибка:
Это устройство не может запуститься. (Код 10) Указанный запрос не является допустимой операцией для целевого устройства.
Я просмотрел файл C:\Windows\INF\setupapi.dev.log
Показывает следующие предупреждения:
sig: {_VERIFY_FILE_SIGNATURE} 10:13:03.130
sig: Key = wudfbiousbsample.inf
sig: FilePath = C:\WINDOWS\System32\DriverStore\Temp\{ee9ffca3-751f-0b4e-a7ac-dce2543d995e}\wudfbiousbsample.inf
sig: Catalog = C:\WINDOWS\System32\DriverStore\Temp\{ee9ffca3-751f-0b4e-a7ac-dce2543d995e}\biometrics.cat
! sig: Verifying file against specific (valid) catalog failed.
! sig: Error 0x800b0109: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
!!! dvi: Device not started: Device has problem: 0x0a (CM_PROB_FAILED_START), problem status: 0xc0000450.
Но я установил TestCertificate в доверенные корневые центры сертификации и доверенные издатели на локальном компьютере
Я также проверил EventViewer: журналы приложений и служб> Microsoft\Windows\CodeIntegrity журналы приложений и служб> Microsoft\Windows\Biometrics
Я пытался отладить wdfverifier.exe после нескольких видео с msdn, но процесс не запускается, поэтому я не могу отладить:(
Я проверил, что Visual Studio не подписывает файл плагина EngineAdapter.dll, поэтому я отключил подпись драйверов и сделал это вручную, следуя этой статье. Но я получаю тот же код ошибки 10:(
Я также задавался вопросом, является ли код ошибки 10 ожидаемым, потому что код EngineAdapter.dll не реализован.
ОБНОВЛЕНИЕ: я тестирую на виртуальной машине Windows 10 Pro версии 1709 VMWare, и я получаю другую ошибку:
Это устройство не работает должным образом, поскольку Windows не может загрузить драйверы, необходимые для этого устройства. (Код 31)
!!! dvi: Device not started: Device has problem: 0x1f (CM_PROB_FAILED_ADD), problem status: 0xc0000001.
И те же предупреждения:
sig: {_VERIFY_FILE_SIGNATURE} 17:19:01.646
sig: Key = wudfbiousbsample.inf
sig: FilePath = C:\Windows\System32\DriverStore\Temp\{85323f79-3f5f-f84c-a52b-639b6ae57db1}\wudfbiousbsample.inf
sig: Catalog = C:\Windows\System32\DriverStore\Temp\{85323f79-3f5f-f84c-a52b-639b6ae57db1}\biometrics.cat
! sig: Verifying file against specific (valid) catalog failed.
! sig: Error 0x800b0109: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
sig: {_VERIFY_FILE_SIGNATURE exit(0x800b0109)} 17:19:01.661
sig: {_VERIFY_FILE_SIGNATURE} 17:19:01.676
sig: Key = wudfbiousbsample.inf
sig: FilePath = C:\Windows\System32\DriverStore\Temp\{85323f79-3f5f-f84c-a52b-639b6ae57db1}\wudfbiousbsample.inf
sig: Catalog = C:\Windows\System32\DriverStore\Temp\{85323f79-3f5f-f84c-a52b-639b6ae57db1}\biometrics.cat
sig: Success: File is signed in Authenticode(tm) catalog.
sig: Error 0xe0000241: The INF was signed with an Authenticode(tm) catalog from a trusted publisher.
sig: {_VERIFY_FILE_SIGNATURE exit(0xe0000241)} 17:19:01.708
sto: {DRIVERSTORE IMPORT VALIDATE: exit(0x00000000)} 17:19:01.739
Полный файл журнала здесь setupapi.dev.log
Я думал, что драйвер не загружается, потому что предупреждения о сертификате или об ошибке могут быть где-то еще.
Если кто-то может дать мне небольшой совет, чтобы продолжить. Я застрял сейчас:(
Большое спасибо.
1 ответ
Все началось, когда я смог установить свой биометрический драйвер, но он показывал "Желтый восклицательный знак" и общее сообщение "Это устройство не запускается. (Код 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) и исходный код драйвера с помощью следующих команд (пути могут отличаться, если вы создаете проект пакета, я сборка WudfBioUsbSample со ссылкой на проект EngineAdapter):
.symfix
.sympath+ C:\Users\myuser\Documents\Windows-driver-samples\biometrics\driver\x64\Debug
.srcpath+ C:\Users\myuser\Documents\Windows-driver-samples\biometrics\driver
.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 работает нормально
Все еще показывал мне Желтый восклицательный знак, но на этот раз ошибка была в 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
Используйте меню Debug -> Attach to Process...
Введите следующие значения:
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, пример реализации находится на msdn
выполните команду g (Go) на WinDbg
g
После этого вы можете отлаживать код плагина в Visual Studio.
Осталось реализовать код для биометрического драйвера и необходимые плагины для вашего устройства.
Удачного кодирования!