3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

Windows7(x64)でGavotte Ramdiskを使ってみた(オレオレ署名済み)

今まで、Dataram RAMDisk のフリー版を使って、4GBのRAMDsikを使ってたんですが少々手狭になってきたので、もう少しサイズを増やそうかと考えました。 Dataram RAMDiskの有償版にすれば4GB以上のRAMDiskを作成できるんですが、$18近くもするんで、ちょっと躊躇。。。
OSがWindows7 x64 なんで、ドライバにデジタル署名がついたRAMDiskソフトにしないといけません。

デジタル署名必須というOSの制限がなければ、GavotteRamdisk を使えるのになー と考えてググってるうちに、ドライバのデジタル署名を必須でないようにする方法が幾つかあることが分かりました。

一つは、Windows起動時の F8 オプションで、「ドライバ署名の強制を無効にする」で起動することです。この方法で起動すれば、デジタル署名が無いドライバを動かすことができます。
しかし、いちいちこのモードを選択して起動するのは面倒ですし、セキュリティが下がってしまうのが懸念されます。(SetupReadyDriverPlusというツールを使えばブートオプションを書き換え自動的に署名無効モードにしてくれるようですが、ちょいと怖いので今回はパス。この手順に関してはWindows7/Vistaでドライバの署名制限を無効に出来るSetupReadyDriverPlusで解説されてます)

もう一つはドライバに自身でデジタル署名(オレオレ署名)を施し、テストモードで起動する方法です。
自己署名をしただけでは、認証されていないため動かすことできません。
そこで登場するのが、「テストモード」です。このモードの存在は初めて知りました。 テストモードでは署名なしドライバを動かすことはできませんが、オレオレ署名なら動作させることができます。

ということで、今回の自己署名+テストモードでの運用をして見ることにしました。

ソフトの入手

Gavotte Ramdisk自体ですが、今回はGavotte Ramdisk まとめWIKI - トップページからダウンロードしました。 任意のフォルダに解凍します。

自己署名の作成

makecert,Cert2Spc,pvk2pfx,signtool の各種ツールを使う必要があります。Windows SDK等の開発環境についてきます。
今回はMicrosoft Windows SDK for Windows 7 and .NET Framework 4を使いました。証明書関係のツールを使うにはインストール時に Tools のオプションだけで構いません。
各コマンドは、Microsoft Windows SDK for Windows 7 and .NET Framework 4 の場合以下にあるので、パスを通しておくと良いかと思います。

C:\Program Files\Microsoft SDKs\Windows\v7.1\bin\

まず、管理者権限のコマンドプロンプトを立ち上げ、ルート証明書(rramdisk64.cer)と秘密鍵ファイル(rramdisk64.pvk)を作成します。

makecert -sv rramdisk64.pvk -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -ss Root -len 1024 -sr localMachine -n CN="rramdisk64.sys" rramdisk64.cer

パスワード入力の画面が出てくるので、今回は全て hoge にしました。

証明書からソフトウェア発行元証明書(rramdisk64.spc)を作成します。

cert2spc rramdisk64.cer rramdisk64.spc

ソフトウェア発行元証明書(rramdisk64.spc)と秘密鍵ファイル(rramdisk64.pvk)から、別フォーマットの証明書(pfxファイル)を生成します。 (-pi に証明書作成時に入力したパスワードを指定します)

pvk2pfx -pvk rramdisk64.pvk -pi hoge -spc rramdisk64.spc -pfx rramdisk64.pfx

署名ツールで、ドライバファイル(上記でダウンロードしたGavotte Ramdisk内のrramdisk64.sysファイル)にデジタル署名を実施します。

signtool sign /f rramdisk64.pfx /p hoge /d "rramdisk64.sys" /v rramdisk64.sys

rramdisk64.pfx を右クリック、インストールを行います。 証明書ストアは、「物理ストアを表示する」にチェックし、[信頼されたルート証明機関\レジストリ] を選択します。 パスワードは証明書発行時に指定したものです。(今回はhoge)

テストモード

管理者権限のコマンドプロンプトで以下のコマンドを実行し、再起動します。

bcdedit /set testsigning on

これでWindowsがテストモードに移行します。
offにするとテストモードが終了し通常モードに移行します。

テストモード中は右下にテストモードである旨が表示されます。

ドライバのインストールとRAMDiskの作成

ram4g.reg を実行しレジストリに書き込みます。

[ファイル名を指定して実行]で、"hdwwiz" を実行し、ハードウェア追加ウィザードを起動します。
[一覧から選択したハードウェアをインストールする]にチェックします。
[すべてのデバイスを表示]を選択して、[ディスク使用]からデジタル署名した元]で上記で署名した rramdisk64.sys のあるフォルダのinfファイルを指定ます。

自己署名してるのに署名が無いというダイアログが表示されたりしますが、そのまま強制的にインストールします。

これで再起動し、デバイスマネージャからドライバが正しくインストールされていることを確認します。

これでドライバのインストールは完了したので、後はRAMDisk自体の設定です。
ramdisk.exe を右クリックから管理者権限で実行します。

DataSizeに任意のサイズを入力します。今回は 6G としました。 MediaTypeは [Fixed Media]にします。 これで再起動すると、ちゃんと使えるようになっているはずです。

参考:
Windows7 (64 bit) 環境 RamDisk | Bloody Mary - blog
Gavotte Ramdisk を Windows 7 x64 で使う
自己署名環境の作成方法 - mookny’s diary
64bit版デバイス・ドライバ - @IT