Windows の 互換性モード は内部的にどのように機能していますか?
52 None 2010-04-22
互換性モードは、いわゆるシムを使って達成されます。TechNetの記事には、これらがどのように機能するかが説明されています
Windows アプリケーションファイルにはインポートテーブルが含まれており、アプリケーションが必要とする DLL とその DLL から使用する関数をアプリケーションローダーに伝えます。例えば、プロセスはkernel32.dll
の中でGetVersionEx
を参照するかもしれません。プログラムが互換性モードで実行される場合、アプリケーションの間にシムが置かれ、シムはGetVersionEx
関数を置き換えます。シム化された関数は、以前のWindowsバージョンの動作を実装します。GetVersionEx
は簡単なサンプルで、各WindowsのバージョンはGetVersionEx
で独自のバージョン番号を返します。これにより、アプリケーションはWindows XP上で動作していると思い込むことができます
他にも、Windows版からWindows版への変更点がいくつかあります。例えば古いバージョンでは、プログラムがDLLを読み込んだ場合、DLLの検索パスにはカレントディレクトリも含まれていました。これはセキュリティ上の問題なので、Windowsの新しいバージョンではデフォルトではカレントディレクトリを検索しません。適切なシムを使用すると、以前の動作をシミュレートすることができます
シムはアプリケーションと Windows API の間のレイヤーにすぎないので、シムはアプリケーションがそれ自身でできることを行うことができます。シムは、例えば UAC を回避したり、保護されたファイルにアクセスしたりするために使用することはできません
もっと知りたい方は、以下のリンクをクリックしてみてください
- Windows Vista で CorrectFilePaths シムを使用してファイルをリダイレクトする
- Microsoft Application Compatibility Toolkit でアプリケーション互換性シムを作成する
- シムの内部の基本に関するMSDNブログ
特に Microsoft Application Compatibility Toolkit は一見の価値があります。このツールは、既知の問題があるアプリケーションの概要、利用可能なすべての互換性修正とモード、そして各アプリケーションに適用されている修正を提供します
36 Werner Henze 2013-10-21
いろいろなことが起こると思います。分かりやすい例としては、プログラムがあなたのwindowsのバージョンをチェックしても、新しいOSの戻り値で混乱してしまうことがあります。そのため、互換性モードを使用すると、間違ったバージョンを報告するようにウィンドウズに伝えることになります。Raymond Chen はさらにいくつかのことに言及しています。http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590
6 akid 2010-04-22
互換モードについての私の知識は、それがプログラムに嘘をつくためにいくつかのWindowsシステムコールを引き起こすということです
わかりやすい例としては、GetVersionExやGetVersionなどの関数がありますが、これは指定されたWindowsのバージョンを実際のバージョンではなく報告します
互換モードのプログラムが、よく知られたシステムフォルダ内のファイルを参照している場合、旧式のファイルパスも自動的に変換されます。例えば、Windows 7でXP互換モードのプログラムを実行している場合、C:\Documents and Settings
はC:\Users\<user>\Documents
に変換されます
4 harrymc 2013-10-21
この記事では、それをうまく説明しています
しかし、Windows 7では、Redmondはこの問題を解決するためのソリューションを提供しています。Windows XPモードでは、仮想化技術を使用して、仮想化されたWindows XP上で動作するアプリケーションをWindows 7のスタートメニューやデスクトップに表示させることができます
-5 whoacowboy 2012-12-31