Як режим сумісності у Windows працює внутрішньо?
Як режим сумісності у Windows працює внутрішньо?
Відповіді:
Режим сумісності досягається за допомогою так званих прокладків. У 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. Цей інструмент дає вам огляд програм із відомими проблемами, усіх доступних виправлень сумісності та режимів, а також виправлень, які застосовуються до кожної програми.
Я думаю, що відбувається багато різних речей. Відвертим прикладом є те, що програма може перевірити вашу версію Windows, але заплутатися у зворотному значенні нової операційної системи. Тому використання режиму сумісності дозволить Windows повідомити про неправильну версію. Реймонд Чен згадує ще деякі речі: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590
Моє знання режиму сумісності полягає в тому, що це призводить до того, що програма викликає кілька викликів системи Windows.
Одним із очевидних прикладів є функції GetVersionEx та GetVersion, які повідомляють про вказану версію Windows замість реальної.
Шляхи до старого стилю також автоматично переводяться, коли програма в режимі сумісності посилається на файл у відомих системних папках. Наприклад C:\Documents and Settings
, перекладається C:\Users\<user>\Documents
при запуску в Windows 7 програми в режимі сумісності XP.
Ця стаття робить хорошу роботу, пояснюючи це.
http://arstechnica.com/information-technology/2010/01/windows-xp-mode/
Однак у Windows 7 Redmond запропонував вирішити проблему: Режим Windows XP. У режимі Windows XP використовується технологія віртуалізації, щоб програми, що працюють на віртуалізованій копії Windows XP, відображалися в меню «Пуск Windows 7» та на робочому столі Windows 7.