Как работает «Режим совместимости» в Windows?

Ответы:

31

Режим совместимости достигается с помощью так называемых прокладок. На TechNet есть хорошая статья, описывающая, как они работают.

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

Также были некоторые другие изменения от версии Windows до версии Windows. Например, в более старых версиях, если программа загружала DLL, путь поиска для DLL также включал текущий каталог. Это проблема безопасности, поэтому более новые версии Windows по умолчанию не выполняют поиск в текущем каталоге. С помощью соответствующей прокладки вы можете смоделировать старое поведение.

Поскольку прокладки - это всего лишь слой между приложением и Windows API, оболочка может делать то же, что и приложение. Шим не может использоваться, например, для обхода UAC или доступа к защищенным файлам.

Если вы хотите узнать больше, вот несколько ссылок, которые могут вас заинтересовать:

Особенно стоит обратить внимание на Microsoft Application Compatibility Toolkit. Этот инструмент дает обзор приложений с известными проблемами, всех доступных исправлений и режимов совместимости, а также того, какие исправления применяются к каждому приложению.

Вернер Хенце
источник
1
Вы успешно удовлетворили мое любопытство конкретными примерами. Спасибо!
Кале Muscarella
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.

harrymc
источник
-5

Эта статья хорошо объясняет это.

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

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

whoacowboy
источник
4
Режим Windows XP! = Режим совместимости
Кевин Марк