Hatena::ブログ(Diary)

A Successful Failure このページをアンテナに追加 RSSフィード Twitter


2010年9月12日付でライブドアブログに引っ越しました。
新URLはhttp://blog.livedoor.jp/lunarmodule7/になります。
これからもどうぞよろしくお願い致します。



2007-08-02

LM-72007-08-02

Vistaにおけるキーボードカスタマイズ問題

キーボードカスタマイズはVistaでは不可能に?において、Windows Vistaにおけるキーボードカスタマイズに対して懸念を示したが、それから半年が経ち状況に変化が生まれてきたのでここでまとめておきたい。

すべてのカーネルモードコードにデジタル署名が必要に

MicrosoftのWindows Hardware Developer Centralの"Windows Vista のカーネル モードのコード署名用 Microsoft クロス証明書"によれば、Windows Vistaでは信頼できるソフトウェアを識別するために、デジタル署名を利用する。特にx64エディションではすべてのカーネルモードコードに適切なデジタル署名が付与されていることが求められる。x86システムではデジタル署名が無くても動作させることが可能だが、HD DVDやBlu-Ray Discの再生が行えないなどの制限が生じる。今はそれらが再生できなくても大きな影響はないかもしれないが、次世代ディスクが標準となったときに再生できなければ問題だ。

デジタル署名を受けるためには、現時点で6つしかないルート証明機関からコード署名証明書を取得する必要があるが、法人格のない個人に対してコード署名証明書を発行するルート証明機関は無い。ルート証明機関の一つであるVeriSignはQ&A"法人格のない個人でもコードサイニング証明書を取得できますか"において、個人および個人事業など、法人としての登記がない場合には、コードサイニング証明書(コード署名証明書)の申請・発行はできないと明記している。

つまり、法人でない個人が作るフリーウェアやシェアウェアなどは、カーネルモードドライバを含むような機能を提供できないということだ。窓使いの憂鬱に代表されるキーボードカスタマイズソフトは、独自のキーボードドライバを利用してキーボードカスタマイズを実現しているが、同じやり方はVistaでは通用しない。そのため、窓使いの憂鬱は開発を終了し、Vistaでは動作しないことをアナウンスしている。

問題は深刻で、1) 法人がキーボードカスタマイズツールを提供するか、2) カーネルモードコードを利用せずキーボードカスタマイズを実現するアプローチをとるか、3) デジタル署名が無くても動作させることができる方法を見いだすか、どれかを実現しないとVistaでキーボードカスタマイズができない状況は打破できない。

1 どこかの法人がキーボードカスタマイズツールを提供するのを待つ

もっともよいのはMicrosoft自身がキーボードカスタマイズツールを提供することだ。プログラマという人種は独自のキーアサインを持っていてそれが変わると開発効率が著しく落ちる。多くのプログラマを擁するMicrosoftならば、キーボードカスタマイズの重要性に気づいても良さそうだが、そうした機能が提供される気配はない。またサードパーティからもキーボードカスタマイズツールのリリースのアナウンスはない。残念ながら望み薄のようだ。ソースネクストあたりが窓使いの憂鬱 Vista対応版を1,980円ぐらいでだしてくれたら喜んで買うのだが。

2 カーネルモードコードを利用しない

2.1 レジストリの変更によりキーマップを変更

たとえばCtrlキーとCapslockキーの入れ替えならば、レジストリの変更だけで可能だ。次のファイルを拡張子regで保存し、ダブルクリックして適用後、再起動すればよい。元に戻したければ、レジストリエディタで該当キーを削除すればよい。詳しくは、LOST TECHNOLOGYの"キーを入れ替える"が参考になる。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,3a,00,1d,00,00,00,00,00

ところがこの方法だと単純なキーの入れ替えぐらいしかできず、自由度が少ない。

2.2 キーボード入力をフックして任意のキーに入れ替える

XKeymacsWindows Vistaにも正式に対応しているキーボードカスタマイズソフトであり、Windowsのすべてのソフトウェア上でEmacsライクな操作系を実現できる。キーボードドライバの上位に位置し、キーボードから渡されるキーマップを任意のキーコードに変換してしまう。問題点としては、すべてのキーをフックするため、若干動作が重くなるという点が挙げられるが、ドライバをいじる必要がないため、デジタル署名が必要ないという利点がある。高速なCPUを搭載したPCならば問題になることは少なく、おそらくVistaでキーボードカスタマイズをするときには現状もっともまっとうな方法と言えるだろう。

f:id:LM-7:20070805141834p:image

3 デジタル署名が無くても動作させる方法を見いだす。

x86版(32bit)Vistaならばとりあえずデジタル署名が無くても動作させることはできる。2ちゃんねるの窓使いの憂鬱7スレッドには、窓使いの憂鬱を暫定的にVistaに対応させたバイナリの配布が行われている。ここで再配布されているので必要な人はダウンロードしてほしい。

署名はオレオレなので、Vista x64ではテスト署名モードにする必要がある。具体的には「管理者として実行」したコマンドプロンプトから、

bcdedit -set TESTSIGNING ON

を実行してWindowsを再起動する。これは1回だけでいい。

テスト署名モードで再起動する前にインストールするとドライバが署名されてないからロードできねーぞとプログラム互換性アシスタントが警告するけど気にしなくておk。

テスト署名モードではx86で未署名のドライバを使ったときと同様、HD-DVDの再生等は制限される。またデスクトップの四隅に「テストモード」と表示される。

元に戻すには

bcdedit -set TESTSIGNING OFF

アンインストールしないで通常モードで起動しても起動の途中で止まったりはしないけどキー入力が一切効かない。その場合は再起動してF8押して「ドライバ署名の強制を無効にする」を選ぶ。

あとドライバ常駐した状態で使ってたらさっき何の前触れもなく青画面になった。

ソースに最低限の修正を加えてコンパイルしなおしただけだから問題が残ってるかも。

窓使いの憂鬱 7

まだまだ不安定なようだし、テスト署名モードを常用するというのも厳しいものがある。また、結局Blu-rayやHD DVDが使えないという制限は残るわけで根本的な解決にはならない。

2008年9月20日追記窓使いの憂鬱をVista 32bit/64bit, XP 64bit対応とした派生版、のどかの配付が行われている。1,800円のシェアウェアで、収益はコード署名証明書を取得することに利用されるとのことだ登記簿謄本が取れる会社を設立できる可能性を残すためと記載されているが、2007年10月4日付エントリ『個人でコード署名証明書を取ることが可能に』で示したように個人でもコード署名証明書を取得する道が開かれているため、会社設立までは必要ない。それでも年間$229という発行費用を捻出するためにシェアウェア化は不可避だ)

ところが、x86/x64問わずWindows Vistaで署名のないドライバをロードすることができるAtsivというツールが提供されている。元々レガシーなドライバをVista上で動作させることを目的に開発されたものなので、少なくとも上記のbcdeditで再起動する手間を省き、通常モードで稼働させることができそうだ。まだ検証もされていないので、試すときには自己責任でお願いしたいが、なんとか光明らしきものが見えたというところだろうか。この先の検証・開発に期待したい。

f:id:LM-7:20070805141725p:image

2007年8月7日追記Windows Vista Security : x64 Driver Signing Updateによれば、Microsoftは8月3日付けでAtsivに対する認証を取り消した。そのため、もはやAtsivによる認証回避は有効な手段ではなくなった。

4 第4の選択肢

さらに、2007年10月4日付エントリ『個人でコード署名証明書を取ることが可能に』に記載しているように、個人でコード署名証明書を取ることが可能となった。ここに第4の選択肢が現れたわけである。ひよひよ氏の努力に感謝するとともに、この選択肢によって多くの優れたオンラインソフトウェアがVistaでも変わらず利用できるようになることを願っている。

2008年9月22日追記Crystal Dew R&D Labsによれば、ひよひよ氏が開いた個人でコード署名証明書を取得する道は閉ざされてしまったようだ。残念極まりない。

まとめ

現状ではVistaにおけるキーボードカスタマイズは、レジストリの変更によるキー入れ替えにとどめるか、XKeymacsを利用することがベストと言える。デジタル署名を回避する手法は利用可能であるかもしれないが、それを前提としたソフト開発が行われるかどうかは現時点としては不透明であると言わざるを得ない(追記:Microsoftの対策により、Astivによる回避は不能になった)。ひよひよ氏の努力により、オンラインソフトウェア作者が個人でデジタル署名を取得することも可能であることが示されたので、なんとかして有志でデジタル署名を取得するという手も利用することができる(かなりの労力が必要になるのは言うまでもない)。抜本的な解決はMicrosoftがカスタマイズツールを提供することである事実は依然として変わりが無い。

関連エントリ

applet_at_happlet_at_h 2008/09/21 23:55 こんばんは。個人でもコード署名証明書を取得する道は、現在、閉ざされています。http://crystaldew.info/2007/09/26/デジタル署名のまとめ(vista-x64対応)/ のトップに書かれています。

LM-7LM-7 2008/09/22 07:43 なんと、それは大変残念です。情報ありがとうございました。
エントリを修正しておきますね。

applet_at_happlet_at_h 2008/09/22 08:11 フォローありがとうございます。「のどか」の方は時間はかかりますが、少しでも早く取得できるように、英文ドキュメントを準備しようと考えています。

LM-7LM-7 2008/09/23 11:04 おお「のどか」の作者の方でしたか。気付かず失礼しました。
私はキーボードカスタマイズの問題もあって未だXP使いですが、Vista移行時には「のどか」を利用させていただくことになると思います。Vistaは持っていませんが、少しでもお役に立てばと思い「のどか」をすでに購入していたりします:-)
開発大変でしょうけれど頑張ってください。

mmxmmx 2009/01/27 23:33 仮想キーを横取りして、親指シフトキーボードのシミュレートで、カナを得る
その カナ を JISキーボードでのスキャンコードに置き換える
動作の形では ありますよ。
em1keypc
キースキャンコード置換えの 単純なものや、JISキーボード→ASCII配列にするのも
出来ます。コレだけで、 任意に ON・OFFできるので 起動時なども安心です。

通りすがり通りすがり 2009/02/03 18:35 AutoHotkeyというフック型のカスタマイズツールがあります。スクリプトをゴリゴリ書くタイプのツールで、2ストロークなどにも対応している強力なツールです。これはvistaでも動くそうです。

etekichietekichi 2009/04/08 09:14 このような事例に対応できるコードサイン方法があるみたいです。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証