背景
虚拟HID驱动用于虚拟一个或多个人机交互设备,如键盘、鼠标、摇杆等,作用都懂的。
经过搜索发现一个开源项目vmulti,实现了虚拟的多点触控、鼠标、键盘、摇杆以及数位笔,省去了自己写驱动的麻烦。
编译vmulti
- 安装WDK
- 运行以管理员权限WDK build environment
- 进入vmulti工程文件夹,运行
1 | build -wgc |
- 把编译生成的
vmulti.sys
、multi.inf
、hidkmdf.sys
文件放到同一个文件夹 - 把WDK中的
WdfCoInstaller01009.dll
,devcon.exe
也放到这个文件夹
驱动签名
Windows x64系统上无法安装无签名的驱动,需要进行self sign。所有操作需要在管理员权限的WDK build environment中执行。
打开Windows测试模式
要加载self sign的内核代码,需要打开windows的测试模式:
1 | bcdedit /set testsigning on |
重启。
创建证书
1 | makecert -r -pe -ss "CatX" -n "CN=CatX Test Certificate" catx.cer certmgr -add catx.cer /s /r localMachine root certmgr -add catx.cer /s /r localMachine trustedpublisher |
验证证书是否正确安装,运行:
1 | certmgr |
签名
驱动中的如下文件需要签名:
*.sys
文件*.inf
中引用的*.cat
文件
如果*.cat
文件不存在,需要运行inf2cat创建:
1 | inf2cat /driver:%driver_folder% /os:7_x64 |
vmulti需要签名的文件有vmulti.sys、hidkmdf.sys和kmdfsamples.cat,运行:
1 | signtool sign /v /s "CatX" /n "CatX Test Certificate" /t http://timestamp.verisign.com/scripts/timestamp.dll %file_name% |
验证签名:
1 | signtool verify /pa /v *.cat *.sys |
安装vmulti
运行:1
devcon install vmulti.inf djpnewton\vmulti
测试
vmulti工程中包含了一个测试程序testvmulti.exe
,用于测试驱动功能:1
testvmulti.exe /multitouch
testvmulti.exe /mouse
testvmulti.exe /digitizer