Драйвер umdf для биометрической структуры Windows: это устройство не запускается.(Код 10) - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь запустить Windows образец биометрического драйвера , и я наивен для разработки драйвера

Я изменил идентификатор оборудования в INX-файле, перестроил проект драйвера и установилполученный драйвер на моем Windows 10 Pro версии 1803.

Я использую устройство Fingerprint 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 Ответ

0 голосов
/ 27 февраля 2019

Все началось, когда я смог установить свой биометрический драйвер, но он показал «Желтый восклицательный знак» и общее сообщение «Это устройство не запускается. (Код 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.

Осталось реализовать коддля биометрического драйвера и необходимые плагины для вашего устройства

...