【问题标题】:Windows biometric framework sample umdf driver: This device cannot start. (Code 10)Windows 生物识别框架示例 umdf 驱动程序:此设备无法启动。 (代码 10)
【发布时间】:2019-02-19 03:04:26
【问题描述】:

我正在尝试运行 Windows biometric driver sample,但我对驱动程序开发很天真

我已经更改了 inx 文件中的硬件 ID,并重建了驱动程序项目,并将生成的驱动程序安装在我的 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 following some videos from msdn 进行调试,但进程没有启动,所以我无法调试:(

我验证了 Visual Studio 没有对 EngineAdapter.dll 插件文件进行签名,因此我禁用了驱动程序签名并按照 this paper 手动进行了签名。但我得到相同的错误代码 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

我认为驱动程序无法加载,因为有关证书或错误的警告可能在其他地方。

如果有人可以给我一个小建议以继续。我现在卡住了:(

非常感谢。

【问题讨论】:

  • 这可能有帮助,也可能没有帮助,但如果我收到类似的不透明故障消息,我经常使用来自 SysInternals 的procmon。有时您会看到一系列注册表或文件系统查找,这些查找给您强烈提示哪些幕后部分失败了。背景:procmon 是一个 Windows 应用程序,它向您显示系统进行的每个 FS 或注册表查找,包括调用堆栈(如果您有符号)。
  • 还有一个有用的工具谢谢@ArtHare。我能够在启动时调试我的生物识别驱动程序(禁用/启用设备),视频来自:docs.microsoft.com/en-us/windows-hardware/drivers/wdf/…
  • 调试后我在以下行遇到访问冲突异常:UCHAR NumInterfaces = pIUsbTargetDevice->GetNumInterfaces(); JinZhuXinggithub.com/Microsoft/Windows-driver-samples/issues/346表示我会改代码再调试一次
  • 在对我的设备进行一些特定更改后,我的驱动程序开始工作:此设备工作正常 :)
  • 请考虑写下您的更改作为答案并接受它。此问题显示为开放且有赏金。

标签: c++ wdk umdf wbf wbdi


【解决方案1】:

当我能够安装我的生物识别驱动程序时,一切都开始了,但它显示“黄色感叹号”和一般消息“此设备无法启动。(代码 10)”

生物识别示例项目不包括如何使用 Visual Studio 正确签署 EngineAdapter.dll 的示例我发现 this resource (page 33-34) where 显示 如何在项目属性 Build Events -> Post Build Event 上签署 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

下一个This first video tutorial 显示了使用 WDK wdfverifier.exe 中的工具调试 umdf 驱动程序的示例 我无法将调试器附加到我的驱动程序进程,因为该进程不存在。但我可以在进程崩溃之前在启动时进行调试。

为了使用 wdfverifier.exe 进行调试,我采取了以下步骤:

设置标签: 勾选“Automatically Launch user-mode debugger when requested”选项,在输入“Host Process will wait”中指定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) 和驱动程序的源代码在哪里(如果您构建 package 项目,我正在构建 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 在this github issue 中修复了这些错误

修复驱动代码并调试CreateUsbIoTargets方法运行OK

仍然显示黄色感叹号,但这次错误出现在 EngineAdapter.dll 中。 EventViewer 中显示下一个错误:Application and Services Logs > Microsoft\Windows\Biometrics

模块的“引擎适配器”初始化例程失败,错误为:0x80004001

EngineAdapter 项目方法返回 E_NOTIMPL 我只是将其更改为返回 S_OK 而不是所有方法。生物识别单元创建成功。

此外,引擎插件的调试是使用 Visual Studio 完成的。以下是我遵循的步骤:

使用 wdfverifier.exe 将 WinDbg 附加到我的 umdf 驱动程序的进程并为 OnGetAttributes 方法设置断点(当我启动/重新启动 Windows 生物识别服务时调用此方法)此断点将使服务在它之前等待调用 EngineAdapter 插件代码。

x WudfBioUsbSample!CBiometricDevice::OnGetAttributes
bp WudfBioUsbSample!CBiometricDevice::OnGetAttributes
g

重新启动或启动 Windows 生物识别服务(WbioSrvc 在任务管理器->服务选项卡上)

复制进程 ID (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 上设置断点 sample implementation is on msdn

在 WinDbg 上运行命令 g (Go)

g

之后就可以在 Visual Studio 上调试插件的代码了。

剩下的就是实现生物识别驱动程序的代码和设备所需的插件

【讨论】:

    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多