[基礎解説]
Windowsの互換性テクノロジの仕組み(後編)

3.Windows互換性テクノロジの限界と活用

佐藤 芳樹
2010/06/30
Page1 Page2 Page3

必要なshimの見つけ方
 次に、Windows互換性テクノロジやACTを紹介すると必ず聞かれる質問について答えておきたい。それは、「365個もあるshimの中からどうやって必要なshimを見つければよいのか」というものである。

shimの検索
Compatibility Administratorには検索機能があり、キーワードによる検索で必要なshimを見つけることができる。この検索ダイアログは、メニュー・バーから[Search]−[Query Database]をクリックすると表示される。
shimを検索するには、これを選択する。
検索したいキーワードを入力する。
これをクリックすると検索が始まる。
ここに見つかったshimが表示される。
で選択したshimの説明が英語で表示される。

 そのような疑問に答えるために、Compatibility Administratorには検索機能が用意されている。これにより、必要なshimをキーワードで検索できる。

Compatibility Administratorの隠されたコマンドライン・オプション
 Compatibility Administratorには隠しコマンドライン・オプションが用意されている。このコマンドライン・オプションを利用すると、利用可能なshimの数を大幅に増やすことができる。

Compatibility Administratorの隠しコマンドライン・オプション
左側は通常起動した場合のCompatibility Administratorで、shimの数は365個である。一方、右側は隠しコマンドライン・オプションを指定して起動した場合で、利用可能なshimが807個に増えている。

 隠しコマンドライン・オプションの使用方法は非常に簡単で、Compatibility Administratorを起動する際に/Xオプションを指定するだけである。

C:\Program Files\Microsoft Application Compatibility Toolkit 5\
Compatibility Administrator
Compatibility Administratorのパス(デフォルト設定でインストールした場合)

ComapatAdmin.exe /X
隠しコマンドライン・オプションの指定方法:

 なぜ442個ものshimが隠されているかというと、隠されているshimは特定のアプリケーション専用に作成されたものだからだ。汎用的に利用可能な365個のshimに対して、利用用途が決まっている442個のshimを同じように使えてしまうと適用ミスにより検証が難航してしまう可能性が高いため、これらのshimは通常は隠されているのだ。

互換性データベースの展開と管理手法
 互換性データベースは、Windows OSに標準装備のsdbinst.exeというコマンドを利用することで、コマンドラインからアプリケーションに適用(インストール)できる。sdbinst.exeのありかと基本的な構文は以下のとおりである。

C:\Windows\System32
sdbinst.exeのパス

sdbinst.exe -p <互換性データベースのファイル名>
互換性データベースをインストールするときのコマンドライン

 sdbinst.exeに用意されているオプションは下表のとおりだ。

オプション名 内容
-p
指定した互換性データベースのインストールを実行
-q
ウィンドウ、状態、または警告情報を表示せずに、サイレント・インストールを実行
-u
指定した互換性データベースのアンインストールを実行
-g
アンインストール対象のカスタム・データベースをグローバル一意識別子(GUID)で指定
-n
アンインストール対象のデータベースをファイル名で指定
sdbinst.exeのコマンドライン・オプション

 このように、sdbinst.exeはシンプルであるもののコマンドラインから制御できるため、Active Directoryのグループ・ポリシーを利用したログオン・スクリプトによる自動インストールやサイレント・インストールも可能だ。また、何らかの不具合を発見した場合や不要になった場合には、互換性データベースをアンインストールできる。

 作成した互換性データベースは必要に応じてCompatibility Administratorで開いてshimを追加したりできる。つまり、一度作成したら終わりではなく、必要に応じてカスタマイズを続けながらメンテナンスしていくことも可能だ。

標準搭載される日本語アプリケーション向けの互換性データベース
 前述のとおり、ACTは英語版アプリケーションではあるが、日本語アプリケーション向けにも標準でいくつかの互換性データベースを搭載している。代表的なものとしては、トレンドマイクロのウイルスバスターの旧バージョンなどが挙げられる。

日本語アプリケーション専用の互換性データベース
Compatibility Administratorの左側ツリーで[System Database]−[Application]を選択すると、デフォルトで用意されている日本語アプリケーション専用の互換性データベースが確認できる。

Windows互換性テクノロジでは解決できないこと

連載 Windows 7新時代『Windows XPとの互換性を実現する「Windows XP Mode」
運用 Windows Server 2008 R2によるVDI実践入門 第1回「2.集中管理型の仮想化技術MED-V/App-V」

 Windows互換性テクノロジの限界についても説明しておきたい。前編でも少し触れたが、Windows互換性テクノロジは万能薬ではなく1つの回避策にすぎない。アプリケーションのソースコードに手を入れずに互換性問題を完全に回避したい場合は、Windows XP ModeやMicrosoft Enterprise Desktop Virtualization(MED-V)のような仮想化テクノロジを利用しなければならないし、回避ではなく解決したい場合には、やはり従来どおりプログラムのソースコードを改修する必要がある。

 それでは、Windows互換性テクノロジで実現できないことについていくつか例を挙げる。

shimの独自開発
 足りないshimを自分で作成して、互換性データベースに組み込むことができるのか? 答えは「No」である。shimはあらかじめ用意されている365個(隠しオプションを利用した場合は最大807個)しか利用できない。強いていえば、C/C++などのプログラミング言語を駆使すれば、shimが実施しているようなAPIインターセプトを独自かつ個別に開発することは可能である。詳細は、Jeffrey Richter/Christophe Nasarre著の「Advanced Windows 第5版 上巻下巻」という書籍で紹介されているので、必要に応じて参照していただきたい。

廃止または無効化されたAPIの補完
 いくつかのshimを利用することで関数の呼び出しを修正することは可能だ。例えば「DirectXVersionLie」というshimは、「DXDIAGN GetProp」という関数が返すDirectXのバージョン番号を偽装できる。しかしながら、Windows 7ですでに無効化されているAPIは補完できない。例えばOutlook Expressを起動する「CoStartOutlookExpress」というAPIは、Outlook ExpressがWindows Liveメールで代替されたことにともなってWindows 7では無効化されたが、これをshimで補完や代替はできない。

セキュリティ対策機能の突破
 Windows互換性テクノロジは、セキュリティ対策機能で守られたリソースを書き換えることはできない。例えば、Windows 7にはユーザー・アカウント制御(UAC)というセキュリティ対策機能が実装されており、管理者ユーザーであっても通常は標準ユーザーとして振る舞うことでシステム・リソースへの不正なアクセスを防いでいる。shimの中には、ユーザーを管理者グループ(Administrators)にいると思わせてアプリケーションを動作させる「ForceAdminAccess」というshimが存在するが、これはあくまでもユーザーが管理者グループにいるように見せかけるだけで、通常のユーザーに管理者しかできない行為を実行可能にするものではない。管理者権限が必要な行為には、必ずUACによる管理者権限への昇格が必要になる。

Windows 互換性テクノロジの高度な活用方法

 Windows 互換性テクノロジは、現在、多くの人々の注目を集めている仮想化テクノロジと組み合わせて利用できる。例えば、Microsoft Application Virtualization(App-V)というマイクロソフト製のアプリケーション仮想化ツールと組み合わせることで、OSとアプリケーションの切り離しと互換性問題の回避を同時に実現できる。

 まずApp-Vについて簡単に説明しよう。通常のWindowsアプリケーションは、OSにインストール(組み込み)をして利用するが、App-Vを利用するとアプリケーションをインストールすることなく利用できるという点が大きな特徴といえる。また、App-Vを利用すると、競合などにより本来1つのOS内で共存できないアプリケーションを共存させることも可能となる。仕組みはシンプルで、アプリケーションがOSに依存しないようにするために、アプリケーションとアプリケーションが利用するシステム・ファイル(レジストリやDLLなど)を1つのパッケージ(このパッケージのことを仮想アプリケーションという)にまとめて仮想化し、アプリケーションごとに分離・独立することでアプリケーション同士の衝突を防止している。

通常のアプリケーションとApp-Vによる仮想アプリケーションの違い
通常のWindowsアプリケーションはOSの内部に組み込まれるためDLL競合などが発生する可能性があるが、仮想アプリケーションはアプリケーションごとに実行環境を持つため、DLL競合やOSへの影響などを排除できる。

 Windows互換性テクノロジとApp-Vを併用すると、Windows 7で実行不可能なアプリケーションをWindows互換性テクノロジごとApp-Vで仮想化して利用できるため、互換性問題の回避とアプリケーションの混在(Windows 7で利用できないバージョンと利用できるバージョンの共存)を同時に実現できる。このようなシナリオは、古いWindows OSからWindows 7への移行期に、どうしても旧バージョンと新バージョンのアプリケーションを共存させなければならない場合などには効果的といえる。

 今回の記事では、これまであまり触れられることのなかったWindows互換性テクノロジについて説明してきた。Windows XPからWindows 7への移行では、前編で紹介したとおりOSカーネルの変更にともなう互換性問題が発生する可能性があるので、ぜひこのテクノロジを活用して、読者諸氏の環境でもスムーズな移行を実現してほしい。End of Article

 

 INDEX
  [基礎解説]Windowsの互換性テクノロジの仕組み(前編)
    1.互換性問題が生じるワケ
    2.Windows 7との互換性を確保する「shim」
    3.互換性テクノロジが効果を発揮する場面
 
  [基礎解説]Windowsの互換性テクノロジの仕組み(後編)
    1.Application Compatibility Toolkit(ACT)とは?
    2.ACTで「互換性データベース」を作る
  3.Windows互換性テクノロジの限界と活用

 基礎解説

 「Windows XP→Windows 7移行支援記事集」



Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間