Як працює "Режим сумісності" в Windows?


Відповіді:


31

Режим сумісності досягається за допомогою так званих прокладків. У TechNet є хороша стаття, в якій описано, як вони працюють.

Файли програм Windows містять таблицю імпорту, яка повідомляє завантажувачу програми, які DLL потрібні додатку та які функції він використовує. Процес, наприклад, може бути посиланням GetVersionExна kernel32.dll. Коли програма буде працювати в режимі сумісності, то прокладка ставиться між додатком і регулювальним замінює GetVersionExфункцію, так що програма не викликає GetVersionExз kernel32.dllале GetVersionExв регулювальної шайби. Потім заштриховані функції реалізують поведінку попередніх версій Windows. GetVersionExце простий зразок, кожна версія Windows повертає свої власні номери версій GetVersionEx, тому коли підробляють стару WindowsGetVersionExТепер функція не повертає номери версій Windows 7, але, наприклад, номери версій Windows XP. Тож програма вважатиме, що вона працює на Windows XP.

Були також деякі інші зміни від версії Windows до версії Windows. Наприклад, у старих версіях, якщо програма завантажила DLL, шлях пошуку для DLL також включав поточний каталог. Це проблема безпеки, тому новіші версії Windows за замовчуванням не шукають у поточному каталозі. При правильній шиммі можна змоделювати стару поведінку.

Оскільки прокладки - це лише шар між додатком та API Windows, shim може просто робити те, що може зробити сам додаток. Прокладку не можна використовувати, наприклад, для обходу UAC або доступу до захищених файлів.

Якщо ви хочете дізнатися більше, ось кілька посилань, які вам можуть бути цікавими:

Особливо варто переглянути інструментарій сумісності програм Microsoft. Цей інструмент дає вам огляд програм із відомими проблемами, усіх доступних виправлень сумісності та режимів, а також виправлень, які застосовуються до кожної програми.


1
Ви успішно задовольнили мою цікавість конкретними прикладами. Дякую!
Кале Мускарела

6

Я думаю, що відбувається багато різних речей. Відвертим прикладом є те, що програма може перевірити вашу версію Windows, але заплутатися у зворотному значенні нової операційної системи. Тому використання режиму сумісності дозволить Windows повідомити про неправильну версію. Реймонд Чен згадує ще деякі речі: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590


4

Моє знання режиму сумісності полягає в тому, що це призводить до того, що програма викликає кілька викликів системи Windows.

Одним із очевидних прикладів є функції GetVersionEx та GetVersion, які повідомляють про вказану версію Windows замість реальної.

Шляхи до старого стилю також автоматично переводяться, коли програма в режимі сумісності посилається на файл у відомих системних папках. Наприклад C:\Documents and Settings, перекладається C:\Users\<user>\Documents при запуску в Windows 7 програми в режимі сумісності XP.


-5

Ця стаття робить хорошу роботу, пояснюючи це.

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

Однак у Windows 7 Redmond запропонував вирішити проблему: Режим Windows XP. У режимі Windows XP використовується технологія віртуалізації, щоб програми, що працюють на віртуалізованій копії Windows XP, відображалися в меню «Пуск Windows 7» та на робочому столі Windows 7.


4
Режим Windows XP! = Режим сумісності
Кевін Марк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.