каким образом Режим Совместимости в Windows работает внутренне?
Как работает "режим совместимости" в Windows?
4 ответа
режим совместимости достигается с помощью так называемых проставок. Есть хороший статья о TechNet описание того, как они работают.
файлы приложений Windows содержат таблицу импорта, которая сообщает загрузчику приложений, какие библиотеки DLL необходимы приложению и какие функции оно использует из них. Например, процесс может ссылаться на GetVersionEx
на kernel32.dll
. Когда программа должна работать в режиме совместимости, то оболочка совместимости помещается между приложением и оболочкой совместимости заменяет the GetVersionEx
функция, так что приложение не вызывает GetVersionEx
с kernel32.dll
но GetVersionEx
в Клин. Затем функции оболочки совместимости реализуют поведение предыдущих версий Windows. GetVersionEx
Это простой пример, каждая версия Windows возвращает свои собственные номера версий в GetVersionEx
, поэтому когда симулируют старые окна то GetVersionEx
функция теперь не возвращает номера версий Windows 7, но, например, номера версий Windows XP. Таким образом, приложение будет считать, что он работает на Windows XP.
там также были некоторые другие изменения от версии Windows к версии Windows. В старых версиях например, если программа загрузки DLL, путь поиска DLL также включены в текущий каталог. Это вопрос безопасности, поэтому новые версии Windows по умолчанию не выполнять поиск в текущем каталоге. С правильной прокладкой вы можете имитировать старое поведение.
с проставками просто прослойка между приложением и API-интерфейса Windows прокладку можно просто делать что приложение может сделать само. Оболочка не может быть использовано, например, для обхода UAC или доступ к защищенным файлам.
если вы хотите узнать больше, вот несколько ссылок, которые могут вас заинтересовать:
- использование оболочки CorrectFilePaths для перенаправления файлов в Windows Vista
- создание оболочки совместимости приложений С Совместимость Приложений Microsoft Инструментарий
- блог MSDN на внутренние основы Шимм
особенно Microsoft Application Compatibility Toolkit стоит посмотреть. Это средство дает обзор приложений с известными проблемами, всех доступных исправлений совместимости и режимов и какие исправления применяются к каждому приложению.
Я думаю, что происходит много разных вещей. Простой пример: программа может проверить вашу версию 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, однако, Редмонд предоставил решение проблемы: Windows XP Mode. В режиме Windows XP используется технология виртуализации, позволяющая приложениям, работающим в виртуализированной копии Windows XP, отображаться в меню "Пуск" Windows 7 и на рабочем столе Windows 7.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]