仮想HIDドライバvmulti (1) : コンパイルからインストールまで
仮想HIDデバイスドライバとして有名らしい「vmulti(Virtual Maltiple HID Driver)」について、日本語の情報が一切引っかからなかったので備忘録として書いていきます。今回はVisual Studio 2012でのコンパイル方法と、OSへのインストール方法をまとめてみました。どなたかのためになれば幸いです。
公式サイト
VMulti - Welcome to DJPSoft
vmulti - Virtual Multiple HID Driver - Google Project Hosting
簡易的なインストール方法はプロジェクトページWikiにもあります
BuildingAndInstallingVMulti - vmulti - Virtual Multiple HID Driver - Google Project Hosting
vmulti(Virtual Maltiple HID Driver)で何が可能なのか
以下のデバイスの入力をエミュレートすることができます。
- マルチタッチ
- マウス
- ディジタイザ
- キーボード
- ジョイスティック
例えば、このドライバに対して「マウスを相対位置指定で(100, 100)に移動させてくれ」とリクエストを投げると、実際にマウスドライバの動作をエミュレートしてくれて、マウスがちゃんと移動します。
マクロをドライバレベルで動作させたりする用途にも利用できると思います。
Windows Driver Kit(WDK)のインストール
注意: Visual Studioをインストールしていない場合は、先にVisual Studioをインストールしてください。
(そうしないと、Project作成画面にWDKが表示されません)
ソースのダウンロード
Google Project Hostingからソースをダウンロード/チェックアウトします。
下記ページからzipでも落とせます
/ - vmulti - Virtual Multiple HID Driver - Google Project Hosting
ソースは以下の4つのプロジェクトを含んでいます。
- vmulti: vmultiドライバ
- hidkmdf: Hid miniport to be used as an upper layer for supporting KMDF based driver for HID devices. (よくわからん)
- vmulticlient: vmultiドライバにアクセスするための静的ライブラリ
- testvmulti: 上記の静的ライブラリを用いて、実際にドライバを使ってみるテストアプリケーション
ソリューションを開く(vmulticlient, testvmulti)
ダウンロードしたzip内にあるソリューションファイル(vmulticlient.sln)を開きます。
Visual Studio 2012で開くと、アップグレードを要求されるので、OKしておきます。
このソリューションにはvmulticlientとtestvmultiのプロジェクトが入っています。
vmultiとhidkmdfは別ディレクトリにプロジェクトファイルのみが存在します。
vmultiとhidkmdfをVisual Studioで開き、コンパイルする
ファイル → 開く → Conver Sources/Dirs...
vmulti: ./vmulti/sys/sources
hidkmdf: ./vmulti/hidmapper/sources
一度これを行うと、それぞれのディレクトリにプロジェクトが作成されます。
これを、vmulticlientなどのソリューションに追加することで、ひとつのソリューション内で全て開発できます。
vmulti/hidkmdfのコンパイル
それぞれのプロジェクトでビルドすれば以下のファイルが生成されます。
- vmulti.sys
- vmulti.inf
- hidkmdf.sys
ビルドするときは、動作対象のWindowsバージョンとx64/x86を適切に選択しましょう。
vmulticlient/testvmultiをコンパイルする
普通にそのままビルドしても私の環境だとできなかったので、プロパティを少々変更しました。
windows.hが開けない
fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
プロジェクト → プロパティ → 構成プロパティ → C/C++ → 全般
にある「追加のインクルードディレクトリ」に以下を追加
$(WindowsSDK_IncludePath)
excpt.hが開けない
fatal error C1083: include ファイルを開けません。'excpt.h': No such file or directory
上記と同様に「追加のインクルードディレクトリ」に以下を追加
C:\Program Files %28x86%29\Microsoft Visual Studio 11.0\VC\include
ドライバのインストール
64bitOSを利用している場合、デフォルトだとドライバに署名がないとインストール出来ません。
自己署名をすることで回避可能だと思うのですが、うまく行かなかったので、苦肉の策として採用した、OSのテストモード化の方法と、自己署名作業を途中まで記しておきます。
いつか、自己署名が出来たら更新します。
テストモード
テストモードにすることで、未署名ドライバを動作可能です。ただしセキュリティ的によろしくありません。
bcdedit /set TESTSIGNING ON
その後、ドライバをインストールします
devcon.exe install vmulti.inf djpnewton\vmulti
自己署名
下記の方法でうまく行かなかったため、なにか間違っていると思われます。
どなたかご教授いただければ幸いです。
makecert
証明書を作成します。
makecert -r -n "CN=LocalSign" -ss LocalCertStore -sr LocalMachine -pe
mmc
作成した証明書を登録します。
- プログラムを指定して実行「mmc.exe」
- ファイル → スナップインの追加と削除 にて「証明書(コンピュータアカウント)」を追加
- LocalCertStore/証明書/LocalSignが存在するか確認する
- LocalSignを「信頼されたルート証明書」と「信頼された発行元」にコピー
inf2cat
カタログファイルを作成します
c:\Program Files (x86)\Windows Kits\8.0\Tools\x64> inf2cat /driver:"c:\tmp\vmulti" /os:7_x64
signtool
署名します
signtool sign /s LocalCertStore /n "LocalSign" /t http://timestamp.verisign.com/scripts/timestamp.dll vmulti.cat signtool sign /s LocalCertStore /n "LocalSign" /t http://timestamp.verisign.com/scripts/timestamp.dll vmulti.sys signtool sign /s LocalCertStore /n "LocalSign" /t http://timestamp.verisign.com/scripts/timestamp.dll hidkmdf.sys
devcon.exe
ドライバをインストールします
devcon.exe install vmulti.inf djpnewton\vmulti
うまくインストール出来たかどうかやエラーなどは以下のログファイルに出力されています。
c:\Windows\inf\setupapi.dev.log