Создание приложений, корректно работающих под Windows XP, Windows Server 2003 и Windows Vista. Уроки чистописания

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

Установка приложения

Корректное выполнение приложения

Корректное использование ресурсов операционной системы

Корректная работа с сервисами и другими компонентами операционной системы

Файлы, защищенные Windows File Protection

Использование драйверов

Подготовка к выходу Windows Vista

 

Написание приложений, которые работают под управлением текущего поколения операционных систем компании Microsoft — Windows XP и Windows Server 2003, а также будут корректно работать под новой версией ОС — Microsoft Windows Vista, является весьма сложной задачей и требует отдельной подготовки. Однако приводимые ниже рекомендации помогут вам не только повысить качество создаваемых приложений, но и дадут реальную возможность успешно пройти тестирование — будь то тесты группы Platform Test для получения партнерской компетенции (http://www.microsoft.com/rus/partner/isv/testing/) или тесты для получения сертификации Certified For и Designed For.

К корректно написанному приложению предъявляются следующие обязательные требования:

  • приложение должно устанавливаться с помощью стандартных средств и не требовать перезагрузки после установки. Программа установки должна поддерживать режим All Users;
  • приложение должно выполняться под управлением операционной системы без сбоев, работать в режиме Fast User Switching, а также поддерживать режим Limited User;
  • приложение должно корректно использовать ресурсы операционной системы;
  • приложение не должно влиять на работу других сервисов — ни при установке, ни в режиме эксплуатации, ни при удалении;
  • приложение не должно изменять файлы, находящиеся под защитой Windows File Protection;
  • приложение должно использовать только драйверы, подписанные электронной подписью. Драйверы, выполняющиеся на уровне Kernel, должны пройти специальный тест — Windows Driver Verification.

Ниже мы рассмотрим эти требования более подробно, объясним их важность, приведем рекомендации по их соблюдению и расскажем о дополнительных ресурсах, доступных на сайте Microsoft.

Установка приложения

При установке приложения в Windows XP и последующих версиях операционной системы Microsoft перезагрузка компьютера требуется только в исключительных случаях. Приложения не должны требовать перезагрузки во время или после установки, за исключением перезагрузки после установки пакета обновления Windows (Windows Service Pack). Не требуется перезагрузка после установки таких расширений операционной системы, как Graphical Identification and Authentication (GINA.DLL), и драйверов-фильтров.

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

В процесс установки могут быть включены проверка версии операционной системы, на которую устанавливается приложение, и, при необходимости, запрос на установку (автоматическая установка) требуемого пакета обновления Windows. Для проверки версии ОС рекомендуется использовать функцию Windows API GetVersionEx(), а для получения более подробной информации о компонентах операционной системы — VerifyVersionInfo() (данная функция доступна начиная с версии Windows 2000). Для приложений, написанных на управляемом коде, рекомендуется применять класс System.OperatingSystem. Более подробно об этом классе см. http://msdn2.microsoft.com/en-us/library/system.operatingsystem.aspx.

По умолчанию приложение должно устанавливаться в папку Program Files. В целях определения местоположения данной папки следует использовать функцию SHGetFolderPath Windows API или свойство ProgramFilesFolder Windows Installer, а в случае приложений на управляемом коде рекомендуется метод GetFolderPath() класса System.Environment.

Информация о Windows Installer является частью Platform SDK и доступна по адресу: http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp.

Корректное выполнение приложения

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

Типичными проблемами, приводящими к нарушению функционирования приложений, являются: попытка обращения к несуществующим файловым ресурсам (приложение не должно быть создано в предположении, что операционная система установлена только на диске C:, следует использовать только системные функции для обращения к файловым ресурсам); обращение к файлам или принтерам с длинными именами (при тестировании приложения необходимо проверить его функционирование с различными комбинациями имен файлов и принтеров); обращение к устройствам, для которых не установлен драйвер (в этой ситуации приложение должно корректно завершить работу и затребовать установку необходимого драйвера); попытка работы в режиме 256 цветов (приложение должно автоматически переключаться в этот режим), а также ряд других, включая, например, корректную работу на многопроцессорных компьютерах.

Приложение должно использовать системные функции для определения местоположения стандартных папок типа My Documents. С этой целью используется функция SHGetFolderPath(). Для приложений на управляемом коде рекомендуется применять метод GetFolderPath() класса System.Environment.

Дополнительная информация представлена по адресу: http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shgetfolderpath.asp и http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemEnvironmentClassTopic.asp.

Поддержка режима Limited User включает корректную работу приложения без привилегий администратора со стороны пользователя. Указанный режим позволяет пользователям сохранять данные только в разделах реестра HKEY_CURRENT_USER, в пользовательских каталогах (параметр CSIDL_PROFILE для перечисленных в предыдущем параграфе функций) или в папках, созданных ими в корневом каталоге системного диска. Остальные файловые ресурсы и ветви реестра доступны пользователям в режиме «Только чтение».

Режим Fast User Switching, доступный в Windows XP, позволяет быстро переключать компьютер на другого пользователя без остановки работы приложений. Этот режим включается из панели управления (Control Panel => User Accounts => Change the way users log on or off). Приложение, поддерживающее Fast User Switching, не должно терять данные или завершаться с ошибкой при переключении пользователей. В целях определения режима работы приложений (например, запущены ли другие экземпляры данного приложения) следует использовать функции Windows API FindWindow или FindWindowEx, которые позволяют найти главное окно приложения. Другим способом является применение семафоров или мьютексов — они создаются при запуске приложения и закрываются при завершении приложения. Приложения, запущенные от лица различных пользователей, используют разные области хранения локальных объектов, поэтому рекомендуется применять глобальные семафоры или мьютексы. Для того чтобы пользователь в другой сессии не смог запустить приложение, уже запущенное в какой-то другой сессии, семафор или мьютекс должен иметь имя с префиксом Global\. Это позволяет обнаруживать экземпляры приложений, запущенных в других пользовательских сессиях.

Дополнительные сведения о режиме можно получить в Microsoft Knowledge Base (http://support.microsoft.com/default.aspx?scid=kb;en-us;294855).

Корректное использование ресурсов операционной системы

Операционная система предоставляет в распоряжение приложений определенные ресурсы, которые должны корректно использоваться всеми приложениями. К таким ресурсам, в частности, относятся глобальная «куча» (heap), критические секции (critical section), ссылки (handles — хэндлеры). Требования к надлежащему применению таких системных ресурсов относятся в первую очередь к приложениям, создаваемым на неуправляемом коде; в случае использования .NET задачу корректного применения ресурсов берет на себя Common Language Runtime, в частности ее компонент Garbage Collector. Тем не менее рекомендации по использованию системных ресурсов будут полезны как тем, кто создает приложения на неуправляемом коде, так и тем, кто применяет .NET.

Глобальная «куча» используется для динамического выделения памяти приложениям. Неверное применение «кучи» может приводить к ошибкам безопасности и сбоям в работе приложений.

Возможные ошибки при использовании глобальной «кучи»:

  • выделение слишком малого объема памяти и запись за пределами области памяти (buffer overrun);
  • попытка использования памяти после ее освобождения;
  • повторное освобождение уже освобожденной памяти;
  • попытка освобождения невыделенной памяти;
  • использование неверных указателей (хэндлеров) на области памяти.

Критические секции — это механизм синхронизации, который гарантирует исключительный доступ к данным приложения в многопоточных средах.

Возможные ошибки при использовании критических секций:

  • попытка освобождения критической секции, не принадлежащей текущему потоку;
  • завершение потока, которому еще принадлежат неосвобожденные критические секции;
  • попытка использования критической секции до ее инициализации;
  • «утечка» критических секций — например неиспользование функции DeleteCriticalSection() по завершении применения критической секции;
  • попытка повторной инициализации секции.

Хэндлеры представляют собой своего рода указатели на запрошенные с помощью вызова соответствующих функций Windows API ресурсы типа файлов, событий, памяти и т.п.

Возможные ошибки при использовании хэндлеров:

  • попытка применения хэндлера после его закрытия;
  • использование неверного типа хэндлера;
  • применение «нулевого» или псевдохэндлера — например значения, возвращаемого функцией GetCurrentProcess().

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

Корректная работа с сервисами и другими компонентами операционной системы

Работа самого приложения или программы его установки не должна влиять на функционирование других сервисов и компонентов операционной системы. Под сервисами здесь понимаются компоненты ОС, управляемые Service Control Manager (SCM). В принципе, приложение имеет право приостанавливать или перезапускать только такие сервисы, которые являются частью данного приложения. Но сервисы, представляющие собой часть операционной системы или принадлежащие другим приложениям, не должны затрагиваться (перезапускаться, приостанавливаться) текущим приложением. Возможны два способа хостинга сервисов — внутри процесса (например, использование W3svc внутри worker-процесса) или вне процесса (SQL Server, Exchange и т.п.). Сервис считается недоступным, если он остановлен средствами SCM и не реагирует на три последовательных клиентских запроса или если обращение к сервису вызывает системную ошибку.

Информация о сервисах доступна на сайте MSDN по адресу: http://msdn.microsoft.com/library/en-us/dllproc/base/about_services.asp.

Файлы, защищенные Windows File Protection

Приложения должны устанавливаться без попытки изменить файлы, защищенные Windows File Protection (WFP). Для того чтобы избежать конфликтов с WFP, при установке любых файлов, не создаваемых самим приложением, следует вызвать системную функцию SfcIsFileProtected() и убедиться, что файл не защищен WFP; программа Windows Installer делает это автоматически. Файлы, защищенные WFP, — это компоненты операционной системы, находящиеся на установочном диске, а именно:

  • большинство файлов с расширениями SYS, DLL, EXE и OCX;
  • шрифты Micross.ttf, Tahoma.ttf, Tahomabd.ttf, Dosapp.fon, Fixedsys.fon, Modern.fon, Script.fon и Vgaoem.fon;
  • версии библиотеки Microsoft Foundation Classes (MFC) — набор динамически загружаемых библиотек, DLL, защищенных WFP и необходимых для функционирования ряда компонентов ОС.

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

Перезапись защищенных файлов ОС возможна только в следующих случаях:

  • при установке пакетов обновления для Windows с помощью программы Update.exe;
  • при установке исправлений с помощью программ Hotfix.exe и Update.exe;
  • при обновлении ОС с помощью программы Winnt32.exe;
  • при использовании службы Windows Update.

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

Поиск файла допустимой версии производится в следующем порядке:

  1. папка кэша (по умолчанию %systemroot%\system32\dllcache);
  2. путь к сетевому источнику установки, если он был использован для установки операционной системы;
  3. компакт-диск Windows, если он был использован для установки ОС.

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

В Microsoft Knowledge Base (http://support.microsoft.com/kb/) можно найти соответствующие статьи по данной теме: Registry Settings for Windows File Protection — № 222473 и Description of Windows XP and Windows Server 2003 System File Checker (Sfc.exe) — № 310747.

Кроме того, информация о механизме защиты файлов Windows находится по следующим адресам: http://msdn.microsoft.com/library/en-us/wfp/setup/windows_file_protection_start_page.asp и http://msdn.microsoft.com/library/en-us/msi/setup/windows_ file_protection_on_windows_2000_and_windows_ xp.asp.

Использование драйверов

Некорректно написанные драйверы, особенно те, которые выполняются в режиме kernel, могут негативно повлиять на стабильность работы как использующего их приложения, так и самой операционной системы. Поэтому драйверы, поставляемые в составе приложений, должны пройти специальную проверку. Для этого применяется специальная утилита — Windows Driver Verifier Manager (Verifier.exe), которую можно найти в каталоге \system32 на диске, где установлена операционная система. Дополнительную информацию об использовании данной утилиты можно получить на сайте Microsoft по адресу: http://www.microsoft.com/whdc/default.mspx.

Кроме того, драйверы должны пройти специальное тестирование с помощью утилиты Windows Hardware Compatibility Test (HCT) версии 10.0 или более поздней. Дополнительная информация доступна по адресу: http://www.microsoft.com/hwtest.

Ресурс WHDC содержит сведения об изменениях и расширениях в ядре операционной системы Windows Vista. Эта информация необходима и компаниям, занимающимся разработкой драйверов для различных устройств, и тем пользователям, которые интересуются вопросами функционирования операционных систем. На момент написания данной статьи выпущены следующие документы по этому вопросу: Architecture of the Windows Driver Foundation; Kernel Enhancements for Windows Vista and Windows Server Longhorn; Direct Application Launch from System Startup on Windows Vista; _OSC Method and PCI Express in Windows Vista; Impact of Session 0 Isolation on Services and Drivers in Windows Vista; Device Finish-Install Actions in Windows Vista.

Обращаем ваше внимание на новые библиотеки для создания драйверов: для режима kernel — Kernel-Mode Driver Framework, для режима user — User-Mode Driver Framework, а также на утилиты для установки драйверов — Driver Install Frameworks Tools.

Подготовка к выходу Windows Vista

Новая версия клиентской операционной системы Microsoft — Windows Vista — должна появиться во второй половине этого года. Ряд расширений и изменений, которые там появятся, имеют непосредственное отношение к теме данной статьи.

Предполагаемые изменения и расширения в Microsoft Windows Vista произойдут в следующих областях:

  • изменение номеров версий;
  • усиление безопасности и такие нововведения, как поддержка User Access Protection (UAP)/Limited User Account (LUA), изоляция сервисов и сервис Windows Resource Protection;
  • изменения в 64-битной версии Windows Vista;
  • реализации платформы для Firewall и Anti-Virus.

 

Проверка версии операционной системы

Как правило, приложениям не требуется проверять версию операционной системы за исключением тех случаев, когда приложение зависит от каких-либо компонентов платформы. Ошибочная логика проверки версии операционной системы может привести к тому, что приложения вообще не устанавливаются или отображается сообщение «unsupported OS». Для решения этих проблем можно либо изменить логику работы приложения — позволить ему работать с новой версий ОС, либо использовать version-lie shim (Compatibility Administer), либо разрешить режим OS compatibility.

 

Поддержка User Access Protection/LUA

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

  • не удается выполнить установку и удаление приложения;
  • при работе приложения появляется сообщение «Access denied» или «Admin privileges required»;
  • приложения не работают, не сохраняют настройки в реестре/файлах;
  • приложение завершается с ошибкой при смене прав пользователя.

При возникновении подобных проблем следует выбрать одно из указанных действий:

  • модифицировать приложение для корректной работы под UAP (см. выше рекомендации по поддержке этого режима);
  • сохранить данные приложения в рекомендованные области диска/реестра: диск — c:\users\AppData, реестр — \\HKCU\;
  • отключить UAP для Install/Uninstall;
  • изменить привилегии приложения — использовать опции Run Elevated и Run As Admin, предоставляемые операционной системой.

 

Сервис Windows Resource Protection

Как уже было сказано, сервис WRP срабатывает в тех случаях, когда приложения пытаются изменить защищенные файлы или реестр. Операционные системы по-разному реагируют на это: в Windows XP автоматически замещаются системные файлы, измененные приложениями, а в Windows Vista замена компонентов Windows (msvcrt*.DLL) вызывает проблемы совместимости приложений.

В результате программа установки, удаления приложения и само приложение неработоспособны, при записи или модификации появляется сообщение «Access denied» и в ряде случаев работа приложения завершается с соответствующей системной ошибкой. Последующие действия — либо игнорирование ошибки и продолжение работы приложения (этот способ предпочтительнее, но он требует реализации дополнительной логики для обработки соответствующего класса ошибок), либо модификация приложения для корректной работы с WRP (это может привести, в частности, к отказу от распространения компонентов Windows в составе приложения или к замене некоторой логики его работы).

 

Изоляция сервисов

В Windows Vista произойдет изоляция сервисов, работающих в сессии 0: приложения будут работать в других сессиях и таким образом сервисы получат защиту от возможных атак со стороны хакерских приложений. В версиях Windows Server 2003 и более ранних версиях Windows все сервисы работали в сессии 0 вместе с приложениями, что могло приводить к попыткам нарушения безопасности, поскольку сервисы, работающие на более высоком уровне привилегий, становились целью хакеров, пытавшихся изменить привилегии работы приложений. Из-за этого сервисы/приложения могли зависать в случае отображения пользовательского интерфейса при работе в сессии 0, а в Windows Vista это запрещено. К тому же существует вероятность зависания приложений при попытке создания объектов с глобальными именами в сессии 0.

Возможными способами решения этих проблем могут быть использование режима Session 0 shim (и тогда создание именованных объектов переправляется из сессии 0 в сессию приложения) либо уведомление пользователя при отображении UI в сессии 0. Более подробно об этом см. Impact of Session 0 Isolation on Services and Drivers in Windows Vista на сайте Microsoft по адресу: http://www.microsoft.com/whdc/system/vista/services.mspx.

 

64-битная версия Windows Vista

Эта версия Windows Vista аналогична 32-битной версии Windows Vista за исключением поддержки 16- и 32-битных приложений: 16-разрядные приложения не работают на 64-разрядной платформе Windows Vista, а 32-разрядные приложения, использующие 32-разрядные драйверы, не будут работать на 64-разрядной версии Windows Vista.

Для устранения указанных проблем рекомендуется преобразовать 16-разрядные приложения в 32-разрядные, а 32-разрядные драйверы — в 64-разрядные.

 

Платформа для Firewall/Anti-Virus

В предыдущих версиях ОС Windows не существовало ни единого программного интерфейса, ни внутренних структур данных для сетевого сканирования, firewall и антивирусных приложений. Изменения, планируемые в Windows Vista, особенно в плане повышения безопасности работы приложений, могут привести к неработоспособности соответствующего класса приложений (антивирусных, сетевых фильтров и т.п.). Возможными путями решения этой группы проблем могут быть использование новой платформы для создания соответствующих приложений (актуально для версий Windows Vista и следующих за ней) и партнерство с компаниями — производителями ПО для поддержки Windows Vista (например, CA eTrust v7.1 и других аналогичных продуктов, которые появятся в период предварительных версий Windows Vista Beta 2 или RTM).

 

Прочие изменения

Помимо вышерассмотренных изменений и дополнений, при проверке приложения на совместимость с ОС Microsoft Windows Vista следует иметь в виду и другие новации в данной операционной системе.

 

Shell/Explorer

В проводнике появились следующие особенности:

  • изменилась структура стандартных папок;
  • Desktop window manager — приложения, не обрабатывающие DWM, могут иметь проблемы с отображением (более подробно см. Desktop Composition Engine в http://msdn.microsoft.com/library/en-us/dnlong/html/introwpf.asp);
  • новые UI themes — приложения, не поддерживающие темы рабочего стола, могут иметь проблемы с отображением (см. описание функции SetThemeAppProperties() и Using Windows XP Visual Styles (http://msdn.microsoft.com/library/en-us/dnwxp/html/xptheming.asp);
  • Fast user switching — приложения, не поддерживающие работу нескольких пользователей или использование терминального сервера, могут не работать (см. выше описание поддержки Fast user switching).

 

Драйверы принтеров

В Microsoft Windows Vista планируется запретить использование драйверов уровня Kernel.

 

Недоступные/неподдерживаемые сервисы

В новой версии ОС ряд системных сервисов будет недоступен: некоторые из них будут заменены на новые, а остальные вообще прекратят свое существование (в частности, Front Page Server Extensions, Point-to-point (POP3) server, Services for Macintosh).

 

Справка

В Microsoft Windows Vista появится новый формат файлов справочной системы, использовать который рекомендуется в приложениях, рассчитанных на работу под управлением указанной версии операционной системы. Файлы справочной системы в форматах CHM и HLP будут поддерживаться только в режиме совместимости с предыдущими версиями ОС.

Желающие более подробно ознакомиться с возможностями, предоставляемыми Microsoft Windows Vista разработчикам, могут обратиться к циклу «Платформа Microsoft Windows Vista. Возможности для разработчиков», который публикуется в журнале начиная с № 1’2006.

***

Корректность написания приложений остается актуальной проблемой независимо от того, используете ли вы функции Windows API или создаете приложения на базе .NET Framework. Учет приведенных в данной статье рекомендаций, включение их в спецификации для разработчиков и тестовые планы помогут вам не только получить на выходе приложения, совместимые с текущими и будущими версиями операционных систем компании Microsoft, но и предоставить эти приложения для прохождения тестов — от Platform Test до тестов на получение логотипов Designed For и Certified For.

 

В начало В начало

КомпьютерПресс 2'2006

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует