レガシーDLLを新しいAPIにマッピングする「Virtual DLL」
MinWinを開発する際に非常に重要だったのが、Vistaで提供されているシステムDLLを整理する必要である。Vistaが持つレガシーDLLをそのままWindows 7に持ち込むと、Vistaと同じようにパフォーマンス面でデメリットになる。そこで、MinWinを開発する時に、「DLLリファクタリング」という作業が行なわれた。
DLLリファクタリングでは、実装内容は変更せずにDLLの構成や構造を変更して、レガシーな環境をMinWinには持ち込まないようにしたという。さらにMinWinでは、Windowsが持つ多数のAPIも整理している。例えば、32bitと64bitで重複する機能などを整理したり、複数の機能をひとつのDLLにまとめたりしている。そのため、MinWinで動作しているカーネルは、Vistaのカーネルとはまったく違ったものになっている。
![]() |
DLLリファクタリングによりAPIとDLLを整理。これにより、カーネルに必要なDLLを新たに開発している |
しかし、このままではVista用のアプリケーションは、MinWinをベースとしているWindows 7ではまったく動作しなくなる。そこで、レガシーDLLを新しいMinWin APIにマッピングする「Virtual DLL」という機能が用意された。
レガシータイプのAPIが呼び出された場合、Virtual DLLによってMinWin APIに変換されて、Windows 7カーネルに引き渡される。Virtual DLLは、レガシーAPIと新しいMinWin APIを照合するためのスキーマー(照合用データベースのようなもの)をブート時に読み込んで、各プロセスにマッピングしている。これらの仕組みにより、APIの実装と内部的なアーキテクチャーを分離しているわけだ。
![]() |
![]() | |
レガシーAPIとの互換性を保つために「Virtual DLL」を用意 | Virtual DLLをMinWinの「Logical DLL」にマッピングするには、中間に変換リスト(キーマー)を持つ「ApiSetSchema.dll」が介在している |
このような機能を用意することで、Windows 7ではカーネルを全面的に書き換えても、Vistaと同じ動作が保証されている。さらにWindows 7の次バージョン「Windows 8」(仮称)では、Virtual DLLの機能をより強化して、カーネル自体は64bit化され、Virtual DLLでレガシーの32bit DLLをサポートするようになるかもしれない。こうなると、OSの32bit/64bit版という区別もなくなり、32bit環境を完全にサポートした64bit OSになるだろう。
また、次世代Windowsで新しい機能が入ったとしても、Virtual DLLによってレガシーAPIにマッピングされるため、XPからVistaへの移行で起こったような、カーネルのバージョンアップで多くのアプリケーションが動かなくなることも少なくなると期待される。
この連載の記事
- 第50回 次期IE「Internet Explorer 10」プレビュー版が公開
- 第49回 RTM版も登場 Windows Home Server 2011の変更点とは
- 第48回 5秒で起動するSplashtop OSを自作パソコンで試す
- 第47回 ベンチで検証 Internet Explorer 9 RCの互換性と性能
- 第46回 正式版の直前となるInternet Explorer 9 RC版が登場
- 第45回 Silverlightをさらに進化させる「Silverlight 5」
- 第44回 「Windows on ARM」が持つ意味と課題は何か?
- 第43回 GPUを利用できる仮想化ソフト XenClient 実践編
- 第42回 複数のWindowsを使い分ける仮想化ソフト XenClient
- 第41回 3秒で起動しWindowsと共存するOS「Splashtop OS」
- この連載の一覧へ