原文地址:http://bbs.pediy.com/showthread.php?t=190884

前一段时间一直在做x64平台的内核驱动,期间也看了论坛上的很多文章,受到很多的启迪。在搜集资料的时候发现论坛上一些人对于x64驱动签名也有一些疑惑,所以把一些经验写出来,给和我一样的人看一下,这些资料也是从微软网上弄来的,只是加了一些我的实践和经验;

因为x64平台下需要数字签名,但是正常开发的时候,需要测试的时候是没有数字签名的,所以这个时候一般都会开机后进入F8,选择禁止数字签名强制,但是这个办法的麻烦之处就是每次开机都要这样操作,要是虚拟机的话,一不小心错过了会很麻烦。MSDN上对这个有个解决方案就是使用测试签名;

==========================================================
测试签名获取:

假设编译好的驱动的位置是: E:\WinDDk\my_test\objchk_win7_amd64\amd64

1. 制作一个测试使用的数字证书:

使用管理员权限打开命令行(我用的是VS自带的64位命令行或者WDK命令行x64 Checked Build Environment)进入驱动的路径,然后输入以下命令:

makecert –r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) My_Test.cer

这个时候在目录下会生成一个My_Test.cer的测试证书;如果不使用管理员权限可能会失败;如果使用cmd可能会失败;

2. 修改INF文件并生成目录文件:

一般INF文件都会有一个version节

[version]
Signature   = "$Windows NT$"
Class         = xxx
ClassGUID  = xxx
Provider     = xxx
DriverVer    = xxx

在这个节点的最后增加一个CatalogFile.NtAMD64 = My_Test_AMD64.cat

需要注意的是这个CatalogFile只有CatalogFile.NtAMD64 CatalogFile.Nt CatalogFile三个情况;然后将INF文件也放到驱动sys文件的路径下

使用管理员权限打开WDK自带的命令行进入到对应的驱动程序路径,输入下面的命令

Inf2cat.exe /driver:E:\WinDDk\my_test\objchk_win7_amd64\amd64\ /os:7_x64

这里有几个地方会出问题,首先是/driver:后面不能有空格,否则会出错;其次是os:7_x64指的是win 7的x64平台(这个时候它又不会区分AMD64和IA64了);最后是INF文件必须也在这个目录下,格式不能出错, DriverVer这个节点的值最容易出错,时间需要修改 ;

3. 对cat文件签名:

使用以管理员权限打开WDK带的命令行,定位到驱动程序路径下,输入下面的命令:

Signtool sign /a /v /s zcPrivateCertStore /n zcContoso.com(Test)

/t http://timestamp.verisign.com/scripts/timestamp.dll My_Test_AMD64.cat

这里需要联网,不联网会有一个警告,因为它需要去生成时间戳;

4. 注册测试数字证书:

以管理员权限打开WDK命令行,定位到驱动文件路径下,输入以下命令:

certmgr.exe /add My_Test.cer /s /r localMachine root

5. 对驱动文件签名:

以管理员权限打开WDK命令行,定位到驱动文件路径下,输入以下命令:

Signtool sign /a /v /s zcPrivateCertStore /n zcContoso.com(Test)

/t http://timestamp.verisign.com/scripts/timestamp.dll xxxx.sys

这里需要联网,不联网会有一个警告,因为它需要去生成时间戳;

6. 安装测试签名:

在目标机上,将xxx.sys xxx.inf My_Test.cer My_Test_AMD64.cat,以及certmgr.exe放在一个路径下,然后以管理员权限打开CMD命令行定位到这个目录,输入以下命令来注册证书以及打开测试模式:

certmgr.exe /add My_Test.cer /s /r localMachine root

certmgr.exe /add My_Test.cer /s /r localMachine trustedpublisher

cd c:\windows\system32\

bcdedit.exe /set TESTSIGNING ON

测试模式打开一次后,即使重启电脑也不用再次设置,除非显式的关闭它;窗体右下角会提示目前是在测试模式,关闭的命令是bcdedit.exe /set TESTSIGNING OFF

需要注意的事项:

1. 如果目标机上没有certmgr.exe,那么可以从主机上直接拷贝一个64位的certmgr.exe过去的;

2. 如果重新生成了sys文件而没有修改inf文件的话,那么只需要在生成sys文件后再次执行对驱动文件的重新签名即可;测试证书和目录文件都不需要重新生成;

3. 最好都使用管理员权限来启动命令行;不用每次都关闭WDK的命令行,事实上可以一直使用同一个WDK的命令行;如果觉得输入太麻烦,那么可以复制粘贴的;在目标机上的注册证书,可以写一个bat文件的;

4. 测试签名可以使用预安装来安装;makecert、Inf2cat、Signtool、certmgr都在WDK中有;

msdn上有一个文档专门讲这个,上面还讲了怎么弄真正的数字签名,不过那个文档一时找不到了,如果有人需要的话我找一下再传上来;

win x64平台驱动测试数字签名相关推荐

  1. x86汇编代码转x64平台使用(VS2010测试通过)最简单的方法

    众所周知,在x86平台,可以直接使用__asm 内嵌汇编代码,然而在x64平台却不行了. 现在解决这个问题. 一.VS中创建控制台程序,改成x64平台启动. 二.创建test.asm文件.将原先的汇编 ...

  2. ZYNQ平台的HDMI驱动测试

    前情提要: 1.本文所使用的的开发板是Alinx的AX7010开发板 2.PC开发环境为:Vivado 2019.2 vitis 2019.2 3.Ubuntu开发环境为:安装了petalinux20 ...

  3. win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决

    win7关闭驱动签名,进入驱动测试模式 win7.win10关闭驱动签名.进入驱动测试模式 方式一: 方式二:批处理文件实现:管理员权限打开win7-win10驱动测试模式 方式三: DebugVie ...

  4. 2018html游戏引擎,跨平台三维游戏引擎Unity Pro 2018.1 Win x64

    跨平台三维游戏引擎Unity Pro 2018.1 Win x64 Unity是由Unity Technologies开发的跨平台游戏引擎,主要用于开发三维和二维视频游戏和计算机.控制台和移动设备的模 ...

  5. mupdf不支持x64_x86平台转x64平台关于内联汇编不再支持的解决

    工具:VS2005  编译器:cl.exe(X86 C/C++)  ml64.exe(X64 ASM64) 前提:X86下内联汇编是嵌在函数当中实现的 在X86平台下,可以轻松的在C/C++代码中嵌入 ...

  6. MTK led驱动测试 (adb)

    1) MT6370/MT6371上的LED测试 进入对应led的文件中进行(sys/class/leds/ 下面会有对应led结点的文件夹) 闪烁测试需要4步: 1.echo pwm_mode > ...

  7. Win10+VS2015平台下OpenCV3.1.0的x86和x64平台的Debug与Release模式的编译与配置

    闲话 昨天晚上在新电脑上重新配置了OpenCV3.1,之前虽然也弄过,不过当时是初学者,只是照着网上的教程简单的配置了Debug模式下x86的运行环境(大部分的教程也只教了这种方式的配置......) ...

  8. linux驱动开发 - 12_platform 平台驱动模型

    文章目录 platform 平台驱动模型 1 platform 总线 platform匹配过程 2 platform 驱动 platform 驱动框架如下所示: 3 platform 设备 platf ...

  9. 树莓派Linux内核编译、文件系统、Linux内核驱动基础框架、驱动测试步骤、总线地址

    树莓派高阶开发课程 1. ubuntu18.04版本安装          让程序猿搭建环境太搞笑了,轻松easy! ========================================= ...

最新文章

  1. 完胜ReLU!斯坦福的神经网络采用这种激活函数,竟高保真还原各种图像视频
  2. 西湖大学鞠峰组招聘“污水处理”与“微生物组”方向博士后与科研助理
  3. 理解jmeter聚合报告
  4. python连接各种数据库数据_Python连接各种数据库
  5. Linux怎么调oracle存储,Linux 环境下Oracle安装与调试(四)之视图、存储过程
  6. 在Unity中做一个淡入式的屏幕虚化
  7. 国一B题方案解析:轴距仅210mm的四旋翼有多稳?
  8. 中兴f650 2.0.3 固件降级_手机资讯:如何升级iOS12.1.4正式版iOS12.1.4正式版升降级教程...
  9. 推荐算法---FM,协同过滤
  10. 类的带参方法有哪几部分构成?
  11. 你以为熬个3年工作经验就是Java高级开发了?
  12. 行云管家堡垒机的使用方法之二——新增登录凭证
  13. 用indesign怎么更换名牌姓名_北京怎么脱单?来北京相亲会,哪里有单身交友聚会?户外交友活动...
  14. Xshell 6安装和使用教程
  15. 无人驾驶5: 贝叶斯公式
  16. 高德,微信公众号,企业微信获取定位
  17. 华为路由三层交互:单臂路由实验
  18. NumberPicker
  19. 【生信】初探基因定位和全基因组关联分析
  20. 10053 事件详解

热门文章

  1. 分享给大家几个好玩的网站
  2. mysql id in 走索引 ??
  3. 10.如何在Linux下解除PDF文件的密码?
  4. Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测
  5. 计算机组装与维护实训参考文献,计算机组装论文,关于《计算机组装维护》数字实训资源的开发相关参考文献资料-免费论文范文...
  6. excel高效办公——Excel如何将同一单元格中的日期和时间拆分(分列法)
  7. python教程(面向初学者)【1】
  8. 推荐6个自学网站,每天学习,你会发现自己进步得越来越明显!
  9. 2020-02-25
  10. 北京理工大学重点用人单位推荐