Windowsの「互換モード」はどのように動作しますか?

compatibility windows

Windows の 互換性モード は内部的にどのように機能していますか?

comp mode

  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 を回避したり、保護されたファイルにアクセスしたりするために使用することはできません

もっと知りたい方は、以下のリンクをクリックしてみてください

特に 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システムコールを引き起こすということです

わかりやすい例としては、GetVersionExGetVersionなどの関数がありますが、これは指定されたWindowsのバージョンを実際のバージョンではなく報告します

互換モードのプログラムが、よく知られたシステムフォルダ内のファイルを参照している場合、旧式のファイルパスも自動的に変換されます。例えば、Windows 7でXP互換モードのプログラムを実行している場合、C:\Documents and SettingsC:\Users\<user>\Documentsに変換されます

4  harrymc  2013-10-21


この記事では、それをうまく説明しています

Windows 7’s XP Mode: what it is, how it works, who it’s for
Ars takes you inside one of Windows 7's most talked-about and misunderstood …

しかし、Windows 7では、Redmondはこの問題を解決するためのソリューションを提供しています。Windows XPモードでは、仮想化技術を使用して、仮想化されたWindows XP上で動作するアプリケーションをWindows 7のスタートメニューやデスクトップに表示させることができます

-5  whoacowboy  2012-12-31


タイトルとURLをコピーしました