Общие сведения об исправлениях совместимости и их использовании

По мере развития в операционной системе Windows постоянно реализуется поддержка новых технологий и возможностей, поэтому реализации некоторых функций могут претерпевать изменения. Это может вызывать проблемы в приложениях, основанных на первоначальных вариантах реализации функций. Предотвратить проблемы совместимости можно с помощью инфраструктуры совместимости приложений Microsoft Windows (исправления совместимости), создавая исправления совместимости для определенных версий приложения.

Как работает инфраструктура исправлений совместимости

В инфраструктуре исправлений совместимости используется возможность связывания интерфейсов API для перенаправления приложения из кода Windows непосредственно к альтернативному коду, реализующему исправление совместимости.

Формат переносимого исполняемого (PE) файла в Windows включает заголовки, содержащие каталоги данных, которые обеспечивают косвенную связь между приложением и связанным файлом. Вызовы интерфейса API, направленные на внешние двоичные файлы, осуществляются через адресную таблицу импорта (IAT), которая, в свою очередь, напрямую вызывает операционную систему Windows, как показано на рисунке ниже.

ACT: вызов операционной системы приложением через таблицу адресов импорта

При этом адрес соответствующей функции Windows в IAT изменяется так, чтобы указывать на код исправления совместимости (см. рисунок ниже).

ACT: перенаправление приложения с исправлением совместимостиПримечание  

Для статически подключаемых библиотек DLL перенаправление кода происходит при загрузке приложения. Вы также можете исправлять динамически подключаемые библиотеки DLL через интерфейс API GetProcAddress.

 

Структурные особенности исправлений совместимости

При построении стратегии применения исправлений к приложениям следует иметь в виду некоторые важные моменты, обусловленные определенными характеристиками инфраструктуры исправлений совместимости.

  • Исправление совместимости не является частью ОС Windows (см. предыдущий рисунок). Следовательно, к исправлениям совместимости применяются те же ограничения безопасности, что и к коду приложения, поэтому с помощью исправлений совместимости нельзя обходить какие-либо механизмы обеспечения безопасности операционной системы. Таким образом, исправления совместимости не повышают риск проявления угроз безопасности, и для применения исправлений совместимости не приходится снижать уровень параметров безопасности.

  • Инфраструктура исправления совместимости перед вызовом операционной системы вставляет в приложение дополнительный код. Это означает, что любое исправление, которое может быть реализовано посредством исправления совместимости, также можно реализовать, изменив код приложения.

  • Исправления совместимости выполняются в виде кода пользовательского режима внутри процесса приложения пользовательского режима. Это означает, что вы не можете с помощью исправлений совместимости устранять проблемы кода режима ядра. Например, с помощью исправления совместимости нельзя разрешать проблемы драйверов устройств.

    Примечание  

    Некоторые антивирусные программы, брандмауэры и антишпионское ПО также работают в режиме ядра.

     

Когда следует применять исправление совместимости

Решение о применении исправления совместимости для устранения проблем совместимости может быть связано не только с техническими трудностями. Приведенные ниже сценарии отражают другие причины использования исправлений совместимости.

Сценарий 1

В приложении, более не поддерживаемом поставщиком, есть проблема совместимости.

Вы можете запускать приложения, поддержка которых больше не предоставляется поставщиком, аналогично тому, как это делается во многих компаниях. В этом случае вы не можете обратиться к поставщику для исправления приложения и не имеете возможности самостоятельно изменить его исходный код. Однако использование исправления совместимости, возможно, приведет к разрешению проблемы совместимости.

Сценарий 2

В созданном сотрудниками компании приложении есть проблема совместимости.

В этом случае рекомендуется внести исправления в код приложения, чтобы устранить проблему, однако это не всегда возможно. Сотрудники компании могут не успеть устранить все проблемы перед развертыванием новой операционной системы. Вместо этого они могут предпочесть применение исправления совместимости везде, где это возможно. Тогда изменять код им придется только при разрешении тех проблем, которые нельзя устранить посредством исправления совместимости. Используя этот метод, сотрудники организации смогут изменить код приложения, насколько позволяет время, не задерживая развертывание новой операционной системы в вашей среде.

Сценарий 3

В приложении, для которого в ближайшем времени будет выпущена совместимая версия приложения (или в приложении, не являющимся критически важным для организации, независимо от версии), есть проблема совместимости.

В случае если приложение не представляет высокой важности для организации или если для приложения в ближайшее время будет выпущена новая совместимая версия, можно использовать исправление совместимости в качестве временного решения. Это означает, что вы сможете продолжить использование приложения, не откладывая развертывание новой операционной системы и запланировав обновление конфигурации сразу после выпуска новой версии приложения.

К какой версии приложения следует применить исправление совместимости

Вы можете применить исправление совместимости к определенной версии приложения либо по принципу "вплоть до или включая", либо выбрав конкретную версию приложения. Таким образом исправление совместимости не будет по умолчанию применено к следующей версии приложения. Обратите внимание, что при этом вы сможете продолжать использовать приложение, а у поставщика будет возможность исправить его.

Поддержка исправлений совместимости

Исправления совместимости поставляются как часть операционной системы Windows и обновляются через Центр обновления Windows. Следовательно, для них обеспечивается такой же уровень поддержки, как и для самой ОС Windows.

Вы можете применять исправления совместимости к любому из ваших приложений. Однако Майкрософт не предоставляет средства, позволяющие использовать инфраструктуру исправлений совместимости для создания собственных исправлений.

Связанные разделы

Управление исправлениями проблем совместимости приложений и пользовательскими базами данных исправлений