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


回答:


31

互換性モードは、いわゆるシムを使用して実現されます。TechNetには、これらの仕組みを説明した優れた記事があります。

Windowsアプリケーションファイルには、アプリケーションローダーに、アプリケーションが必要とするDLLと、そこから使用する機能を伝えるインポートテーブルが含まれています。例えば、参照のためのプロセスかもしれないGetVersionExにおけるkernel32.dll。プログラムは互換モードで実行するものとすると、その後、シムは、アプリケーションとシム置き換えの間に挟まれているGetVersionExアプリケーションが呼び出すしないように、機能GetVersionExからkernel32.dllしかし、GetVersionExシムに。シムされた関数は、以前のWindowsバージョンの動作を実装します。GetVersionExは簡単なサンプルです。各Windowsバージョンはで独自のバージョン番号を返すGetVersionExため、古いWindowsを偽装する場合はGetVersionEx関数はWindows 7バージョン番号ではなく、たとえばWindows XPバージョン番号を返すようになりました。そのため、アプリケーションはWindows XPで実行されていると見なします。

WindowsバージョンからWindowsバージョンへの他の変更もいくつかありました。たとえば、以前のバージョンでは、プログラムがDLLをロードした場合、DLLの検索パスには現在のディレクトリも含まれていました。これはセキュリティの問題であるため、Windowsの新しいバージョンはデフォルトで現在のディレクトリを検索しません。適切なシムを使用すると、古い動作をシミュレートできます。

shimはアプリケーションとWindows APIの間の単なるレイヤーであるため、shimはアプリケーションが実行できることを実行できます。シムを使用して、UACを回避したり、保護されたファイルにアクセスしたりすることはできません。

詳細を知りたい場合は、次のリンクをお勧めします。

特に、Microsoft Application Compatibility Toolkitは一見の価値があります。このツールは、既知の問題、利用可能なすべての互換性修正プログラムとモード、および各アプリケーションに適用される修正プログラムを含むアプリケーションの概要を提供します。


1
具体的な例で私の好奇心を満足させることができました。ありがとうございました!
ケールムスカレラ

6

いろいろなことが起こると思います。簡単な例は、プログラムがWindowsのバージョンをチェックするかもしれませんが、新しいオペレーティングシステムの戻り値によって混乱することです。したがって、互換モードを使用すると、Windowsに間違ったバージョンを報告するように指示されます。レイモンド・チェンはさらにいくつかのことを言及しています:http : //blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590


4

互換モードの私の知識は、それがいくつかのWindowsシステムコールをプログラムに嘘をつくということです。

1つの明らかな例は、実際のバージョンではなく、指定されたWindowsバージョンを報告する関数GetVersionExおよびGetVersionです。

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


-5

この記事はそれを説明するのに良い仕事をしています。

http://arstechnica.com/information-technology/2010/01/windows-xp-mode/

ただし、Windows 7では、レドモンドはこの問題の解決策としてWindows XP Modeを提供しています。Windows XP Modeは仮想化テクノロジーを使用して、Windows XPの仮想化されたコピーで実行されているアプリケーションをWindows 7の[スタート]メニューとWindows 7デスクトップに表示できるようにします。


4
Windows XPモード!=互換モード
ケビンマーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.