Feature image

编译并使用虚拟HID驱动

背景

虚拟HID驱动用于虚拟一个或多个人机交互设备,如键盘、鼠标、摇杆等,作用都懂的。
经过搜索发现一个开源项目vmulti,实现了虚拟的多点触控、鼠标、键盘、摇杆以及数位笔,省去了自己写驱动的麻烦。

编译vmulti

  1. 安装WDK
  2. 运行以管理员权限WDK build environment
  3. 进入vmulti工程文件夹,运行
1
build -wgc
  1. 把编译生成的vmulti.sysmulti.infhidkmdf.sys文件放到同一个文件夹
  2. 把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