Windows Vista 対応 PacketiX VPN 2.0
PacketiX VPN 2.0 を Windows Vista (RC2) に対応させる作業のため、今週は徹夜が続きました。
Windows XP 用に書かれた大抵のアプリケーションは、Windows Vista にインストールするだけで、そのまま動作します。
特に .NET などで書かれたアプリケーションは下のレイヤが全部変更点を吸収してくれるので何もしなくても大抵動くようです。
しかし、PacketiX VPN 2.0 は極めて低レベル・低レイヤの処理を多様している特殊なソフトウェアなので、Windows XP で動作していた PacketiX VPN 2.0 をそのまま Windows Vista で動作させることは不可能でした。
こういう低レイヤなシステムソフトを書いている開発者は、みんな Vista 対応で苦労しているのだろうなあ……
特に Windows Vista で新たに追加された以下の 4 つの機能が原因で、Windows Vista 対応には多大な労力を必要としました。
- セッション 0 の分離と保護
- 以前のバージョンの Windows (NT, 2000, XP) ではターミナルセッションのうちセッション 0 が通常のログオンユーザーのために割り当てられていましたが、Windows Vista ではセッション 0 はシステム専用に分離され、通常のログオンユーザーはセッション 1 以降を使用するようになりました。
- PacketiX VPN 2.0 の一部の通知ダイアログなどはバックグラウンドサービスがセッション 0 に対して表示していたのですが、Windows Vista では上記のような理由でログオンユーザーに対して通知ダイアログが表示されなくなってしまいました。
- セキュリティ上の理由で、バックグラウンドサービスが起動中に自らのセッション番号を変更することは禁止されているようです。
- そこで Microsoft が開発者向けドキュメントで提案する方法で対応しました。
- 詳しくは http://www.microsoft.com/japan/whdc/system/vista/services.mspx
- UAC (ユーザー・アカウント・コントロール)
- Windows Vista では通常のプロセスは一般ユーザー権限と同等の権限で動作し、特権が必要になる場合は「セキュア・デスクトップ」に切り替わり、ユーザーに対して本当に特権を使用するのかどうかを選択させる画面が表示されるようになりました。
- 詳しくは http://www.microsoft.com/japan/msdn/windowsvista/security/
- Windows Vista x64 版でのドライバ署名の強制
- Windows Vista の x64 版では、VeriSign などの信頼できる証明機関によって署名された証明書によって署名されたデバイスドライバ (.sys ファイル) 以外のすべてのデバイスドライバがカーネルに読み込まれることが禁止されました。
- PacketiX VPN 2.0 の x64 版では、VPN Client の仮想 LAN カードのデバイスドライバと、VPN Server と VPN Bridge のローカルブリッジ用のデバイスドライバをインストールする必要があるので、これらのドライバに Vista で新たにサポートされた「クロス証明書」と呼ばれる特殊な証明書と共にバイナリ埋め込み電子署名を付加する必要が生じました。
- 詳しくは http://www.microsoft.com/japan/whdc/system/platform/64bit/kmsigning.mspx
- ActiveX インストーラ・サービス
- 最近よくニュースになっているので解説するまでもないですね。
上記以外にも、Undocumented な色々な謎の変更点 (ルーティング周りとか GUI 周り) があったので、かなりの時間をコーディングに割きました。
上記のように色々なセキュリティ上の変更点があったので、それらに一つ一つ対応するのに、大幅に周辺コードの改良が必要となりました。
それで、ほぼ移植 (?) が完了したところの様子は、以下のとおり。
Windows Vista RC2 に対応版 PacketiX VPN 2.0 をインストールしたところ
VPN クライアント接続マネージャ @ Windows Vista
VPN 仮想 LAN カードのプロパティ画面
Windows Vista の最新のセキュリティ機能「UAC (ユーザーアカウント制御)」に対応した仮想 LAN カードデバイスドライバのインストーラ
VPN サーバー管理ツール