Развертывание –> Совместимость приложений

Разрешение проблем совместимости приложений в Windows 7 с помощью Application Compatibility Toolkit

В предыдущих частях цикла, посвященного совместимости приложений для ИТ-специалистов, мы познакомились с основными причинами несовместимости приложений в Windows 7 и обсудили, как изменения на уровне ядра операционной системы могут повлиять на работоспособность приложений, рассмотрели инструменты и способы разрешения проблем совместимости приложений с операционной системой Windows 7 и познакомились с механизмом Program Compatibility Assistant, который используется пользователями для решения основных проблем несовместимости приложений.

На этот раз мы познакомимся с основами использования набора инструментов Application Compatibility Toolkit, предназначенного для ИТ-специалистов,  Загрузить данный набор инструментом можно бесплатно с сайта Microsoft по адресу https://www.microsoft.com/downloads/en/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&displaylang=en. На момент подготовки данного материала была доступна версия Application Compatibility Toolkit 5.6 от 25.08.2010.

Application Compatibility Toolkit. Состав и назначение компонентов

Application Compatibility Toolkit – это набор инструментов для ИТ-специалистов, который содержит средства для

  • Анализа портфеля приложений
  • Проверки возможных последствий перехода на новую версию или установки пакета обновлений
  • Централизованного управления настройками и исправлениями
  • Организации информации
  • Приоритизации походов к обеспечению совместимости
  • Обмена информацией о совместимости

Для задач, связанных с решением проблем совместимости, используются две утилиты, входящие в состав Application Compatibility Toolkit – Standard User Analyzer и Compatibility Administrator.

Утилита Standard User Analyzer служит для нахождения потенциальных несовместимостей приложений с подсистемой User Account Control – она может предсказать поведение приложений при работе под стандартной учетной записью. Утилита Compatibility Administrator используется специалистами для применения системных «заплатки» для исправления несовместимых приложений. Помимо этого, с помощью утилиты Compatibility Administrator можно получить полный список доступных системных «заплаток», список приложений, для которых в системной базе данных уже описаны необходимые для их полноценной работы в новых версиях операционной системы исправления, список  «мягких» и «жестких» блокировок, которые мы обсудили в предыдущей части данного цикла и список приложений, установленных на компьютере, к которым применены системные «заплатки».  

В основе работы механизма системных «заплаток» и блокировок лежит специальный компонент операционной системы, известный под названием «инфраструктура обеспечения совместимости приложений (application compatibility infrastructure)».

Инфраструктура обеспечения совместимости приложений

Инфраструктура обеспечения совместимости приложений – это специальный компонент операционной системы,  Данная инфраструктура реализована в виде набора динамически загружаемых библиотек (основная функциональность реализована в библиотеке shimeng.dll – Shim Engine и apphelp.dll – Application Compatibility Interface, Application Compatibility Client Library), а также на уровне загрузчика ntdll.dll, ряда ключей реестра и системной базы данных. Когда на той или иное приложение накладываются соответствующие "системные заплатки", это отображается в соответствующих записях реестра и служит индикатором для загрузчика на то, что при запуске данного приложения также необходимо запустить механизм Shim Engine, выбрать указанные для приложения "системные заплатки" из системной базы данных sysmain.sdb и применить их к приложению. "Системные заплатки" выполняют роль перехватчиков вызовов системных функций, реализованы на основе механизма замещения элементов Import Address Table (IAT) для загруженного в память исполняемого файла и позволяют обеспечить приложению максимально комфортную среду для выполнения. Т.о. «системные заплатки» применяются к приложениям на лету и не изменяют бинарных компонентов приложения, хранящихся на диске.

Системная база данных (в которой располагаются данные о всех системных заплатках, доступных для конкретной версии операционной системы, а также о дополнительных заплатках, созданных для конкретных приложений) располагается в каталоге %systemroot%\AppPath, здесь же находятся ключевые загружаемые библиотеки (dll-файлы с префиксом "Ac"), которые содержат код функций, поведение которых должно отличаться от стандартного. Системные "заплатки" находятся в библиотеках acgenral.dll и aclayers.dll, "заплатки" для конкретных приложений – в библиотеке acspecfic.dll. Другие группы "системных заплаток" – это флаги для LUA и механизмов установки приложений, а также "системные заплатки", которые накладываются на образ исполняемого файла в памяти и используются в тех случаях, когда невозможно решить проблемы совместимости простой заменой вызовов системных функций.

Необходимость применения «системной заплатки» определяется при создании каждого нового процесса. Подсистема Win32 отвечает за создание и удаление процессов и потоков. Одна из системных динамически-загружаемых библиотек – kernel32.dll – содержит функцию CreateProcess(), которая используется для создания новых процессов и к которой добавляется код для обеспечения совместимости приложений (внутри ядра Windows эта функциональность реализована на уровне внутренней системной функции Kernel32!CreateProcessInternalW()).

Системный процесс csrss.exe (сокращение от «client/server run-time subsystem», отвечает за консольные приложения, создание/удаление потоков и за 16-битную виртуальную среду MS-DOS) выполняет поиск наличия «заплаток» для загружаемого приложения. Загрузчик образов исполняемых файлов (ntdll.dll)  выполняет загрузку EXE-файлов в память и именно в этот момент вступают в действие «заплатки» для конкретного приложения.

Категории «системных заплаток»

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

  • Искажение версии операционной системы («xxxVersionLie»)
  • Уровни совместимости
  • Поддержка подсистемы UAC
  • Поддержка инсталляторов
  • Перенаправление операций с файлами/реестром
  • Поддержка механизма Windows Resource Protection
  • Поддержка Mandatory Integrity Control (MIC) и User Interface Privilege Isolation (UIPI)
  • Поддержка Session 0
  • Поддержка механизма Fault Tolerant Heap (FTH)
  • Использование устаревших компонентов
  • Внешний вид системы
  • Дополнительные «заплатки» и «заплатки», специфичные для конкретных приложений

В общей сложности, в системе существует более 360 «заплаток» и более 60 режимов совместимости – групп «заплаток» для эмуляции определенной версии операционной системы.  

Рис. Системные «заплатки»

Подробное описание «системных» заплаток, включая их назначение, параметры и сценарии применения можно найти в справочной системе, поставляемой вместе с Application Compatibility Toolkit, или на сайте TechNet. Также, вы можете познакомиться с основными системными «заплатками» в книге «Обеспечение совместимости приложений в Microsoft Windows Vista и Windows 7. Руководство для IT-специалистов», доступной для скачивания по адресу https://download.microsoft.com/documents/rus/windows/V7IT.pdf

Использование утилиты standard user analyzer

Как мы отметили выше, с помощью утилиты Standard User Analyzer можно проверить наличие потенциальных несовместимостей при работе приложения под стандартной учетной записью. Действие утилиты основано на перехвате вызовов ряда системных функций и распространяется на следующие функциональные группы:

  • Доступ к файловой системе (например, к папке Program Files)
  • Доступ к реестру (например, к ветки HKEY_Local_Machine)
  • Запись в INI-файлы (использование функции WriteProfile()) для записи в системные папки)
  • Проверка маркеров доступа
  • Использование функций, требующих повышенных привилегий (например, SeDebugPrivilege())
  • Использование глобального пространства имен
  • Использование защищенных объектов (например, событий, мьютексов, тайимеров, семафоров и т.п.)
  • Создание процессов (это –операция, требующая повышенных привилегий)

В процессе работы Standard User Analyzer может «порекомендовать» использование следующих системных «заплаток», которые позволят решить ряд проблем, взникающих при использовании подсистемы User Account Control:

  • ElevateCreateProcess
  • ForceAdminAccess
  • LocalMappedObject
  • VirtualizeDeleteFile
  • VirtualizeHKCRLite

Использование утилиты Standard User Analyzerначинается с указания полного имени файла тестируемого приложения и запуска его под управлением утилиты. 

Рис. Запуск приложения под управлением утилиты Standard User Analyzer

Далее необходимо выполнить тестовый сценарий, позволяющий максимально задействовать функциональность приложения для того, чтобы проверить все возможные варианты его работы. После выполнения сценария работа приложения завершается и утилита Standard User Analyzer обрабатывает протоколы, собранные в процессе выполнения приложения и отображает найденные ошибки и предупреждения на вкладках File, Registry, INI, Token, Privilege, Name Space, Other Objects и Process. При необходимости можно провести более детальный анализ каждой из обнаруженных ошибок, обратившись к данным, отображаемым на соответствующих вкладках.

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

Рис. Данные об ошибках на вкладке Files

Работа утилиты Standard User Analyzer не заканчивается простой констатацией факта наличия ошибок в работе тестируемого приложения – утилита предлагает пути исправления этих ошибок через применение системных «заплаток».   Команда Mitigation | Apply Mitigations позволяет получить список рекомендуемых к применению «заплаток» и, либо применить их прямо из утилиты, либо сохранить в виде MSI-файла для последующего развертывания.

Рис. Список заплаток, рекомендуемых для исправления тестируемого приложения

Более подробно про работу Standard User Analyzer см. на сайте TechNet по адресу https://technet.microsoft.com/ru-ru/library/cc765948(WS.10).aspx.

Для работы Standard User Analyzer вам потребуется специальная утилита – Application Verifier, которую можно бесплатно скачать по адресу https://www.microsoft.com/downloads/en/details.aspx?FamilyID=c4a25ab9-649d-4a1b-b4a7-c9d8b095df18&displaylang=en. Утилита  Application Verifier представляет собой расширение системного отладчика, позволяющее в реальном времени обнаруживать различные ошибки, включая и неверные обращения к системных функциям, перечисленным выше.  Также вам могут потребоваться системные отладочные символы, использование которых поможет в тех случаях, когда вы захотите получить детальную информацию об отдельных функциях, вызываемых тестируемым приложением. Отладочные символы можно бесплатно загрузить с сайта Microsoft по адресу https://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx.

 Если рекомендуемые утилитой Standard User Analyzer системные «заплатки» не смогли до конца решить проблемы с совместимостью приложений,  можно продолжить работу по исправлению несовместимого приложения на более низком уровне – самостоятельно применяя системные «заплатки» с помощью утилиты Compatibility Administrator.

Использование утилиты Compatibility Administrator

Утилита Compatibility Administrator служит для самостоятельного применения системных «заплаток» и должна использоваться в тех случаях, когда другими способами не удается обеспечить совместимость приложений. Данная утилита предоставляет доступ ко всем «заплаткам», имеющимся в системе и может заменить собой исправления, вносимые и на вкладке «Совместимость» - включение режимов совместимости, выбор разрешения и глубины цветности, указание на необходимость повышения привилегий для данного процесса и исправления, вносимые рассмотренной выше утилитой Standard User Analyzer.

Работа с утилитой Compatibility Administrator начинается с создания пользовательской базы данных – в левой панели мы выбираем элемент Custom Databases и в нем – базу данных, которая будет содержать исправления для приложения и, затем, будет включена в системную базу данных. После этого мы нажимаем правую кнопку «мыши» на имени созданной базы данных и выполняем команду Create New | Application Fix. В панели Create New Application Fix мы указываем названием исправляемого приложения, имя производителя и местоположение приложения в файловой системе.

Рис. Панель Create New Application Fix

На следующем экране мы может выбрать один из доступных режимов совместимости (наборов «заплаток» для эмуляции поведения одной из предыдущих версий операционной системы) или отдельные «заплатки», входящие в режимы совместимости.

Рис. Выбор режимов совместимости

Далее нам предлагается выбор из всех имеющихся в системе «заплаток» - здесь необходимо соблюдать осторожность, т.к. многие «заплатки» имеют параметры и указание неверных параметров или их пропуск могут привести к еще более нестабильной работе приложения.

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

Рис. Привязка к версии приложения

Нажатие кнопки «Finish» приводит к созданию записи в пользовательской базе данных. После этого следует нажать кнопку «Save» в верхней панели утилиты для сохранения базы данных на диске.  Теперь мы можем внести наши исправления в системную базу данных – это делается выбором названия созданной ранее базы данных и выполнением команду Install. Сохраненные на диске изменения на уровне пользовательской базы данных могут использоваться, например, для развертывания исправления на других компьютерах, где установлено данное приложение – для этого используется системная утилита sdbinst.

Для практического знакомства с различными системными «заплатками» рекомендуется выполнить упражнение, описанное в книге «Обеспечение совместимости приложений в Microsoft Windows Vista и Windows 7. Руководство для IT-специалистов», доступной для скачивания по адресу https://download.microsoft.com/documents/rus/windows/V7IT.pdf.

Оставайтесь с нами

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

Автор: Алексей Федоров

Продолжить обучение

Причины несовместимости приложений в Windows 7