WM6.1 驱动程序上的代码签名
Posted
技术标签:
【中文标题】WM6.1 驱动程序上的代码签名【英文标题】:Code-Signing on WM6.1 Drivers 【发布时间】:2010-08-31 15:39:55 【问题描述】:我已经在堆栈溢出问题上问过类似的问题,但我相信这部分问题可以分成一个新问题。
我以前没有做过移动开发,所以使用签名和证书对我来说是一个新概念,而且对于我所做的所有主题的阅读,它并没有真正提高我的知识,因为我阅读的每个网站都只谈论签名的一小部分,而不是完整的过程,将它们拼凑在一起很困难。
我的问题是我的驱动程序在 WM6.1 上启动时没有加载。它是 GPS 的驱动程序,因此需要加载,以便它可用于任何可通过 COM 端口访问的 GPS 软件。我相信这是由于签名问题,因为 DllMain 方法从未被调用。
我已获得使用特权证书 (.pfx),并且还获得了新的(2010 年 1 月)SDKSamplePrivDeveloper 证书作为记录。我认为驱动程序需要特权证书。
那么我实际上做了什么。在过去的 4-5 天里,我至少尝试了几种变体,但都没有成功。
在视觉工作室; 1) DLL 项目为我们的 .pfx 证书设置了验证码签名。构建项目。
2) CABWizard 项目的验证码设置为相同的证书。构建项目。
3)按照 MSDN 说明...将 .pfx 转换为 509 Base64 证书,并从中创建 XML 配置文件。它已创建到自己的 CAB 或 CPF 文件中。并且还尝试将 _setup.xml 文件配置到之前创建的 CAB 文件中,以便与应用程序一起安装。
4) 我已将这些安装到设备上,虽然驱动程序在我们的测试应用程序中运行,但它不会在启动时加载,即使它在“BuiltIn”中的注册表设置是正确的。检查注册表中的证书存储时,我可以看到添加到 SPC、根、特权和非特权存储的证书。当使用 System|Certificates 时,我可以在 Root 选项卡中看到证书。所以他们肯定已经被添加了。
鉴于上述没有奏效。我还使用 SDKSamplePrivDeveloper 证书尝试了 http://www.modaco.com/content/i8000-verizon-sch-i920-omnia-ii-http-i8000-modaco-com/306870/sdkcerts-2010-and-signing-tool/ 的 siggner.exe 工具。
1)Dll 项目的验证码签名设置为否。构建项目。
2)加载 siggner.exe 并使用 SDKSamplePrivDeveloper.cer 对 Dll 文件进行签名。
3)CABWizard 项目的验证码设置为否。构建项目。
4) 加载 siggner.exe 并使用 SDKSamplePrivDeveloper.cer 对 cab 文件进行签名。
5) 使用 NewSDKCerts.Cab 将 SDKSamplePrivDeveloper 证书安装到商店中。
6) 安装我使用驱动程序创建的 CAB 文件。
7) 同样,在热重启时,驱动程序不会在启动时加载到 device.exe。
鉴于上述情况,任何人都可以给我一些明确的说明,以确保在启动时加载驱动程序。我显然在签名方面做错了,因为它确实在 Windows CE5 中启动时没有问题。我知道设备驱动程序代码没问题,因为我可以使用 WM6.1 中的 ActiviateDevice() 方法在代码中手动激活它。
编辑--
也许值得添加,我还创建了一个完全没有签名的 DLL 和 CAB。并且在它安装的操作系统的干净启动时没有抱怨。虽然在启动时仍未加载,但我确实预计有关 CAB 和 DLL 的警告未签名。
【问题讨论】:
【参考方案1】:驱动程序失败的原因不是证书问题。
驱动程序最初是自包含的,还包含一些 GUI 代码,并且已经扩展。用于使应用程序全屏显示的库在启动时不可用,因此它因依赖问题而静默失败。
目前已通过稍后加载启动应用程序以在库可用后唤醒驱动程序来解决此问题。要添加的适当解决方案是延迟加载所需的库以防止依赖失败。
【讨论】:
【参考方案2】:驱动程序签名也是与此驱动程序相关的问题。我们现在拥有制造商颁发的证书来签署驱动程序,因此问题也得到了解决。
【讨论】:
以上是关于WM6.1 驱动程序上的代码签名的主要内容,如果未能解决你的问题,请参考以下文章
在构建脚本中使用 xctool 和 xcodebuild 进行代码签名后,ITC 上的代码签名权利无效