Поделиться через


Требования к разработке приложений Windows Vista для обеспечения совместимости управления учетными записями пользователей

 

Дженнифер Аллен

Обновлено в июне 2007 г.

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

Содержимое

Почему контроль учетных записей пользователей?
Windows Vista Обновления
Новые технологии для Windows Vista
Архитектура контроля учетных записей
Повлияет ли UAC на приложение?
Разработка приложений для Windows Vista
Развертывание и исправление приложений для обычных пользователей
Устранение распространенных проблем
Ссылки

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

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

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

  1. Многие приложения Windows требуют, чтобы пользователь, выполнивший вход, был администратором, но на самом деле не требует доступа на уровне администратора. Эти приложения выполняют различные проверки доступа администратора перед разрешением на запуск, в том числе:
    • проверка маркера доступа администратора.
    • Запросы доступа "Все" в защищенных системой расположениях.
    • Записывайте данные в защищенные расположения, такие как %ProgramFiles%, %WinDir% и HKLM\Software.
  2. Многие приложения Windows не разработаны с концепцией минимальных привилегий и не разделяют функциональные возможности пользователя и администратора на два отдельных процесса.
  3. Windows 2000 и Windows XP по умолчанию создают каждую новую учетную запись пользователя в качестве администратора; Поэтому ключевые компоненты Windows, такие как "Дата и время" и панели управления "Управление питанием", не работают для обычного пользователя
  4. Администраторы Windows 2000 и Windows XP должны создать две отдельные учетные записи пользователей: одну для административных задач и учетную запись обычного пользователя для выполнения повседневных задач. Поэтому пользователи должны выйти из своих стандартных учетных записей пользователей и снова войти в систему с правами администратора или использовать функцию запуска от имени для выполнения любых административных задач.

С помощью контроля учетных записей (UAC) корпорация Майкрософт предоставляет технологию для упрощения развертывания стандартных рабочих столов пользователей на предприятии и дома.

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

Команда UAC приняла совершенно другой подход к процессу создания маркера доступа в Windows Vista. Когда пользователь с правами администратора входит на компьютер Windows Vista, создаются два маркера доступа: отфильтрованный стандартный маркер доступа пользователя и полный маркер доступа администратора. Вместо запуска рабочего стола (Explorer.exe) с маркером доступа администратора используется маркер доступа обычного пользователя. Все дочерние процессы наследуются от этого первоначального запуска рабочего стола (процесс explorer.exe), что помогает ограничить уязвимую зону Windows Vistas. По умолчанию все пользователи, включая администраторов, входят на компьютер Windows Vista в качестве обычных пользователей.

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

Когда администратор пытается выполнить административную задачу, например установку приложения, UAC предлагает пользователю утвердить действие. Когда пользователь утверждает действие, задача запускается с полным маркером доступа администратора. Это поведение запроса администратора по умолчанию, и оно настраивается в оснастке локального диспетчера политик безопасности (secpol.msc) и с помощью групповая политика (gpedit.msc).

Примечание Учетная запись администратора на компьютере с Windows Vista с включенным UAC также называется учетной записью администратора в режиме утверждения Администратор. Администратор режим утверждения определяет пользовательский интерфейс по умолчанию для администраторов.

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

Стандартные пользователи также имеют возможность повысить уровень потока и выполнять административные задачи с помощью инфраструктуры контроля учетных записей. Когда обычный пользователь пытается выполнить административную задачу, UAC предлагает пользователю ввести допустимые учетные данные для учетной записи администратора. Это стандартное поведение запроса пользователя, настраиваемое в оснастке локального диспетчера политик безопасности (secpol.msc) и с помощью групповая политика (gpedit.msc).

Windows Vista Обновления

Следующие обновления отражают совокупные основные изменения в функциональных возможностях Windows Vista.

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

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

Все последующие учетные записи пользователей создаются как обычные пользователи

Как учетные записи стандартных пользователей, так и учетные записи администраторов могут воспользоваться преимуществами усиленной безопасности UAC. При новых установках по умолчанию первой созданной учетной записью пользователя является учетная запись локального администратора в режиме утверждения Администратор (включен контроль учетных записей). Затем все последующие учетные записи создаются как обычные пользователи.

Запросы на повышение прав отображаются на защищенном рабочем столе по умолчанию

Запросы на согласие и учетные данные отображаются на защищенном рабочем столе по умолчанию в Windows Vista.

Запросы на повышение прав для фоновых приложений свернуты на панели задач

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

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

Приложения, которые запускаются при входе пользователя и требуют повышения прав, теперь блокируются в пути входа. Без блокировки приложений, запрашивающих повышение прав в пути входа пользователя, обычным пользователям и администраторам придется отвечать на диалоговое окно Контроль учетных записей при каждом входе. Windows Vista уведомляет пользователя, если приложение заблокировано, помещая значок в область задач. Затем пользователь может щелкнуть этот значок правой кнопкой мыши, чтобы запустить приложения, которым было запрещено запрашивать повышение прав, когда пользователь вошел в систему. Пользователь может управлять тем, какие запускаемые приложения отключены или удалены из этого списка, дважды щелкнув значок панели.

Встроенная учетная запись администратора отключена по умолчанию при новых установках

Встроенная учетная запись администратора отключена по умолчанию в Windows Vista. Если windows Vista во время обновления с Windows XP определяет, что только встроенная учетная запись администратора является активной локальной учетной записью, Windows Vista оставляет учетную запись включенной и переводит ее в режим Администратор утверждения. Встроенная учетная запись администратора по умолчанию не может войти на компьютер в безопасном режиме. Дополнительные сведения см. в следующих разделах. Встроенная учетная запись администратора создается во время установки с именем пользователя Administrator.

Не присоединено к домену

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

быть присоединено к домену;

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

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

Примечание После разъединения компьютера он отменить изменения обратно к описанному ранее поведению, не присоединенному к домену.

Управление учетными записями пользователей и удаленные сценарии

Когда администратор удаленно входит на компьютер Windows Vista, например через удаленный рабочий стол, пользователь по умолчанию входит в систему как стандартный пользователь. Удаленное администрирование было изменено так, чтобы он был строгим для провода. Это помогает предотвратить выполнение "замыкания на себя" приложения вредоносными программами, если пользователь работает с административным потенциалом.

учетные записи локальных пользователей

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

Учетные записи пользователей домена

Когда пользователь с учетной записью пользователя домена удаленно входит на компьютер Windows Vista, где пользователь является членом группы администраторов, пользователь домена будет запускаться с полным маркером доступа администратора на удаленном компьютере, и контроль учетных записей не будет действовать.

Новые параметры списка контроль доступа по умолчанию (ACL)

Списки управления доступом в некоторых каталогах Windows были изменены, чтобы обеспечить общий доступ к данным и совместную работу в каталогах данных и за пределами защищенных каталогов пользователей. Защищенный каталог пользователя — это его профиль пользователя (например, C:\Users\Denise\Pictures\), а пример каталога данных — за пределами раздела операционной системы на диске с данными (например, D:\Pictures\). Так как корневой каталог C в этом случае защищен более строгими списками управления доступом, пользователи не могли использовать каталоги данных в ранних версиях Windows Vista.

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

Ниже приведены параметры ACL по умолчанию для %systemroot% и диска данных в Windows XP.

Windows XP %systemroot% и параметры ACL диска данных

Пользователь или группа Запись контроль доступа
BUILTIN\Administrators Полный доступ
NT AUTHORITY\SYSTEM Полный доступ
CREATOR OWNER Полный доступ
BUILTIN\Users Read

Специальный доступ: FILE_APPEND_DATA

Специальный доступ: FILE_WRITE_DATA

Все Read

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

Параметры ACL диска данных Windows Vista

Пользователь или группа Запись контроль доступа
BUILTIN\Administrators Полный доступ
NT AUTHORITY\SYSTEM Полный доступ
NT AUTHORITY\Authenticated Users Изменить
BUILTIN\Users Чтение и выполнение

Универсальное чтение, универсальное выполнение

В следующей таблице подробно описаны новые параметры ACL операционной системы Windows Vista (%systemroot%).

Параметры ACL windows Vista %systemroot%

Пользователь или группа Запись контроль доступа
BUILTIN\Administrators Полный доступ
NT AUTHORITY\SYSTEM Полный доступ
BUILTIN\Users Чтение и выполнение
NT AUTHORITY\Authenticated Users Изменить

Добавление данных.

Обязательная метка\Высокий обязательный уровень Нет записи

Новые параметры безопасности контроля учетных записей и изменения имени параметров безопасности

Новые параметры безопасности и обновления имен параметров безопасности подробно описаны в разделе Ссылки этого документа.

Новые технологии для Windows Vista

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

Служба установщика ActiveX

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

Обнаружение установщика

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

Важно При разработке новых программ установки, как и при разработке программ для Windows Vista, обязательно внедряйте манифест приложения с соответствующим элементом requestedExecutionLevel (см. раздел Шаг шесть. Создание и внедрение манифеста приложения с помощью приложения). Если requestedExecutionLevel присутствует во встроенном манифесте приложения, он переопределяет обнаружение установщика.

Обнаружение установщика применяется только к:

  • 32-разрядные исполняемые файлы
  • Приложения без requestedExecutionLevel
  • Интерактивные процессы, выполняемые от имени обычного пользователя с поддержкой LUA

Перед созданием 32-разрядного процесса проверяются следующие атрибуты, чтобы определить, является ли он установщиком:

  • Имя файла содержит такие ключевые слова, как "install", "setup", "update" и т. д.
  • Ключевые слова в следующих полях ресурса управления версиями: "Поставщик", "Название компании", "Название продукта", "Описание файла", "Исходное имя файла", "Внутреннее имя" и "Имя экспорта".
  • Ключевые слова в параллельном манифесте, внедренном в исполняемый файл.
  • Ключевые слова в определенных записях StringTable, связанных в исполняемом файле.
  • Ключевые атрибуты в данных rc, связанных с исполняемым файлом.
  • Целевые последовательности байтов в исполняемом объекте.

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

Внимательно изучите весь этот документ, включая раздел Шаг шесть. Создание и внедрение манифеста приложения с помощью приложения.

Примечание Для обнаружения программ установки установщиком необходимо включить параметр Контроль учетных записей: обнаружение установленных приложений и запрос на повышение прав . Этот параметр включен по умолчанию и может быть настроен с помощью оснастки диспетчера политик безопасности (secpol.msc) или с помощью групповая политика (gpedit.msc).

Общие сведения и обзор установщика Microsoft Windows можно найти в библиотека MSDN.

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

Установщик Microsoft Windows 4.0 разработан с учетом UAC, чтобы упростить установку приложений и установку исправлений. С появлением установщика Windows 4.0 исправления можно применять к приложениям без переустановки более новой версии приложения. Этот метод идеально подходит, когда приложение развертывается на компьютере, а исправления должны быть развернуты пользователем без использования маркера административного доступа. Сведения о создании и применении исправлений к приложениям см. в разделе Исправление Per-User управляемых приложений.

Интеграция с Центром безопасности

Если контроль учетных записей отключен на компьютере с Windows Vista, центр безопасности создает оповещение и предлагает пользователю повторно включить контроль учетных записей. Центр безопасности отображает это оповещение после перезагрузки компьютера после изменения параметра UAC.

Изоляция привилегий пользовательского интерфейса

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

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

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

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

Процесс с более низким уровнем привилегий не может:

  • Выполните проверку дескриптора окна для более высоких привилегий процесса.
  • SendMessage или PostMessage для окон приложений с более высоким уровнем привилегий. Эти программные интерфейсы (API) возвращают успешное выполнение, но автоматически сбрасывают сообщение окна.
  • Используйте перехватчики потоков для подключения к процессу с более высоким уровнем привилегий.
  • Используйте обработчики журналов для отслеживания процесса с более высоким уровнем привилегий.
  • Выполните внедрение динамической библиотеки ссылок (DLL) в процесс с более высоким уровнем привилегий.

Если uiPI включен, следующие общие ресурсы USER по-прежнему совместно используются между процессами с разными уровнями привилегий:

  • Окно рабочего стола, которое фактически владеет поверхностью экрана
  • Общая память для кучи рабочего стола, доступная только для чтения
  • Глобальная таблица atom
  • Буфер обмена

Рисование на экране — это еще одно действие, которое не блокируется UIPI. Рисование на экран относится к процессу использования метода Paint для отображения содержимого на внешних выходных данных, например на мониторе. Модель интерфейса пользовательского/графического устройства (GDI) не позволяет управлять поверхностями рисования; Поэтому приложение с более низкими привилегиями может закрасить область поверхности окна приложения с более высокими привилегиями.

Примечание Так как оболочка Windows (Обозреватель) выполняется как процесс обычного пользователя, любой другой процесс, выполняемый от имени обычного пользователя, по-прежнему может отправлять его нажатия клавиш. Это основная причина, по которой учетной записи администратора в режиме утверждения Администратор запрашивается согласие на повышение прав при инициировании административного действия, например при двойном щелчке Setup.exe или щелчке значка щита с повышенными привилегиями.

Виртуализация

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

До windows Vista многие приложения обычно запускались администраторами. В результате приложения могут свободно считывать и записывать системные файлы и разделы реестра. Если эти приложения запускались обычным пользователем, они завершатся сбоем из-за недостаточного доступа. Windows Vista повышает совместимость приложений для этих пользователей, перенаправляя операции записи (и последующие операции с файлами или реестром) в расположение для каждого пользователя в профиле пользователя. Например, если приложение пытается выполнить запись в C:\Program Files\Contoso\Settings.ini, а у пользователя нет разрешений на запись в этот каталог, запись будет перенаправлена на C:\Users\<имя>_пользователя\AppData\Local\VirtualStore\Program Files\contoso\settings.ini. Если приложение попытается выполнить запись в реестр, HKEY_LOCAL_MACHINE\Software\Contoso\ оно автоматически перенаправляется в HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\Software\Contoso или HKEY_USERS\< Идентификатор безопасности >пользователя _Classes\VirtualStore\Machine\Software\Contoso.

На следующем рисунке подробно описан процесс виртуализации в Windows Vista. В этом примере Дениз является администратором в режиме утверждения Администратор, а Брайан — обычным пользователем. Виртуализация состоит из двух компонентов: виртуализации файлов и виртуализации реестра.

Bb530410.vistauacreqs01(en-us,MSDN.10).gif

Рис. 1. Процесс виртуализации

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

Виртуализация включена только для:

  • 32-разрядные интерактивные процессы
  • Доступные для записи файлы, папки и разделы реестра администратора

Виртуализация отключена для:

  • 64-разрядные процессы
  • Неинтерактивные процессы
  • Процессы, олицетворяющие
  • Вызывающие вызовы режима ядра
  • Исполняемые файлы с запрошеннымExecutionLevel

Виртуализация и роуминг:

  • Файлы, папки и разделы реестра виртуализации не перемещают (см. раздел Перемещаемые профили)
  • Связан с глобальными объектами, которые не перемещают

Виртуализация файлов

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

Когда приложение записывает данные в системное расположение, доступное только администраторам, Windows записывает все последующие операции с файлами по пользовательскому пути в каталоге виртуального хранилища, который находится в папке %LOCALAPPDATA%\VirtualStore. Позже, когда приложение считывает этот файл, система предоставит его в виртуальном хранилище. Поскольку инфраструктура безопасности Windows обрабатывает виртуализацию без помощи приложения, приложение считает, что ему удалось успешно читать и записывать данные непосредственно в program Files. Прозрачность виртуализации файлов позволяет приложениям воспринимать, что они записывают и считывают данные из защищенного ресурса, когда на самом деле они обращаются к виртуализированной версии.

Примечание При перечислении ресурсов в папках и реестре Windows Vista объединяет глобальные разделы файлов и папок и реестра в один список. В этом объединенном представлении указан глобальный (защищенный) ресурс вместе с виртуализированным ресурсом.

Важно Виртуальная копия всегда будет присутствовать в приложении. Например, config.ini доступны в \PF\App\config.ini и %LOCALAPPDATA%\VirtualStore\config.ini, а config.ini в виртуальном хранилище всегда будет считываться, даже если \PF\App\config.ini обновляется.

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

Bb530410.vistauacreqs02(en-us,MSDN.10).gif

Рис. 2. Виртуализированные ресурсы и представления

Ниже приведен пример процесса виртуализации файлов.

Сайед Аббас, торговый представитель в Woodgrove Bank, работает под стандартной учетной записью пользователя на компьютере, который он разделяет с другими торговыми представителями. Syed часто использует приложение электронной таблицы для обновления и сохранения файла в каталоге Program Files\SalesV1\: \Program Files\SalesV1\SalesData.txt. Несмотря на то, что Program Files\SalesV1\ защищен, файл будет успешно сохранен из точки зрения приложения электронной таблицы из-за виртуализации файлов Windows Vista. Для этого запись файла перенаправляется в users\username\appdata\Virtual Store\Program Files\SalesV1\SalesData.txt. Когда Syed откроет windows Обозреватель и откроет каталог Program Files, он увидит глобальное представление файла SalesData.txt.

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

Однако после того, как Стюарт Мансон, другой торговый представитель, войдет на рабочую станцию, он не увидит файл SalesData.txt в каталоге Program Files\SalesV1\. Если другой пользователь использует компьютер и записывает файл \Program files\SalesV1\SalesData.txt, эта запись также будет виртуализироваться в виртуальном хранилище этого пользователя. Файлы Syed обновляются и сохраняются независимо от других виртуализированных файлов в системе.

Виртуализация реестра

Виртуализация реестра аналогична виртуализации файлов, но применяется к разделам реестра в HKEY_LOCAL_MACHINE\SOFTWARE. Эта функция позволяет приложениям, которые полагаются на возможность хранения сведений о конфигурации в HKEY_LOCAL_MACHINE\SOFTWARE, продолжать работу при выполнении под учетной записью обычного пользователя. Ключи и данные перенаправляются в HKEY_CLASSES_ROOT\VirtualStore\SOFTWARE. Как и в случае с виртуализацией файлов, каждый пользователь имеет виртуализированную копию всех значений, которые приложение хранит в HKLM.

Сведения о виртуализации реестра

  • Можно включить или отключить для отдельных ключей в кусте программного обеспечения
  • Новый параметр FLAGS в reg.exe для управления виртуализацией на уровне ключей: позволяет рекурсивное включение и отключение виртуализации и управление "политикой открытых прав доступа"
  • ZwQueryKey: программный запрос к флагам виртуализации для ключа.
  • Виртуализация происходит поверх перенаправления WoW64
  • Включены как в 64-разрядном, так и в 32-разрядном представлениях реестра: HKU\{SID}_Classes\VirtualStore\Machine\Software и HKU\{SID}_Classes\VirtualStore\Machine\Software\SYSWOW3264
  • Большинство устаревших 32-разрядных приложений будут использовать 32-разрядное представление

Виртуализация предназначена только для обеспечения совместимости приложений с существующими программами. Приложения, разработанные для Windows Vista, не должны выполнять операции записи в конфиденциальные системные области и не должны полагаться на виртуализацию для устранения неправильного поведения приложения. При обновлении существующего кода для запуска в Windows Vista разработчики должны убедиться, что во время выполнения приложения хранят данные только в расположениях для каждого пользователя или в расположениях компьютеров в пределах %alluserprofile% (CSIDL_COMMON_APPDATA), для которых правильно заданы параметры списка управления доступом (ACL).

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

Рекомендации по виртуализации

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

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

  • Добавьте манифест приложения с соответствующим requestedExecutionLevel для интерактивных приложений. Это отключит виртуализацию для манифестированного приложения.
  • Не используйте реестр в качестве механизма межпроцессного взаимодействия. Службы и пользовательские приложения будут иметь разные представления ключа.
  • Протестируйте приложение в Windows Vista. Убедитесь, что процессы, запущенные от имени обычного пользователя, не записывают данные в глобальные пространства имен, такие как %systemroot%.
  • Для разработчиков драйверов фильтров: проверьте диапазон высоты. См. раздел Фильтры файловой системы. Они должны быть выше, чем виртуализация FSFilter.
  • Помните, что виртуализированные ресурсы представляют собой копии глобальных ресурсов для каждого пользователя.

Изменения маркера доступа

Когда пользователь входит на компьютер Windows Vista, Windows проверяет административные привилегии Windows и относительные идентификаторы (RID), которыми обладает учетная запись пользователя, чтобы определить, должен ли пользователь получать два маркера доступа (отфильтрованный маркер доступа и маркер полного доступа). Windows создаст два маркера доступа для пользователя, если выполняется одно из следующих действий:

  1. Учетная запись пользователя содержит любой из следующих идентификаторов RID.
    • DOMAIN_GROUP_RID_ADMINS
    • DOMAIN_GROUP_RID_CONTROLLERS
    • DOMAIN_GROUP_RID_CERT_ADMINS
    • DOMAIN_GROUP_RID_SCHEMA_ADMINS
    • DOMAIN_GROUP_RID_ENTERPRISE_ADMINS
    • DOMAIN_GROUP_RID_POLICY_ADMINS
    • DOMAIN_ALIAS_RID_ADMINS
    • DOMAIN_ALIAS_RID_POWER_USERS
    • DOMAIN_ALIAS_RID_ACCOUNT_OPS
    • DOMAIN_ALIAS_RID_SYSTEM_OPS
    • DOMAIN_ALIAS_RID_PRINT_OPS
    • DOMAIN_ALIAS_RID_BACKUP_OPS
    • DOMAIN_ALIAS_RID_RAS_SERVERS
    • DOMAIN_ALIAS_RID_PREW2KCOMPACCESS
    • DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS
    • DOMAIN_ALIAS_RID_CRYPTO_OPERATORS
  2. Учетная запись пользователя содержит все привилегии, отличные от привилегий учетной записи обычного пользователя. Стандартная учетная запись пользователя содержит только следующие привилегии.
    • SeChangeNotifyPrivilege
    • SeShutdownPrivilege
    • SeUndockPrivilege
    • SeIncreaseWorkingSetPrivilege
    • SeTimeZonePrivilege

Привилегии, которые содержит отфильтрованный маркер, зависят от того, содержал ли исходный маркер какой-либо из перечисленных выше ограниченных RIDS. Если какой-либо из ограниченных ИДЕНТИФИКАТОРов был в маркере, все привилегии удаляются, за исключением:

  • SeChangeNotifyPrivilege
  • SeShutdownPrivilege
  • SeUndockPrivilege
  • SeReserveProcessorPrivilege
  • SeTimeZonePrivilege

Если в маркере не было идентификаторов riD с ограниченным доступом, удаляются только следующие привилегии:

  • SeCreateTokenPrivilege
  • SeTcbPrivilege
  • SeTakeOwnershipPrivilege
  • SeBackupPrivilege
  • SeRestorePrivilege
  • SeBackupPrivilege
  • SeImpersonatePrivilege
  • SeRelabelPrivilege

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

Дополнительные сведения о идентификаторах RID см. в библиотека MSDN статье Строки идентификаторов безопасности [безопасность].

Дополнительные сведения о привилегиях Windows можно найти в библиотека MSDN статье Константы авторизации [Безопасность].

Архитектура контроля учетных записей

На следующей схеме представлен процесс запуска исполняемых файлов в Windows Vista.

Bb530410.vistauacreqs03(en-us,MSDN.10).gif

Рис. 3. Архитектура контроля учетных записей

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

Путь запуска стандартного пользователя

Стандартный путь запуска Windows Vista аналогичен пути запуска Windows XP, но включает некоторые изменения.

  • ShellExecute() вызывает CreateProcess().
  • CreateProcess() вызывает AppCompat, Fusion и Installer Detection, чтобы оценить, требуется ли приложению повышение прав. Затем проверяется исполняемый файл, чтобы определить его requestedExecutionLevel, который хранится в манифесте приложения исполняемого файла. В базе данных AppCompat хранятся сведения об исправлениях совместимости приложений. Обнаружение установщика обнаруживает исполняемые файлы установки.
  • CreateProcess() возвращает код ошибки Win32 с указанием ERROR_ELEVATION_REQUIRED.
  • ShellExecute() ищет эту новую ошибку и, получив ее, вызывает службу application Information (AIS) для попытки запуска с повышенными привилегиями.

Путь запуска с повышенными привилегиями

Путь запуска Windows Vista с повышенными привилегиями — это новый путь запуска Windows.

  • AIS получает вызов из ShellExecute() и повторно оценивает запрошенный уровень выполнения и групповая политика, чтобы определить, разрешено ли повышение прав, и определить взаимодействие с пользователем с повышением прав.
  • Если запрошенный уровень выполнения требует повышения прав, служба запускает запрос на повышение прав на интерактивном рабочем столе вызывающего объекта (на основе групповая политика), используя HWND, переданный из ShellExecute().
  • Когда пользователь предоставит согласие или действительные учетные данные, AIS при необходимости получит соответствующий маркер доступа, связанный с соответствующим пользователем. Например, приложение, запрашивающее requestExecutionLevel of highestAvailable, будет получать маркеры доступа для пользователя, который является только членом группы операторов резервного копирования, а не для члена локальной группы администраторов.
  • AIS повторно выполняет вызов CreateProcessAsUser(), предоставляя маркер доступа администратора и указывая интерактивный рабочий стол вызывающего объекта.

Повлияет ли UAC на приложение?

Будет ли приложение затронуто UAC, зависит от текущего состояния приложения. В ряде случаев не потребуется никаких изменений в соответствии с требованиями Microsoft Безопасность Windows. Тем не менее для некоторых приложений, включая бизнес-приложения, могут потребоваться изменения в процессах установки, функционирования и обновления для правильной работы в среде контроля учетных записей Windows Vista.

Примечание Если приложение работает так же, как обычный пользователь в Windows XP, оно будет работать так же, как и обычный пользователь в Windows Vista.

Зачем нужно удалять административные зависимости приложения?

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

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

Снижение общей стоимости владения приложением

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

Защита по умолчанию

В корпорации Майкрософт принципы инициативы По обеспечению надежности вычислений майкрософт укоренились в разработке программного обеспечения. Следовательно, повышение безопасности является неотъемлемой частью процесса разработки Windows Vista.

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

Цель оставшейся части этого руководства — научить разработчиков:

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

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

Одной из целей выпуска Windows Vista является пропаганда и поощрение принципа разработки для стандартных пользователей и администраторов в Администратор режим утверждения для всех разработчиков. Достижение этой цели поможет предотвратить различные атаки на отдельные приложения и снизить вероятность того, что такие атаки посядут на безопасность системы. Хотя эти цели можно достичь в некоторой степени сегодня, требуя от администраторов использования двух учетных записей, они, как правило, не удается по следующим причинам:

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

В результате пользователи могут решить всегда входить в свои административные учетные записи, тем самым побеждая меры безопасности. Чтобы устранить эту проблему, контроль учетных записей вводит концепцию режима утверждения Администратор. Учетная запись пользователя в режиме утверждения Администратор — это учетная запись пользователя, которая входит в группу локальных администраторов в системе с включенным UAC.

На предприятии режим утверждения Администратор будет использоваться в качестве технологии моста для миграции на Windows Vista. В идеале предприятия будут запускать всех пользователей в качестве стандартных пользователей и отключать запрос на повышение прав для обычных пользователей. Эта настройка включает управляемый стандартный рабочий стол, где установки развертываются с помощью технологии развертывания программного обеспечения, например Microsoft Systems Management Server (SMS).

Важно Корпорация Майкрософт по-прежнему рекомендует членам группы "Администраторы домена" продолжать поддерживать две отдельные учетные записи пользователей в Windows Vista: обычную учетную запись пользователя и учетную запись администратора домена. Все администрирование домена должно выполняться с помощью учетной записи администратора домена. Чтобы еще больше повысить безопасность, рассмотрите возможность развертывания интеллектуального решения карта в доменных средах. Дополнительные сведения см. в руководстве по планированию безопасного доступа с помощью смарт-карт .

Ниже приведены цели разработки Windows Vista для режима утверждения Администратор.

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

В настоящее время большинство приложений Windows должны выполняться от имени администратора, но фактически не выполняют административные операции. Эти приложения являются побочным продуктом философии операционных систем Microsoft Windows 9x: "все являются администраторами".

Ниже приведены примеры проблемных приложений.

  • Приложения, которые без необходимости записывают данные в HKEY_LOCAL_MACHINE (HKLM) или в системные файлы в файловой системе.
  • Установка ActiveX для упрощения бизнес-приложения с веб-интерфейсом.
  • Приложения, которые неоправданно запрашивают доступ к ресурсам, которым требуется полный маркер административного доступа.

В следующем разделе представлены новые технологии для Windows Vista, влияющие на поставщики программного обеспечения.

Как определить, имеет ли мое приложение административные зависимости?

Чтобы помочь разработчикам, независимым поставщикам программного обеспечения и организациям в оценке своих приложений, корпорация Майкрософт предоставляет Microsoft Standard User Analyzer. Анализатор стандартных пользователей можно использовать для идентификации поведения приложения, не соответствующего UAC. Корпорация Майкрософт рекомендует разработчикам запускать это средство для выявления проблем с запуском приложения под учетной записью обычного пользователя. Эти тесты следует выполнять, даже если приложение уже установлено и правильно работает под учетной записью обычного пользователя в Windows XP. Приложение может выполнять операции, такие как попытка записи в расположения системного реестра, и принимать решения на основе поведения системы, например искать ответ на ошибку. Windows Vista может вести себя иначе, чем в более ранних версиях операционной системы Windows, из-за добавления новой поддержки совместимости приложений. Поэтому рекомендуется тестировать все приложения с помощью новой версии анализатора стандартных пользователей.

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

  • Зависимость от объектов, которые ограничивают запрошенный доступ только доверенными пользователями.

    Например, HKEY_LOCAL_MACHINE предоставляет KEY_WRITE только администраторам и системе — приложение, запрашивающее KEY_WRITE на HKEY_LOCAL_MACHINE, не будет работать с включенным UAC.

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

Каковы требования, если у меня есть законное приложение администратора?

Для приложений, которые по умолчанию выполняют законные административные операции, корпорация Майкрософт реализовала расширение для раздела trustInfo текущей схемы манифеста приложения Windows XP. Эти новые атрибуты можно использовать, чтобы указать системе, что у вас есть законное административное приложение; система автоматически запрашивает у пользователя разрешение на запуск приложения с полным маркером административного доступа. Сведения о расширении манифеста приложения см. в разделе Создание и внедрение манифеста приложения с помощью приложения в этом документе.

Разработка приложений для Windows Vista

В следующем списке представлен рабочий процесс разработки приложения для Windows Vista:

  1. Тестирование приложения на совместимость приложений Windows Vista
  2. Классификация приложения как стандартного пользователя, администратора или смешанного пользовательского приложения
  3. Перепроектирование функциональных возможностей приложения для обеспечения совместимости UAC
  4. Перепроектирование пользовательского интерфейса приложения
  5. Перепроектирование установщика приложения
  6. Создание и внедрение манифеста приложения с помощью административных приложений
  7. Тестирование приложения
  8. Подпись приложения
  9. Определите, следует ли использовать программу с логотипом Windows Vista

1. Тестирование приложения на совместимость приложений

Тестирование на совместимость приложений с UAC можно легко выполнить, установив анализатор стандартных пользователей.

Чтобы использовать графическое отображение журнала анализатора стандартных пользователей, необходимо установить средство проверки приложений Майкрософт. Средство проверки приложений можно скачать бесплатно на веб-сайте Майкрософт.

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

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

Запустите приложение от имени обычного пользователя.

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

Запустите приложение с повышенными правами администратора.

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

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

Определение проблем совместимости приложений для приложений, предшествующих Windows Vista

  1. Войдите на компьютер Windows Vista с правами администратора в режиме утверждения Администратор.
  2. Нажмите кнопку Пуск, выберите Все программы, а затем — Анализатор стандартных пользователей.
  3. В анализаторе обычного пользователя в поле Целевое приложение укажите полный путь к каталогу для тестируемого приложения или нажмите кнопку Обзор, чтобы найти исполняемый файл программ с windows Обозреватель.
  4. Нажмите кнопку Запустить , а затем нажмите кнопку Продолжить в диалоговом окне Контроль учетных записей пользователей.
  5. После запуска тестового приложения выполните стандартные административные задачи в приложении и закройте приложение после завершения.
  6. В стандартном пользовательском анализаторе просмотрите выходные данные на каждой вкладке. Используйте эти данные для выявления проблем совместимости, которые могут возникнуть в программе.

2. Классифицируйте приложение как стандартного пользователя, администратора или смешанного пользовательского приложения

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

Вопросы, которые помогут классифицировать приложение

Ответьте на следующие вопросы, чтобы определить, потребуется ли вашему приложению какие-либо изменения для совместимости с Windows Vista:

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

Приложение выполняется от имени обычного пользователя?

Чтобы ответить на этот вопрос, убедитесь, что приложение или функция полностью используются обычными пользователями. Если для какой-либо части функции требуется, чтобы пользователь был администратором, ответ на этот вопрос — "Нет".

Как убедиться, что приложение или панель управления могут использоваться обычными пользователями:

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

Можно ли исправить административные функции, чтобы больше не требовать маркер доступа администратора?

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

Хорошим примером типа функции или параметра, который можно исправить, является Calc.exe (Калькулятор Windows). В Windows XP параметр "Научный" и "Стандартный" был параметром для каждого компьютера, что означало, что для изменения параметра требовался полный административный маркер доступа. В Windows Vista этот параметр хранится в профиле пользователя.

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

  • Тщательно протестируйте приложение или панель управления как обычный пользователь, так и администратор. Может ли взаимодействие быть одинаковым для обоих типов пользователей?

  • Можно ли уменьшить список управления доступом (ACL), необходимый для записи в ключ HKLM?

    Примечание Этот курс не следует воспринимать легкомыслительно. Будьте осторожны, чтобы не поставить под угрозу общую безопасность системы, понизив контроль, предоставляемый ACL.

  • Можно ли изменить пользовательский интерфейс так, чтобы он устанавливал состояние для каждого пользователя, а не глобального состояния (и не предоставляя глобальное изменение состояния с помощью пользовательского интерфейса)?

Можно ли удалить административные разделы из функциональных возможностей программы?

У вашей функции обязательно должны быть эти функции? Если вы не можете сократить административные функции или функции, ответ на этот вопрос будет "Нет".

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

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

Анализ ответов для классификации приложения

Если вы ответили "Да" на любой из предыдущих вопросов

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

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

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

Если вы ответили "Нет" на все предыдущие вопросы

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

Убедитесь, что приложение или панель управления работает с UAC:

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

3. Изменение функциональности приложения для обеспечения совместимости UAC

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

Основным компонентом перепроектирования приложения для Windows Vista будет изучение модели доступа пользователей приложения в ее основе.

Требования ко всем приложениям Windows Vista

Указание requestedExecutionLevel

Для правильной работы UAC операционная система должна иметь возможность определить, какой код требует повышенных привилегий, а какой — нет.

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

Не регистрировать компоненты в Rundll32

Некоторые приложения используют исполняемые файлы Windows Rundll32 для запуска компонентов. Однако этот метод не соответствует требованиям разработки для Windows Vista. Вызов непосредственно в Rundll32 приводит к проблемам с совместимостью UAC. Когда приложение использует исполняемые файлы Rundll32 для выполнения, Rundll32 вызывает службу application Information Service (AIS) от имени приложения, чтобы инициировать запрос на повышение прав UAC. В результате запрос на повышение прав UAC не знает об исходном приложении и отображает приложение, запрашивающее повышение прав, как "Хост-процесс Windows(Rundll32)". Без четкого описания и значка приложения, запрашивающего повышение прав, пользователи не могут определить приложение и определить, безопасно ли повысить его уровень.

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

  1. Создайте отдельный исполняемый файл для приложения.
  2. В новом исполняемом файле вызовите экспортированную функцию в библиотеке DLL, которую вы указали бы с помощью Rundll32. Возможно, потребуется загрузить библиотеку DLL, если в ней нет библиотеки LIB.
  3. В файле ресурсов создайте и добавьте новый значок для исполняемого файла. Этот значок будет отображаться в запросе на повышение прав учетных записей, когда приложение запрашивает повышение прав.
  4. Укажите короткое понятное имя исполняемого файла. Это имя будет отображаться в запросе на повышение прав учетных записей, когда приложение запрашивает повышение прав.
  5. Создайте и внедрите файл манифеста приложения для исполняемого файла и пометьте его запрошенным уровнем выполнения requireAdministrator. Этот процесс подробно описан в разделе Создание и внедрение манифеста приложения с помощью приложения.
  6. Authenticode подпишет новый исполняемый файл. Этот процесс подробно описан в разделе Authenticode Sign Your Application (Подпись приложения в Authenticode).

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

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

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

Установка

  • Никогда не выполняйте административные действия (например, завершение процесса установки) при первом запуске; Это необходимо сделать в рамках процесса начальной настройки.
  • Никогда не записывайте непосредственно в каталог Или подкаталоги Windows. Используйте правильные методы для установки файлов, таких как шрифты.
  • Если необходимо автоматически обновить приложение, используйте механизм, подходящий для обычных пользователей, например установку исправлений для контроля учетных записей в установщике Windows 4.0 для выполнения обновления.

Сохранение состояния

  • Не записывайте сведения для каждого пользователя или данные, доступные для записи пользователя, в файлы программы или каталоги программ.
  • Не используйте жестко заданные пути в файловой системе. Воспользуйтесь преимуществами API KnownFolders и ShGetFolder, чтобы найти место для записи данных.

Запуск и тестирование под учетной записью обычного пользователя

Если вы создаете неадминистрирование приложения, например бизнес-приложения или пользовательского приложения, например игры, необходимо всегда записывать данные приложения в расположение, к которому у обычного пользователя есть доступ. Ниже приведены некоторые из рекомендуемых требований.

  • Запись данных для каждого пользователя в профиль пользователя: CSIDL_APPDATA.
  • Запись данных для каждого компьютера в раздел Пользователи\Все пользователи\Данные приложения: CSIDL_COMMON_APPDATA.
  • Приложение не может зависеть от каких-либо административных API. Например, программа, которая ожидает успешного вызова функции Windows SetTokenInformation(), завершится сбоем под учетной записью обычного пользователя.

Будьте осведомлены о быстром переключении пользователей (FUS)

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

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

Требования к приложениям администратора

Использование свойства HWND для подтверждения в качестве приложения переднего плана

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

Однако некоторые приложения переднего плана в настоящее время запрашивают в качестве фоновых приложений в Windows Vista. Такое поведение является результатом отсутствия родительского HWND. Чтобы убедиться, что Windows Vista подтверждает ваше приложение в качестве приложения переднего плана, необходимо передать родительское HWND с вызовом ShellExecute, CreateElevatedComObject (COM) или управляемым кодом.

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

В следующем примере кода показано, как передать HWND с помощью ShellExecute:

BOOL RunAsAdmin( HWND hWnd, LPTSTR lpFile, LPTSTR lpParameters )
{
    SHELLEXECUTEINFO   sei;
    ZeroMemory ( &sei, sizeof(sei) );

    sei.cbSize          = sizeof(SHELLEXECUTEINFOW);
    sei.hwnd            = hWnd;
    sei.fMask           = SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI;
    sei.lpVerb          = _TEXT("runas");
    sei.lpFile          = lpFile;
    sei.lpParameters    = lpParameters;
    sei.nShow           = SW_SHOWNORMAL;

    if ( ! ShellExecuteEx ( &sei ) )
    {
        printf( "Error: ShellExecuteEx failed 0x%x\n", GetLastError() );
        return FALSE;
    }
    return TRUE;
}

В следующем примере кода показано, как передать HWND с помощью CreateElevatedComObject с помощью моникера высот. Предполагается, что вы уже инициализировали COM в текущем потоке. Дополнительные сведения о моникере высоты см. в шаге 4 этого документа.

HRESULT CreateElevatedComObject(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
    BIND_OPTS3 bo;
    WCHAR  wszCLSID[50];
    WCHAR  wszMonikerName[300];

    StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID)/sizeof(wszCLSID[0])); 
    HRESULT hr = StringCchPrintf(wszMonikerName, sizeof(wszMonikerName)/sizeof(wszMonikerName[0]), L"Elevation:Administrator!new:%s", wszCLSID);
    if (FAILED(hr))
        return hr;
    memset(&bo, 0, sizeof(bo));
    bo.cbStruct = sizeof(bo);
    bo.hwnd = hwnd;
    bo.dwClassContext  = CLSCTX_LOCAL_SERVER;
    return CoGetObject(wszMonikerName, &bo, riid, ppv);

BIND_OPTS3 является новой в Windows Vista. Он является производным от BIND_OPTS2. Он определяется следующим образом:

typedef struct tagBIND_OPTS3 : tagBIND_OPTS2
{
    HWND hwnd;
} BIND_OPTS3, * LPBIND_OPTS3;

Единственным дополнением является поле HWND, hwnd. Этот дескриптор представляет окно, которое становится владельцем пользовательского интерфейса повышения прав при включенном запросе безопасного рабочего стола.

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

System.Diagnostics.Process newProcess = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("D:\SomeProgram.exe");
info.UseShellExecute = true;
info.ErrorDialog = true;
info.ErrorDialogParentHandle = this.Handle;
newProcess.StartInfo = info;
newProcess.Start();

Не запрашивать повышение прав в пути входа пользователя

Приложения, которые запускаются при входе пользователя и требуют повышения прав, теперь блокируются в пути входа. Без блокировки приложений, запрашивающих повышение прав в пути входа пользователя, обычным пользователям и администраторам придется отвечать на диалоговое окно Контроль учетных записей при каждом входе. Windows Vista уведомляет пользователя, если приложение заблокировано, помещая значок в область задач. Затем пользователь может щелкнуть этот значок правой кнопкой мыши, чтобы запустить приложения, которым было запрещено запрашивать повышение прав, когда пользователь вошел в систему. Пользователь может управлять тем, какие запускаемые приложения отключены или удалены из этого списка, дважды щелкнув значок панели.

Пример кода C++, демонстрирующий использование планировщика задач для повышения прав пользователя, доступен в разделе Ссылки этого документа.

Не используйте runas для запуска процесса с повышенными привилегиями

Параметр Запуск от имени... в Windows XP и Windows Server 2003 был заменен на Запуск от имени администратора в контекстном меню (доступно при щелчке исполняемого файла правой кнопкой мыши) в Windows Vista. Когда стандартный пользователь выбирает параметр Запуск от имени администратора , ей отображается список активных администраторов на локальном компьютере. Также отображаются стандартные пользователи с более высокими привилегиями, например члены группы операторов резервного копирования. Когда администратор выбирает параметр Запуск от имени администратора , в диалоговом окне Контроль учетных записей пользователей сразу же предлагается пользователю продолжить работу перед запуском приложения.

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

Важно Имейте в виду, что запуски не предоставляют возможность запуска приложения с повышенным уровнем маркера доступа, независимо от того, является ли оно обычным пользователем с привилегиями, например оператором резервного копирования или администратором. Команда runas предоставляет пользователю возможность запускать приложение с разными учетными данными. Лучший способ запуска приложения с другой учетной записью — выполнить действие программным способом с помощью службы и не полагаться на пользователя для запуска компонента от имени другого пользователя. Если программа программно использует команду runas, убедитесь, что она не предназначена для запуска процесса с повышенными привилегиями.

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

Параметры runas

Параметр Описание
/noprofile Указывает, что профиль пользователя не должен загружаться. Это позволяет быстрее загружать приложение, но может привести к сбою некоторых приложений.
/Профиль Указывает, что профиль пользователя должен быть загружен. Это параметр по умолчанию.
/Env Используйте текущую среду вместо пользовательской.
/netonly Используйте этот параметр, если указанные учетные данные предназначены только для удаленного доступа.
/savecred Используйте учетные данные, ранее сохраненные пользователем. Этот параметр недоступен в Windows XP, Home Edition и будет игнорироваться.
/smartcard Используйте этот параметр, если предоставленные учетные данные предоставлены смарт-карта.
/Пользователя Имя пользователя. Имя пользователя должно быть указано в виде USER\DOMAIN или USER@DOMAIN.
/showtrustlevels Отображает trustlevels, которые можно использовать в качестве аргументов для параметра /trustlevel.
/trustlevel Один из уровней, перечисленных в /showtrustlevels.
Программа Командная строка для исполняемого файла.

Пример.

runas /noprofile /user:mymachine\Denise cmd

Примечания.

  • Введите пароль пользователя только при появлении запроса.
  • Параметр /profile несовместим с параметром /netonly.
  • Параметр /savecred несовместим с параметром /smartcard.

Требования для консольных приложений

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

Для консольных приложений необходимо выполнить следующие действия:

Пометка приложения "asInvoker"

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

Предоставление сообщения об ошибке, если приложение выполняется без полного маркера доступа администратора

Если приложение запускается в консоли без повышенных привилегий, оно должно отправить краткое сообщение и выйти из нее. Рекомендуемое сообщение:

"Доступ запрещен. Для использования выбранных параметров требуются разрешения администратора. Используйте командную строку администратора для выполнения этих задач".

Приложение также должно возвращать код ошибки ERROR_ELEVATION_REQUIRED при сбое запуска, чтобы упростить создание скриптов.

Требования к скриптам

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

Чтобы обеспечить соответствие UAC скриптов, проверьте логику скриптов и добавьте "тесты", чтобы убедиться, что перед выполнением действия в скрипте у вас (или пользователя, выполняющего скрипт) есть достаточные привилегии для выполнения этой задачи.

Требования для массовых операций

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

ИНТЕРФЕЙСЫ API, помогающие определить администратора

  • IsUserAnAdmin()
  • GetTokenInformation()

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

  • MAXIMUM_ALLOWED
  • KEY_WRITE
  • DELETE (при применении к разделам реестра)
  • Другие ключевые слова, подобные HKLM (открытые с помощью MAXIMUM_ALLOWED на XP):
  • SHELLKEY_HKLM_EXPLORER
  • SHELLKEY_HKLM_SHELL

Будут применены другие API, которые перенаправляются в значения реестра HKLM и виртуализацию

  • WritePrivateProfileString(,,,"system.ini");
  • CheckSectionAccess("system.ini",...);

4. Изменение пользовательского интерфейса приложения для обеспечения совместимости UAC

Используйте рекомендации в этом разделе для разработки пользовательского интерфейса приложения для обеспечения совместимости UAC. Строгое соблюдение этих рекомендаций при разработке приложения обеспечит согласованное и предсказуемое взаимодействие с пользователем в Windows Vista.

  • Влияние UAC на взаимодействие с пользователем Windows
  • Цели пользовательского интерфейса UAC
  • Запрос на повышение прав
  • Поток процесса взаимодействия с пользователем
  • Точки входа с повышением прав
  • Реализация пользовательского интерфейса
  • Когда следует добавлять значок щита в пользовательский интерфейс приложения
  • Ключевые решения для приложений только для администраторов

Важно Простое рефракторирование пользовательского интерфейса приложения не будет соответствовать требованиям к совместимости UAC. Основные функции приложения должны соответствовать требованиям стандартной пользовательской модели Windows Vista. Эти требования были подробно описаны на предыдущем шаге Шаг 3. Изменение функциональности приложения для обеспечения совместимости UAC.

Влияние UAC на взаимодействие с пользователем Windows

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

Цели пользовательского интерфейса UAC

Общей целью взаимодействия с пользователем UAC является обеспечение предсказуемости взаимодействия с пользователем:

  • Для администратора это означает, что пользователь всегда знает, когда ему потребуется предоставить разрешение на выполнение задачи с повышенными привилегиями.

Это действие запроса собственного маркера доступа администратора пользователя, чтобы он/она могли внести необходимые администратором изменения.

  • Для обычных пользователей это означает, что они будут знать, когда они:
    • Потребуется предоставить утверждение администратора (домашняя и неуправляемая среды) для административных задач
    • ИЛИ, если не удается выполнить задачу (управляемые среды, в которых повышение прав явно запрещено) и должен обратиться в службу поддержки.

Цели разработки

В следующем списке представлены цели проектирования UAC.

Исключите ненужное повышение прав

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

Быть предсказуемым

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

Требуются минимальные усилия

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

Возврат к стандартному пользователю

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

Запрос на повышение прав

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

Запрос согласия отображается администраторам в режиме утверждения Администратор при попытке выполнить административную задачу. Это пользовательский интерфейс по умолчанию для администраторов в режиме утверждения Администратор. Его можно настроить в оснастке локального диспетчера политик безопасности (secpol.msc) и с помощью групповая политика.

На следующем рисунке показан пример запроса на согласие контроля учетных записей.

Bb530410.vistauacreqs04(en-us,MSDN.10).gif

Рис. Запрос согласия контроля учетных записей

Запрос учетных данных

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

На следующем рисунке показан пример запроса учетных данных контроля учетных записей пользователей.

Bb530410.vistauacreqs05(en-us,MSDN.10).gif

Рис. 5. Запрос учетных данных контроля учетных записей

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

Поведение запроса на повышение прав по умолчанию

Тип учетной записи пользователя Параметр запроса на повышение прав
Обычный пользователь Запрос учетных данных
Учетная запись администратора в режиме утверждения Администратор Запрос согласия

Поток процесса взаимодействия с пользователем

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

  1. Точка входа в высоту (например, элемент управления или ссылка, отображающая значок щита UAC).
  2. Запрос на повышение прав (запрос согласия или учетных данных администратора).
  3. Процесс с повышенными привилегиями.

В следующем примере рабочего процесса показано, как связаны предыдущие компоненты:

  1. Администратор в режиме утверждения Администратор входит на компьютер Windows Vista.
  2. Затем пользователь решает добавить еще одного администратора для компьютера.
  3. Пользователь нажимает кнопку Пуск, щелкает панель управления, а затем щелкает ссылку в разделе Безопасность с заголовком Разрешить программу через брандмауэр Windows, который отображается в виде значка щита.
  4. Появится запрос согласия с запросом на утверждение пользователя.
  5. Пользователь нажимает кнопку Продолжить и создается процесс с повышенными привилегиями.
  6. В параметрах брандмауэра Windows пользователь изменяет параметры брандмауэра Windows, а затем нажимает кнопку ОК, что завершает процесс с повышенными привилегиями.
  7. Пользователь продолжает работать на компьютере как обычный пользователь.

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

Точки входа с повышением прав

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

Значок щита

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

На следующем рисунке показан пример значка щита.

Bb530410.vistauacreqs06(en-us,MSDN.10).gif

Рис. 6. Значок щита

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

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

Свойства значка щита:

  • Согласованный внешний вид на протяжении всего пользовательского интерфейса UAC.
  • Не отражает визуальное состояние (например, активно, наведено, отключено и т. д.).
  • Не запоминает состояние.

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

  • Кнопка контроля учетных записей
  • Гиперссылка UAC
  • Ссылка на команду UAC

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

В этом разделе также рассматривается четвертая точка входа пользовательского интерфейса UAC , наложение значка UAC. Указывает, получает ли исполняемый файл наложение значка или нет, разработчик приложения не контролирует. Windows Vista накладывает значок щита на значки приложений для исполняемых файлов, которые запросилиExecutionLevel, для которых задано значение requireAdministrator.

Кнопка щита UAC

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

Кнопки щита UAC можно использовать как кнопки фиксации (например, Далее в мастере) или как кнопки для отображения пользовательского интерфейса дополнительных параметров (например, изменение параметров в диалоговом окне свойств).

Кнопка щита UAC состоит из двух компонентов пользовательского интерфейса:

  • Значок щита
  • Надпись

Кнопка щита UAC упаковается таким образом, чтобы разработчики могли использовать ее вместо обычной кнопки. Кнопка UAC также поддерживает отображение значка щита в левой или правой части текстовой метки. Кроме того, разработчики смогут скрыть или отобразить значок щита при отображении кнопки UAC.

На следующем снимок экрана показан пример кнопки щита UAC.

Bb530410.vistauacreqs07(en-us,MSDN.10).gif

Рис. 7. Кнопка щита контроля учетных записей

Гиперссылка UAC

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

Гиперссылка UAC состоит из следующих компонентов:

  • Значок щита
  • Элемент управления "Гиперссылка"

Гиперссылка UAC не упаковается со значком щита для использования разработчиком. Разработчикам потребуется получить ресурс значка щита и отобразить его рядом с гиперссылкой.

На следующем снимок экрана показан пример гиперссылки UAC.

Bb530410.vistauacreqs08(en-us,MSDN.10).gif

Рис. 8. Гиперссылка UAC

Ссылка на команду UAC

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

Ссылки команд UAC следует использовать только в качестве кнопок фиксации (например, "Сделать этот параметр" в диалоговом окне).

Ссылка на команду UAC состоит из следующих компонентов:

  • Значок щита
  • Стандартные компоненты командной ссылки
  • Текст ссылки
  • Текст заметки

Ссылка на команду UAC упаковается таким образом, что разработчик может использовать ссылку на команду UAC вместо обычной командной ссылки. Ссылка на команду UAC поддерживает отрисовку значка щита слева или справа от ссылки на команду.

Ниже приведен пример ссылки на команду UAC.

Bb530410.vistauacreqs09(en-us,MSDN.10).gif

Рис. 9. Ссылка на команду UAC

Наложения значков

В Windows Vista, если исполняемый файл требует повышения прав для запуска, значок исполняемого файла должен быть помечен значком щита, чтобы указать на этот факт. Манифест приложения исполняемого файла должен пометить "requireAdministrator", чтобы назначить исполняемый файл как требующий полного административного маркера доступа. Наложение значка щита также будет автоматически помещено в исполняемые файлы, для которых требуется повышение прав в зависимости от эвристики обнаружения установщиком. Например, файл с именем setup.exe автоматически получит наложение значка щита, даже если в исполняемом файле нет встроенного манифеста приложения.

На следующем рисунке показан пример наложения значка UAC.

Bb530410.vistauacreqs10(en-us,MSDN.10).gif

Рис. Наложение значка UAC

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

Реализация пользовательского интерфейса

Реализация значка щита и API

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

Реализация значка щита и API

Значки API
Shield Ресурс пользователя: IDI_SHIELD
Кнопка Button_SetElevationRequired(hwndButton)
Syslink/Hyperlink Макет IDI_SHIELD рядом с syslink
Ссылка на команду Загрузка IDI_SHIELD и установка значка командной ссылки
Контекстное меню Поддержка значков в DefCM для статических команд

Добавление значка щита в пользовательский интерфейс

Добавьте небольшой значок:

#include <shellapi.h>
SHSTOCKICONINFO sii;
sii.cbSize = sizeof(sii);
SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON | SHGSI_SMALLICON, &sii);
hiconShield  = sii.hIcon;

Добавьте большой значок:

SHSTOCKICONINFO sii;
sii.cbSize = sizeof(sii);
SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON | SHGSI_LARGEICON, &sii);
hiconShield  = sii.hIcon;

Добавьте значок настраиваемого размера:

SHSTOCKICONINFO sii;
sii.cbSize = sizeof(sii);
SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICONLOCATION, &sii);
hiconShield  = ExtractIconEx(sii. ...);

Примечание Как правило, не следует добавлять значок щита непосредственно в пользовательский интерфейс. Рекомендуется использовать один из следующих методов ввода значка щита в элементе управления . Кроме того, простое добавление значка щита в пользовательский интерфейс не обеспечит совместимость UAC. Кроме того, необходимо полностью преломлять взаимодействие с пользователем приложения (добавьте requestedExecutionLevel, исправьте ошибки стандартных пользователей и убедитесь, что пользовательский интерфейс является понятным и совместимым с UAC).

Добавление значка щита на кнопку

Стандартный элемент управления кнопкой (PUSHBUTTON, DEFPUSHBUTTON) был улучшен, чтобы вы могли добавлять значок вместе с отображаемым текстом без необходимости задавать стили BS_ICON или BS_BITMAP.

Чтобы отобразить значок щита, вызовите следующий макрос (определенный в commctrl.h):

Button_SetElevationRequiredState(hwndButton, fRequired);

Примечание hwndButton — это HWND кнопки; fRequired определяет, следует ли отображать (TRUE) или скрыть (FALSE) значок щита UAC.

Добавление значка щита на кнопку установщика Windows

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

Добавление значка щита на кнопку "Далее" в мастере

Важно Отображение значка щита UAC с кнопкой "Далее" поддерживается только в AeroWizards (PSH_AEROWIZARD).

Чтобы отобразить значок щита на кнопке "Далее" для определенной страницы в AeroWizard, используйте следующий код:

case WM_NOTIFY:
    if (reinterpret_cast<NMHDR*>(lParam)->code == PSN_SETACTIVE)
    {
        // Show next button
        //
        // Note new wParam flag -- when PSWIZBF_ELEVATIONREQUIRED flag
        // is specified, it indicates that the next page will require
        // elevation, so if the next button is being shown, show it as
        // a shield button.

        SendMessage(GetParent(hwndDlg), 
                    PSM_SETWIZBUTTONS, 
                    PSWIZBF_ELEVATIONREQUIRED, 
                    PSWIZBF_NEXT);

        // return 0 to accept the activation
        SetWindowLong(hwndDlg, DWLP_MSGRESULT, 0); 
    }
    break;

Добавление значка щита в кнопку диалогового окна задачи

Осторожностью Кнопка диалогового окна задачи никогда не должна требовать наличия значка щита UAC. Действие "Нажмите" на кнопке диалогового окна задачи, как ожидается, зафиксировать или отменить и закрыть диалоговое окно задачи. Было бы странно, чтобы такая кнопка затем отображала запрос на повышение прав для пользователя.

Повышение уровня модального диалогового окна

Используйте моникер высоты для повышения уровня COM-объекта, представляющего модальное диалоговое окно.

Задачи

  • Переместите диалоговое окно в COM-объект.
  • Предоставление метода ShowDialog().
  • Используйте API CreateElevatedComObject(), чтобы создать COM-объект и вызвать ShowDialog().

Этот API запустит экземпляр COM-объекта от имени администратора после прохождения процесса повышения прав.

Примечание Доступна версия этого API, которую сложнее вызывать. Упрощенная версия будет доступна в более поздней версии Windows Vista.

Рекомендации по обучению и помощи пользователей

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

Рекомендации по пользовательскому интерфейсу только администратора

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

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

Когда следует добавить значок щита в пользовательский интерфейс приложения

Приложение выбора администратора

Процесс с повышенными привилегиями или COM-объект

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

  • Приложение запускает вторую программу с помощью ShellExeucute() для выполнения задачи администрирования. Вторая программа будет помечена параметром requestedExecutionLevel requireAdministrator, что вызовет запрос на утверждение пользователя. Эта вторая программа будет выполняться с полным административным маркером доступа и сможет выполнять нужную задачу.
  • Приложение запускает COM-объект с помощью CreateElevatedComObject(). Этот API запустит COM-объект с полным маркером административного доступа после утверждения, и этот COM-объект сможет выполнить требуемую задачу.

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

В следующем списке подробно описаны требования для процесса с повышенными привилегиями или COM-объекта:

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

В следующем списке описаны преимущества правильного проектирования процесса с повышенными привилегиями или COM-объекта.

  • Это лучший общий пользовательский интерфейс для обоих типов пользователей. Будет запущен пользовательский интерфейс, который будет доступен для просмотра всем пользователям, и все функции контроля учетных записей в этом пользовательском интерфейсе будут доступны всем. Только в том случае, если требуется задача администратора, пользователь пытается повысить уровень, чтобы завершить задачу.
  • Выполнение этой работы позволит вам в полной мере соответствовать UAC.
  • Разделение пользовательского интерфейса и COM является хорошей архитектурной практикой.

Щелкнув значок щита, приложение запускает программу с повышенными привилегиями или объект COM с повышенными привилегиями для выполнения задачи.

Приложение, доступное только администратору

В этом случае для первоначального запуска приложения требуется утверждение администратора. Этот метод называется "prompt before launch". После запуска приложение запускается с полным маркером административного доступа и, следовательно, может выполнять необходимые административные задачи. Этот метод является наименее трудоемким для разработчика. Манифест приложения помечается параметром requestedExecutionLevel requireAdministrator.

Важно Хотя это требует наименьшего объема работы для разработчика, обратите внимание, что, как и в других административных приложениях в Windows Vista, администраторам придется повысить уровень, чтобы использовать это приложение, и что обычные пользователи не смогут использовать это приложение.

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

  • Манифест приложения должен содержать метку requestedExecutionLevel, заданную как requireAdministrator.
  • Пользователь запрашивает утверждение администратора перед запуском приложения Windows с полным административным маркером доступа.

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

  • Операционной системе не нужно "угадывать", является ли приложение установки административным.
  • Обычные пользователи автоматически получают указание на то, что операция является административной. Например, при отображении значка приложения, помеченного requireAdministrator, в значок встроен щит.
  • В Windows Vista, если пометить приложение как requireAdministrator, вы знаете, что после его запуска оно будет выполняться с полным маркером доступа администратора. Пользователи должны повысить уровень, чтобы запустить приложение (от имени администратора в режиме утверждения Администратор или с помощью запуска от имени администратора).

Примечание Пометка приложения requireAdministrator не приводит к автоматическому повышению уровня приложения. Пользователю по-прежнему потребуется предоставить согласие на повышение прав для запуска приложения. Невозможно пометить приложение в Windows Vista для автоматического повышения уровня.

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

  • Это означает, что все пользователи увидят запрос на повышение прав (запрос учетных данных или запрос согласия) до того, как пользовательский интерфейс будет виден. Это также означает, что никто не сможет просто просмотреть текущие параметры, пока после проверки подлинности с учетными данными администратора
  • Если вы помечаете requireAdministrator в приложении установки, следует помнить, что пользователь, выполняющий установку, отличается от пользователя, который может использовать приложение. Поэтому не следует изменять HKEY_CURRENT_USER (HKCU) и другие параметры для каждого пользователя, например запись в профиль пользователя, во время административной настройки.

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

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

Смешанное приложение

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

Смешанное приложение не может получить дополнительные права администратора после запуска; поэтому он не обеспечивает гибкость процесса с повышенными привилегиями или метода COM-объекта, описанного ранее. Это наиболее полезно для приложений, которым требуется маркер доступа, превышающий маркер доступа обычного пользователя, но не полный администратор.

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

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

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

  • Разработчик должен динамически изменять поведение приложения на основе прав администратора Windows и прав пользователя, доступных у пользователя.
  • Стандартный пользователь не может когда-либо действовать с функциями административного уровня в пользовательском интерфейсе. Нет возможности повышения прав запроса после запуска программы (администраторы должны повысить уровень, прежде чем открывать пользовательский интерфейс).

Примечание Существует один обходной путь для предыдущего маркера. Администратор может запустить командную строку с повышенными привилегиями на компьютере обычного пользователя и запустить приложение из командной строки. Например, щелкните правой кнопкой мыши командную строку, выберите Запуск от имени администратора и введите в командной строке applicationname.exe.

Взаимодействие с пользователем ветвлением между обычным пользователем и администратором в режиме утверждения Администратор.

Пример смешанного приложения: приложение резервного копирования

Приложение может быть запущено членом группы Операторы резервного копирования. Затем программа проверит, что для работы программы достаточно высокого уровня прав администратора Windows и прав пользователя, доступных пользователю. Дополнительные сведения о поведении запуска программы см. в разделе Маркировка манифеста приложения и поведение запуска приложения этого документа.

Ключевые решения для разработки приложений Administrator-Only

Внутренние бизнес-объекты

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

  • Модель брокера Администратор
  • Модель службы Back-End
  • Модель com-объектов Администратор

Модель брокера Администратор

В модели брокера Администратор приложение разбивается на два независимых исполняемых файла: стандартный пользовательский и административный. Разработчик, используя манифест приложения, помечает программу стандартного пользователя параметром requestedExecutionLevel из asInvoker, а административную программу — параметром requestedExecutionLevel requireAdministrator. Сначала пользователь запустит программу стандартного пользователя. Когда пользователь пытается выполнить операцию, которая, как известно стандартной пользовательской программе, требует полного маркера доступа администратора, он выполняет ShellExecute() и запускает административную программу. API Windows ShellExecute() просматривает манифест и запрашивает утверждение у пользователя перед запуском приложения с полным административным маркером доступа пользователя. Затем административная программа может выполнять административные задачи.

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

Примечание Нет канала связи между двумя программами после запуска второй программы

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

  • Мастеры. Когда мастер оборудования понимает, что необходимый драйвер не установлен на компьютере или находится в утвержденном расположении предприятия, ему требуется приложение с повышенными привилегиями с возможностью перемещения драйвера в хранилище компьютера.
  • Autorun.exe вызов Setup.exe. При первом включении компакт-диска игры требуется выполнить autorun.exe настройку приложения. При второй вставке компакт-диска по умолчанию выполняется игра.

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

В следующем списке описаны некоторые недостатки использования модели брокера Администратор.

  • Переходы от приложения к приложению могут запутать пользователя. Пользователю может быть трудно узнать, почему новое приложение "всплывает" на мониторе.
  • Кроме того, между этими двумя приложениями сложнее передать состояние. Например, вы не будете использовать его для передачи состояния между стандартной панелью управления пользователем (CPL) и ее коллегой-администратором, просто чтобы разрешить одной и той же CPL иметь административные и неадминистративные функции. Стандартному пользователю CPL придется где-то хранить свое состояние.
  • При разделении функциональных возможностей между двумя программами часто реплицируется много реплицированного кода.

Чтобы реализовать модель брокера администрирования, создайте две программы (одна обычная и одна административная), пометьте их соответствующим манифестом requestedExecutionLevel и запустите административную программу из стандартной пользовательской программы с помощью ShellExecute().

Модель службы Back-End

В модели серверной службы приложение снова разбивается на два независимых исполняемых файла: стандартный пользовательский исполняемый файл, предоставляющий пользователю пользовательский интерфейс, и серверную службу, запущенную в системе. Для обмена данными между ними используется удаленный вызов процедур (Майкрософт). Интерфейсное приложение помечается параметром requestedExecutionLevel asInvoker, а серверная служба выполняется как SYSTEM. Обмен данными между приложением и серверной службой осуществляется с помощью RPC.

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

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

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

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

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

Объектная модель COM Администратор

Эта модель включена здесь, но подробно обсуждалась ранее в этом документе. Объектная модель администрирования COM позволяет динамическим административным привилегиям выполнять определенные операции из приложения или панели управления.

Основное преимущество использования объектной модели COM администратора заключается в том, что она обеспечивает наилучшее взаимодействие с пользователем.

В следующем списке описаны некоторые недостатки использования объектной модели COM администратора.

  • Требует больше всего работы для разработчика, так как каждая функция приложения должна быть оценена и протестирована на предмет функциональности администратора, а эта функция должна быть предоставлена серверным COM-объектом.
  • Пользователю необходимо предоставить утверждение повышения прав.
  • Результирующая "единица" стандартного пользовательского приложения и Администратор серверного COM-объекта теперь "доступна для управления" и не защищена UIPI и другими механизмами изоляции.

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

5. Изменение установщика приложения

Ниже приведены рекомендации для установки приложений с надлежащим поведением в среде Windows Vista или UAC. Этот список не является исчерпывающим. Более подробное описание требований к логотипу для Windows Vista, включая требования к UAC, см. в документации по логотипу Windows Vista и в подробной версии последнего проекта руководства по логотипу Windows Vista.

Используйте эти требования при перепроектировки приложения.

Используйте установщик Windows 4.0 для пакета установки.

Многие из следующих требований уже интегрированы в подсистему установщика Windows. Использование установщика Windows для пакета установки поможет вам выполнить требования к установке Windows Vista.

Используйте файлы с управлением версиями и не понижайте их во время установки.

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

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

Приложения должны быть установлены в папке в каталоге Programs Files. Чтобы настроить эту настройку, можно использовать свойство ProgramFilesFolder в таблице Direcotry пакета установщика Windows. Данные конфигурации для каждого пользователя должны храниться в файлах в каталоге \Users\username\AppData или в разделах реестра в корневом каталоге HKCU. Пользовательские данные, шаблоны и файлы, созданные приложением, имеют правильное расположение в подкаталоге \Users\username. Хотя это не применялось в прошлом, так как многие пользователи запускали программы с полным маркером доступа администратора, приложения, которые не размещают сведения в правильном расположении, скорее всего, завершатся сбоем. Это особенно актуально, если виртуализация отключена.

Используйте согласованное расположение папки при установке общих компонентов.

Общие компоненты следует установить в каталог Common Files с помощью свойства CommonFilesFolder в таблице Directory пакета установщика Windows. Управление общими компонентами может быть проблематичным, и его следует избегать, если это возможно. Разработчик, который не устанавливает общие компоненты последовательно, может получить сведения о регистрации COM, указывающие на старые компоненты. Модули слияния установщика Windows (MSM) специально предназначены для обеспечения согласованной установки общих компонентов в контексте всех пакетов, устанавливающих общий компонент. Другие проблемы возникают, когда изменения общих компонентов приводят к сбою существующих приложений. Одним из способов решения этой проблемы является создание приложений с помощью сборок Microsoft .NET или Win32 с управлением версиями.

Выполните откат установки в случае сбоя установки.

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

Не устанавливайте ярлыки приложений по всему профилю пользователя.

Хотя может быть заманчиво добавить значок приложения к каждой известной точке воздействия в Windows, это часто приводит к тому, что пользователи чувствуют, что они потеряли контроль над компьютером. Затем пользователи вынуждены вручную удалить эти сочетания клавиш, чтобы вернуть компьютеру желаемый внешний вид. Если разработчик хочет добавить значки на рабочий стол, попросите пользователя предоставить разрешение во время установки. Windows Vista устраняет возможность обнаружения приложений после установки и списка последних использованных приложений, чтобы избежать большого обхода меню "Пуск".

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

Несмотря на то, что во время установки можно добавить программы в группу запуска или ключ запуска, это увеличивает нагрузку на систему. Со временем производительность системы пользователя может значительно снизиться. Если приложение может использовать фоновую задачу, разрешите ее настройке пользователем. Кроме того, добавление задачи запуска с помощью ключа выполнения HLKM может помешать учетной записи обычного пользователя изменить поведение в будущем. Если пользователь хочет, чтобы приложение запускалось во время входа, сохраните сведения в ключе выполнения HKCU.

Следуйте логике чистого удаления.

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

  • Все файлы и папки приложений, не являющиеся общими.
  • Общие файлы приложения, количество ссылок которых (refcount) достигает нуля.
  • Записи реестра, за исключением ключей, которые могут совместно использоваться другими программами.
  • Все сочетания клавиш из меню "Пуск", созданные приложением во время установки.
  • Пользовательские настройки можно считать пользовательскими данными и оставить позади, но следует включить возможность полностью очистить удаление.
  • Само средство удаления (если не используется установщик Windows).

6. Создание и внедрение манифеста приложения с помощью приложения

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

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

Схема манифеста приложения

Манифесты приложений не являются новыми в выпуске Windows Vista. Манифесты использовались в Windows XP, чтобы помочь разработчикам приложений определить, с какими версиями библиотек DLL тестировалось приложение. Предоставление уровня выполнения является расширением существующей схемы манифеста.

Манифест приложения Windows Vista дополнен атрибутами, которые позволяют разработчикам помечать свои приложения запрошенным уровнем выполнения. Ниже приведен формат для этого.

<requestedExecutionLevel
level="asInvoker|highestAvailable|requireAdministrator"
uiAccess="true|false"/>

Возможные запрошенные значения уровня выполнения

Значения Описание Комментарий
asInvoker Приложение выполняется с тем же маркером доступа, что и родительский процесс. Рекомендуется для стандартных пользовательских приложений. Выполните рефрактор с внутренними точками возвышения, как описано в этом документе.
highestAvailable Приложение выполняется с самыми высокими привилегиями, которые может получить текущий пользователь. Рекомендуется для приложений смешанного режима. Запланируйте рефрактор приложения в следующем выпуске.
requireAdministrator Приложение выполняется только для администраторов и требует запуска приложения с полным маркером доступа администратора. Рекомендуется только для приложений администратора. Внутренние точки повышения не требуются. Приложение уже выполняется с повышенными привилегиями.

Примечание Приложения, размещающие приложения, могут стать приложениями, доступными только для обычных пользователей или администраторов, только если они поддерживают определенный тип размещенного приложения. Например, MMC.exe теперь размещает только административные оснастки, а Explorer.exe — только стандартный пользовательский код.

Поведение системы

Приложение Markin Виртуализации?
Немаркированных Да
asInvoker Нет
requireAdministrator Нет
highestAvailable Нет

Маркировка манифеста приложения и поведение запуска приложения

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

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

Поведение при запуске приложения для члена локальной группы администраторов

Маркер доступа родительского процесса Политика согласия для участников группы локальных администраторов None или asInvoker highestAvailable requireAdministrator
Обычный пользователь Запрос отсутствует Приложение запускается от имени обычного пользователя Приложение запускается с полным маркером административного доступа; нет запроса Приложение запускается с полным маркером административного доступа; нет запроса
Обычный пользователь Запрос согласия Приложение запускается от имени обычного пользователя Приложение запускается с полным маркером административного доступа; запрос согласия Приложение запускается с полным маркером административного доступа; запрос согласия
Обычный пользователь Запрос учетных данных Приложение запускается от имени обычного пользователя Приложение запускается с полным маркером административного доступа; запрос учетных данных Приложение запускается с полным маркером административного доступа; запрос учетных данных
Администратор (контроль учетных записей отключен) Н/Д Приложение запускается с полным маркером административного доступа; нет запроса Приложение запускается с полным маркером административного доступа; нет запроса Приложение запускается с полным маркером административного доступа; нет запроса

Поведение запуска приложения для учетной записи обычного пользователя

Маркер доступа родительского процесса Политика согласия для обычных пользователей asInvoker highestAvailable requireAdministrator
Обычный пользователь Запрос отсутствует Приложение запускается от имени обычного пользователя Приложение запускается от имени обычного пользователя Не удается запустить приложение
Обычный пользователь Запрос учетных данных Приложение запускается от имени обычного пользователя Приложение запускается от имени обычного пользователя Запрос учетных данных администратора перед запуском приложения
Обычный пользователь (контроль учетных записей отключен) Н/Д Приложение запускается от имени обычного пользователя Приложение запускается от имени обычного пользователя Приложение может запуститься, но позже завершится сбоем

Поведение запуска приложения для обычного пользователя с дополнительными привилегиями (например, оператор резервного копирования)

Маркер доступа родительского процесса Политика согласия для обычных пользователей asInvoker highestAvailable requireAdministrator
Обычный пользователь Нет запроса Приложение запускается от имени обычного пользователя Приложение запускается от имени обычного пользователя с дополнительными привилегиями Не удается запустить приложение
Обычный пользователь Запрос учетных данных Приложение запускается от имени обычного пользователя Запрос учетных данных перед запуском приложения Запрос учетных данных администратора перед запуском приложения
Обычный пользователь (контроль учетных записей отключен) Н/Д Приложение запускается от имени обычного пользователя Приложение запускается от имени обычного пользователя с дополнительными привилегиями Приложение может запуститься, но позже произойдет сбой

Значения uiAccess

Возможные значения uiAccess

Значение Описание
Неверно Приложению не нужно вводить входные данные в пользовательский интерфейс другого окна на рабочем столе. Приложения, которые не предоставляют специальные возможности, должны установить для этого флага значение false. Приложения, которые требуются для ввода данных в другие окна на рабочем столе (например, на экранной клавиатуре), должны установить для этого значения значение true.
True Приложению разрешено обходить уровни управления пользовательского интерфейса для ввода данных в окна с более высокими привилегиями на рабочем столе. Этот параметр следует использовать только для приложений со специальными возможностями пользовательского интерфейса.

Важно Для правильного запуска приложений с флагом uiAccess , установленным в значение true , должна быть подписана authenticode . Кроме того, приложение должно находиться в защищенном расположении в файловой системе. \Program Files\ и \windows\system32\ в настоящее время являются двумя допустимыми защищенными расположениями.

Создание внедренного манифеста с помощью Microsoft Visual Studio

Visual Studio предоставляет возможность автоматического внедрения XML-файла манифеста в раздел ресурса образа переносимого исполняемого файла (PE). В этом разделе описывается, как использовать Visual Studio для создания подписанного образа PE, содержащего манифест. Таким образом, этот манифест может включать необходимые атрибуты requestedExecutionLevel, позволяющие приложению выполняться с требуемым уровнем привилегий в Windows Vista. При запуске программы сведения о манифесте будут извлечены из раздела ресурсов среды предустановки и использованы операционной системой. Нет необходимости использовать графический пользовательский интерфейс Visual Studio для включения манифеста. После внесения необходимых изменений в исходный код компиляция и связывание с помощью программ командной строки также включает манифест в результирующий образ PE.

Файл манифеста

Чтобы пометить приложение, сначала создайте файл манифеста для использования с целевым приложением. Это можно сделать с помощью любого текстового редактора. Имя файла манифеста должно совпадать с именем target.exe с расширением .manifest , как показано в приведенном ниже примере.

Executable: IsUserAdmin.exe 
Manifest:IsUserAdmin.exe.manifest
Sample application manifest file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

Части манифеста, которые необходимо настроить для приложения, выделены полужирным шрифтом. Среди них:

  • Удостоверение сборки
  • Имя
  • Тип.
  • Описание
  • Атрибуты в requestedExecutionLevel

Создание манифестов приложений в коде C/C++ с помощью Visual Studio 2005 для приложений только для Windows Vista

Важно Если приложение предназначено для работы в Windows Vista и Windows XP, необходимо выполнить процедуры, описанные в следующем разделе: Создание и внедрение манифеста с помощью Microsoft Visual Studio 2005 для приложений Windows XP и Windows Vista.

Затем необходимо присоединить манифест к исполняемому файлу, добавив строку в файл ресурсов приложения (RC-файл), чтобы Microsoft Visual Studio встроит манифест в раздел ресурсов pe-файла. Для этого поместите манифест в тот же каталог, что и исходный код проекта, который вы создаете, и измените RC-файл, включив в него следующие строки.

#define MANIFEST_RESOURCE_ID 1
MANIFEST_RESOURCE_ID RT_MANIFEST "IsUserAdmin.exe.manifest"

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

Создание и внедрение манифеста с помощью Microsoft Visual Studio 2005 для приложений Windows XP и Windows Vista

В Visual Studio 2005 интерфейс интегрированной среды разработки (IDE) C/C++, который позволяет включать дополнительные файлы манифеста в целевой исполняемый файл, выполняет некоторую обработку в XML-коде, в результате чего вставляется повторяющийся тег xmlns. По этой причине описанный ранее метод включения манифеста в проект C++ Visual Studio 2005 нельзя использовать, если приложение должно выполняться в Windows Vista и Windows XP. Следующие процедуры изменяются для включения явных тегов версии в раздел trustInfo.

Для средства mt.exe планируется исправление, чтобы устранить проблему, из-за которой создается повторяющееся объявление пространства имен в XML. Пока не будет доступна новая версия mt.exe, можно избежать проблемы объединения манифестов, явно добавив теги версии в раздел trustinfo манифеста. Пример манифеста показан ниже:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
      <ms_asmv2:security>
         <ms_asmv2:requestedPrivileges>
            <ms_asmv2:requestedExecutionLevel level="asInvoker">
            </ms_asmv2:requestedExecutionLevel>
         </ms_asmv2:requestedPrivileges>
      </ms_asmv2:security>
   </ms_asmv2:trustInfo>
</assembly>

Проект C или C++

В следующей процедуре описано, как создать манифест для типа проекта C или C++ в Visual Studio 2005.

Создание манифеста для проекта C или C++ в Microsoft Visual Studio 2005

  1. Открытие проекта в Microsoft Visual Studio 2005
  2. В разделе Проект выберите Свойства.
  3. В разделе Свойства выберите Инструмент манифеста, а затем — Входные и выходные данные.
  4. Добавьте имя файла манифеста приложения в разделе Дополнительные файлы манифеста.
  5. Перестройте приложение.

Примечание Обновленные манифесты, включающие явные теги версий, позволят приложению правильно работать как в Windows Vista, так и в Windows XP.

Управляемый код (C#, J# и Visual Basic)

В настоящее время Visual Studio не внедряет манифест по умолчанию в управляемый код. Для управляемого кода разработчик просто вставляет манифест по умолчанию в целевой исполняемый файл с помощью mt.exe. Действия будут следующими:

Чтобы вставить файл манифеста по умолчанию в целевой исполняемый файл с помощью mt.exe

  1. Используйте текстовый редактор, например Блокнот Windows, для создания файла манифеста по умолчанию temp.manifest.
  2. Используйте mt.exe для вставки манифеста. Команда будет иметь следующий тип: mt.exe –manifest temp.manifest –outputresource:YourApp.exe;#1

Добавление манифеста приложения в качестве шага в Visual Studio после сборки

Добавление манифеста приложения также можно автоматизировать на этапе после сборки. Этот параметр доступен для C/C++ и двух языков управляемого кода C# и J#.

Примечание В настоящее время интегрированная среда разработки не включает параметр после сборки для приложения Visual Basic.

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

mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" 
-updateresource:"$(TargetDir)$(TargetName).exe;#1"

7. Тестирование приложения

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

Используйте следующий рабочий процесс для тестирования приложения.

Тестирование приложения на окончательную совместимость UAC

  1. Протестируйте приложение с помощью анализатора стандартного пользователя.
  2. Войдите на компьютер Windows Vista с правами администратора в режиме утверждения Администратор и запустите программу. Проверьте все функциональные возможности и обратите внимание на взаимодействие с пользователем. Сообщите о любых ошибках прав или пользовательском интерфейсе соответствующим образом.
  3. Войдите на компьютер Windows Vista в качестве обычного пользователя и запустите программу. Убедитесь, что вы протестируете все функциональные возможности и обратите внимание на различия или сбои в стандартном пользовательском интерфейсе по сравнению с администратором в режиме утверждения Администратор. Соответствующим образом сообщите о любых ошибках повышения прав и взаимодействии с пользователем.

8. Подпись приложения в Authenticode

Теперь приложение содержит манифест, который будет обнаружен, и информация будет проанализирована при запуске приложения. Однако исполняемый файл может быть изменен. Чтобы избежать этого, следует подписать приложение с помощью подписи Authenticode. Обратите внимание, что Windows Vista будет иметь возможность запретить запуск любого неподписаного приложения с маркером доступа полного администратора. Если вы хотите, чтобы приложение правильно работало в заблокированных средах и отображало более удобный пользовательский интерфейс, оно должно быть подписано подписью Authenticode.

Чтобы подписать приложение, можно создать сертификат из makecert.exe или получить ключ подписи кода из одного из коммерческих центров сертификации (ЦС), например VeriSign, Thawte или ЦС Майкрософт.

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

Если вы используете файл makecert.exe для создания пары ключей подписывания, имейте в виду, что он создает только 1024-разрядный ключ. Подписи Authenticode должны быть по крайней мере 2048-разрядным ключом. Файл makecert.exe следует использовать только для тестирования.

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

Использование makecert.exe для создания пары ключей подписывания

  1. Создайте сертификат.
  2. Подпишите код.
  3. Установите тестовый сертификат.

Пример процедуры подписывания

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

Шаг 1. Создание сертификата

makecert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" 
ContosoTest.cer

параметрыmakecert.exe

Параметр Описание
/r создает самозаверяющий сертификат
/Pe Делает закрытый ключ сертификата экспортируемым на компьютер для подписывания.
/ss StoreName Имя хранилища сертификатов, в которое будет храниться тестовый сертификат. Пример: PrivateCertStore
/n X500Name Имя субъекта сертификата X500. Пример: Contoso.com(Test)
CertificateName.cer Имя сертификата. Пример: ContosoTest.cer

Шаг 2. Подписание кода

Signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t 
http://timestamp.verisign.com/scripts/timestamp.dll file.exe

Шаг 3. Установка тестового сертификата

Установка тестового сертификата

  1. Запустите командное окно с повышенными привилегиями, щелкнув правой кнопкой мыши командную строку и выбрав Запуск от имени администратора.
  2. В командной строке введитеmmc.exeи нажмите клавишу ВВОД.
  3. В консоли mmc выберите Файл , а затем выберите Добавить или удалить оснастку...
  4. В разделе Добавление или удаление оснасток выберите Сертификаты, нажмите кнопку Добавить, а затем нажмите кнопку ОК.
  5. В диалоговом окне Оснастки "Сертификаты" выберите Учетная запись компьютера и нажмите кнопку Далее.
  6. В разделе Выбор компьютера выберите Локальный компьютер и нажмите кнопку ОК.
  7. В разделе Добавление или удаление оснасток нажмите кнопку ОК.
  8. В оснастке Сертификаты перейдите в раздел Доверенные корневые центры сертификации, щелкните правой кнопкой мыши Сертификаты, выберите Все задачи, а затем импорт ...
  9. В мастере импорта сертификатов импортируйте тестовый сертификат ContosoTest.cer.

9. Участие в программе логотипов Windows Vista

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

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

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

Если предприятие уже провело инвентаризацию программного обеспечения, которое выполняется в его среде, следующим шагом является перепаковка этих приложений для развертывания. Корпорация Майкрософт рекомендует использовать формат установщика Windows, так как он имеет уникальную возможность отделять управление параметрами для каждого пользователя от параметров для каждого компьютера. Этот тип управления, как правило, не поддерживается в других форматах упаковки, особенно в исполняемых файлах развертывания, которые просто выполняются учетной записью с большими привилегиями, например SYSTEM. Библиотека MSDN содержит множество статей в установщике Windows; Одним из предложений является стратегия развития документации по установщику Windows.

Формат установщика Windows позволяет пользователям управлять установкой этих приложений с помощью групповая политика (Microsoft IntelliMirror), а также с помощью SMS. Чтобы включить установку по запросу с расширением файла или ярлыками, в пакете на основе установщика Windows должны быть указаны рекламные данные: ярлык, расширение, значок и глагол. Рекомендуется также заполнить классы, MIME, ProgID и TypeLib. Дополнительные сведения о IntelliMirror и установке по запросу см. в статье Исправление Per-User управляемых приложений .

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

Развертывание ClickOnce — это технология установки Microsoft .NET, которая автоматически устанавливает и настраивает клиентское приложение, когда пользователь щелкает ссылку на манифест, например манифест на веб-сайте, на компакт-диске или по пути универсального соглашения об именовании (UNC). По умолчанию приложение копирует себя в папку Временные файлы Интернета и запускается в ограниченной среде.

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

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

Развертывание на одном компьютере

Чтобы развернуть приложение для одного компьютера, администратор должен опубликовать приложение на этом компьютере.

Развертывание для всех пользователей в домене

Чтобы объявить объявление для всех пользователей в домене, администратор должен "опубликовать" приложение с помощью групповая политика развертывания. В настоящее время только компонент развертывания программного обеспечения на основе групповая политика операционных систем Windows Server® 2003 и операционной системы Windows 2000 Server использует эту функцию.

Установка исправлений для приложений в качестве обычного пользователя с помощью установщика Windows 4.0

Исправление учетной записи стандартного пользователя позволяет авторам пакетов установщика Windows определять подписанные исправления, которые могут быть применены будущим обычным пользователем. Чтобы включить установку исправлений для обычных пользователей с помощью установщика Windows 4.0, необходимо выполнить следующие условия:

  • Приложение было установлено с помощью установщика Windows 4.0.
  • Изначально приложение было установлено для каждого компьютера.
  • Таблица MsiPatchCertificate присутствует и заполняется в исходном пакете установщика окна (.msi файле).
  • Исправления имеют цифровую подпись с помощью сертификата, указанного в таблице MsiPatchCertificate.
  • Исправления можно проверить на соответствие цифровой подписи.
  • Исправление учетной записи обычного пользователя не было отключено, задав свойство MSIDISABLELUAPATCHING или политику DisableLUAPatching.

Стандартное поведение удаления пользователя установщика Windows 4.0

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

Устранение распространенных проблем

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

Часто возникающие проблемы.

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

Проблемы с установкой ActiveX

Элементы ActiveX должны быть установлены администратором. Элементы ActiveX обычно используются в бизнес-приложениях для расширения возможностей веб-браузера для создания более гибких пользовательских интерфейсов или повышения прав доступа к ресурсам компьютера, обычно запрещенного для приложений, работающих в веб-браузере. Элементы ActiveX обычно устанавливаются путем внедрения ссылки на элемент Управления ActiveX на веб-странице. Это приведет к тому, что интернет-Обозреватель Майкрософт скачит и установит элемент управления, если он не существует на локальном компьютере. Как правило, элементы ActiveX, скачанные таким образом, находятся в каталоге %HOMEPATH%\Local Settings\Temporary Internet Files, который доступен для записи обычными пользователями. Однако для работы в Обозреватель Интернета элементы управления должны содержать несколько записей реестра, что невозможно для пользователей, не являющихся администраторами.

Решение

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

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

Документы ActiveX не устанавливаются

Документы ActiveX — это нерекомендуемая технология Microsoft Visual Basic 4 и Microsoft Visual Basic 5. Их можно скачать так же, как элементы ActiveX.

Решение

Так как Visual Basic 4 и Visual Basic 5 являются устаревшими, корпорация Майкрософт рекомендует заменить приложение. Документ ActiveX должен быть установлен как часть установки клиента; однако обновления документа будут ограничены без повторного развертывания с помощью SMS или групповая политика.

Требуется приложение, платформа или надстройка

Многие приложения имеют зависимости от другого программного обеспечения, которое может не быть установлено по умолчанию, либо потому, что они уже доступны на компьютере, либо потому, что другое приложение не предоставляет распространяемые двоичные файлы для использования третьими лицами. В обычных обстоятельствах пользователю будет положено указание приобрести и установить дополнительное программное обеспечение. На управляемом рабочем столе установка невозможна. Например, Adobe Acrobat, Microsoft Office, веб-компоненты Office, WinZip и политика безопасности Microsoft .NET для ИТ-отдела.

Решение

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

Для установки или установки исправлений требуется административное разрешение

Так как для установки программы требуется добавить файлы в program Files, ей всегда потребуются административные разрешения и, следовательно, она должна запускаться от имени пользователя с повышенными разрешениями.

Примечание Вы также можете "отправить" исправление с помощью SMS или групповая политика в сочетании с панелью управления Установка и удаление программ (ARP). пользователь выбирает программное обеспечение для установки, а установщик системы делает все остальное— пользователь не должен быть администратором. Для начальных установок это можно решить, упаковав программное обеспечение для отправки агента установки. Однако некоторые приложения используют частые автоматические обновления, которые могут не соответствовать централизованно управляемой модели приложений.

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

Решение

  • Упакуйте приложение или исправление для развертывания с помощью SMS. Приложения по-прежнему могут обнаруживать, что обновление доступно (при условии, что они делают это без административных разрешений) и могут перенаправляться на сайт подготовки.
  • Укажите, требуются ли приложению повышенные разрешения компьютера, такие как файловая система, доступ к реестру или com-взаимодействие. В противном случае приложение можно переписать как пакет развертывания ClickOnce, который будет выполняться в песочнице Microsoft .NET.
  • Преобразование в веб-приложение без зависимостей на стороне клиента.

Per-User расположения параметров приложения

Для Windows Vista параметры приложения, которые необходимо изменить во время выполнения, должны храниться в одном из следующих расположений:

  • CSIDL_APPDATA
  • CSIDL_LOCAL_APPDATA
  • CSIDL_COMMON_APPDATA

Документы, сохраненные пользователем, должны храниться в CSIDL_MYDOCUMENTS.

Примечание Папка "Документы " пользователя больше не хранится в разделе Документы и параметры. В Windows Vista новый корневой каталог в файловой системе с именем Пользователи теперь содержит профили для пользователей компьютера.

Так как эти каталоги изменились, разработчикам рекомендуется использовать CSIDL для поиска пути к определенным хорошо известным каталогам независимым от системы способом. Дополнительные сведения см. в разделе CSIDLs.

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

  • CSIDL_PROFILE
  • CSIDL_COMMON_APPDATA

Примечание Обычные пользователи не могут выполнять запись в Users\Common.

  • C:\Users\Common>cd "Application Data"
    • C:\Users\Common\Application Data>echo file > File.txt
    • C:\Users\Common\Application Data>

Приложения не должны пытаться выполнять запись в другие расположения, например:

  • C:\windows.
  • C:\Windows\System32.
  • Program Files\{application}.
  • C:\{application}.

Примечание Это сработает, если пользователь создал папку, что могут сделать члены группы Пользователи по умолчанию.

Приложение пытается специально создать C:\Users\Profiles\{user} запрещено, так как пользователь может создавать папки только в папке C:\Users\{user}. Выбранное расположение, как представляется, путается в зависимости от того, где корпорация Майкрософт сохранила папку Документы в предыдущих версиях операционной системы.

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

  • CSIDL_APPDATA
  • CSIDL_LOCAL_APPDATA
  • CSIDL_COMMON_APPDATA

Документы, сохраненные пользователем, должны храниться в папке CSIDL_MYDOCUMENTS.

Все пути не должны быть жестко запрограммированы, но должны использовать функцию Environment.GetFolderPath().

По умолчанию приложение сохраняет в защищенном каталоге

Некоторые приложения позволяют пользователям сохранять или экспортировать данные на локальный компьютер. Часто в диалоговом окне по умолчанию используются такие места, как C:\, в которые обычные пользователи не имеют разрешений на запись. Кроме того, некоторые приложения не реагируют на сбой кода для записи файла из-за отказа в доступе из операционной системы.

Решение

Предположим, что пользователи могут выполнять запись только в свои профили. Для документов, намеренно сохраненных пользователями, инициализируйте диалоговые окна, чтобы начать с Документа (Environment.GetFolderPath(Environment.SpecialFolder.Personal). Помните, что диалоговое окно Сохранение позволит пользователю переходить в другие расположения, кроме профиля пользователя, поэтому приложение должно включать логику, чтобы гарантировать, что он не сможет корректно работать, если пользователь выбирает каталог, отличный от каталога, расположенного в его профиле.

Ссылки

Этот раздел содержит справочник по виртуализации и справочник по параметрам безопасности.

Справочник по виртуализации

Виртуализация файлов

  • Виртуализация (%SYSTEMROOT%, %PROGRAMDATA%, %PROGRAMFILES%\(подкаталоги)
  • Перенаправление на: %LOCALAPPDATA%\VirtualStore
  • Исключенные двоичные исполняемые файлы: .exe, .dll, .sys

Виртуализация реестра.

  • Virtualize (HKLM\SOFTWARE)
  • Перенаправление на: HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\<Application Registry Keys>
  • Ключи, исключенные из виртуализации
  • HKLM\Software\Classes
  • HKLM\Software\Microsoft\Windows
  • HKLM\Software\Microsoft\Windows NT

Сущности, к которым применяется триггер

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

Справочник по параметрам безопасности UAC

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

Примечание Процедуры, представленные в этом разделе, предназначены для администрирования неуправляемых компьютеров. Чтобы использовать групповая политика для централизованного администрирования параметров в управляемой среде, используйте пользователи и компьютеры Active Directory (dsa.msc) вместо оснастки локального диспетчера политик безопасности (secpol.msc).

Настройка параметров безопасности UAC

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

Просмотр и установка параметров безопасности UAC с помощью диспетчера политик безопасности

  1. Нажмите кнопку Пуск , введите secpol.msc в поле поиска и нажмите клавишу ВВОД.
  2. В запросе на согласие контроля учетных записей нажмите кнопку Продолжить.
  3. В разделе Локальные параметры безопасности разверните узел Локальные политики, а затем щелкните Параметры безопасности.
  4. Щелкните правой кнопкой мыши параметр безопасности, который вы хотите изменить, и выберите Свойства.

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

Просмотр и настройка параметров безопасности UAC с помощью редактора объектов групповая политика

  1. Нажмите кнопку Пуск , введите gpedit.msc в поле поиска и нажмите клавишу ВВОД.
  2. В запросе на согласие контроля учетных записей нажмите кнопку Продолжить.
  3. В групповая политика разверните узел Конфигурация пользователя, а затем — Параметры безопасности.
  4. Щелкните правой кнопкой мыши параметр безопасности, который вы хотите изменить, и выберите Свойства.

Параметры безопасности UAC

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

Параметры безопасности UAC

Параметр Описание Значение по умолчанию
Контроль учетных записей пользователей: Администратор режим утверждения для встроенной учетной записи администратора. Существует два возможных параметра:
  • Включено. Встроенный администратор будет запускаться от имени администратора в режиме утверждения Администратор.
  • Отключено. Администратор запускается с полным маркером доступа администратора.
  • Отключено для новых установок и обновлений, где встроенный администратор не является единственным локальным активным администратором на компьютере. Встроенная учетная запись администратора по умолчанию отключена для установки и обновления на компьютерах, присоединенных к домену.
  • Включено для обновлений, когда Windows Vista определяет, что встроенная учетная запись администратора является единственным активным локальным администратором на компьютере. Если Windows Vista определяет это, встроенная учетная запись администратора также будет включена после обновления. Встроенная учетная запись администратора по умолчанию отключена для установки и обновления на компьютерах, присоединенных к домену.
Контроль учетных записей пользователей: поведение запроса на повышение прав для администраторов в режиме одобрения администратором Существует три возможных значения для этого параметра:
  • Повышение уровня без запроса: автоматическое повышение.
  • Запрос учетных данных. Перед продолжением требуется, чтобы пользователи вводили пароль для входа.
  • Запрос на согласие. Перед повышением уровня попросите пользователя об утверждении. Это параметр по умолчанию. 

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

Запрос согласия
Контроль учетных записей пользователей: поведение запроса на повышение прав для обычных пользователей Определяет запрос пользователя перед запуском программы с более высокими разрешениями. Эта политика действует только при включенном UAC. Ниже приведены доступные параметры конфигурации для этого параметра.
  • Автоматически отклонять запросы на повышение прав. Пользователям не будет предложено, когда приложение хочет выполнить административную задачу. Не удастся запустить приложение, и пользователю будет отказано в доступе или аналогичной ошибке.
  • Запрос учетных данных. Перед продолжением требуется, чтобы пользователи вводили пароль для входа.
Запрос учетных данных
Контроль учетных записей пользователей: обнаружение установки приложений и запрос на повышение прав Существует два возможных значения:
  • Включено: при обнаружении установщика Windows Vista запрашивает согласие или учетные данные.
  • Отключено: установка приложений будет автоматически завершатся сбоем или сбоем недетерминированным образом.
Активировано
Контроль учетных записей пользователей: повышение прав только для подписанных и проверенных исполняемых файлов Существует два возможных значения:
  • Включено: будут выполняться только подписанные исполняемые файлы. Этот параметр блокирует запуск неподписанных приложений.
  • Отключено: будет выполняться как подписанный, так и неподписанный код.
Выключено
Контроль учетных записей пользователей: повышать права для UIAccess-приложений только при установке в безопасных местах Существует два возможных значения:
  • Включено: система будет предоставлять права пользователя и привилегии UIAccess только исполняемым файлам, которые запускаются из %ProgramFiles% или %windir%. Списки управления доступом в этих каталогах гарантируют, что исполняемый файл не может изменяться пользователем (что в противном случае позволило бы повышение привилегий). Исполняемые файлы UIAccess, запущенные из других расположений, будут запускаться без дополнительных привилегий (т. е. они будут запускаться "asInvoker").
  • Отключено. Проверки расположения не выполняются, поэтому все приложения UIAccess будут запускаться с маркером полного доступа пользователя после утверждения пользователем.
Активировано
Контроль учетных записей пользователей: все администраторы работают в режиме одобрения администратором Существует два возможных значения:
  • Включено. При попытке выполнения административных операций будет предложено как администраторам, так и обычным пользователям. Стиль запроса зависит от политики.
  • Отключено: контроль учетных записей по сути "отключен", а служба AIS отключена от автоматического запуска.
Активировано
Контроль учетных записей пользователей: переключение к безопасному рабочему столу при выполнении запроса на повышение прав Существует два возможных значения:
  • Включено: отображает запрос на повышение прав UAC на защищенном рабочем столе. Безопасный рабочий стол может получать сообщения только от процессов Windows, что исключает сообщения от вредоносных программ. В результате запросы на согласие и учетные данные нельзя подделывать на защищенном рабочем столе.
  • Отключено. Запрос на повышение прав UAC отображается на рабочем столе пользователя.
Активировано
Контроль учетных записей пользователей: при сбоях записи в файл или реестр виртуализация в размещение пользователя Существует два возможных значения:
  • Включено. Приложения, в которых отсутствует запись базы данных совместимости приложений или запрошенная маркировка уровня выполнения в манифесте приложения, не соответствуют UAC. В средах, использующих программное обеспечение, не соответствующее требованиям, этот параметр должен быть включен.
  • Отключено: приложения, совместимые с UAC, не должны выполнять запись в защищенные области и вызывать сбои записи. В результате среды, использующие только приложения, совместимые с UAC, должны отключить этот параметр. Несоответствующие приложения, которые пытаются выполнить запись в Program Files и %systemroot%, будут автоматически завершать сбой, если этот параметр отключен.
Активировано

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

Пример кода планировщика задач

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

//---------------------------------------------------------------------
//  This file is part of the Microsoft .NET Framework SDK Code Samples.
// 
//  Copyright (C) Microsoft Corporation.  All rights reserved.
// 
//This source code is intended only as a supplement to Microsoft
//Development Tools and/or on-line documentation.  See these other
//materials for detailed information regarding Microsoft code samples.
// 
//THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
//KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//PARTICULAR PURPOSE.
//---------------------------------------------------------------------

/****************************************************************************
* Main.cpp - Sample application for Task Scheduler V2 COMAPI                * Component: Task Scheduler                          
* Copyright (c) 2002 - 2003, Microsoft Corporation 
* This sample creates a task to at the time registered to start the desired task.                                                             *
****************************************************************************/
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <comdef.h>
#include <comutil.h>
//Include Task header files - Included in Windows Vista Beta-2 SDK from MSDN
#include <taskschd.h>
#include <conio.h>
#include <iostream>
#include <time.h>

using namespace std;

#define CLEANUP \
pRootFolder->Release();\
        pTask->Release();\
        CoUninitialize();

HRESULT CreateMyTask(LPCWSTR, wstring);

void __cdecl wmain(int argc, wchar_t** argv)
{
wstring wstrExecutablePath;
WCHAR taskName[20];
HRESULT result;

if( argc < 2 )
{
printf("\nUsage: LaunchApp yourapp.exe" );
return;
}

// Pick random number for task name
srand((unsigned int) time(NULL));
wsprintf((LPWSTR)taskName, L"Launch %d", rand());

wstrExecutablePath = argv[1];

result = CreateMyTask(taskName, wstrExecutablePath);
printf("\nReturn status:%d\n", result);

}
HRESULT CreateMyTask(LPCWSTR wszTaskName, wstring wstrExecutablePath)
{
    //  ------------------------------------------------------
    //  Initialize COM.
TASK_STATE taskState;
int i;
    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    if( FAILED(hr) )
    {
        printf("\nCoInitializeEx failed: %x", hr );
        return 1;
    }

    //  Set general COM security levels.
    hr = CoInitializeSecurity(
        NULL,
        -1,
        NULL,
        NULL,
        RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        0,
        NULL);

    if( FAILED(hr) )
    {
        printf("\nCoInitializeSecurity failed: %x", hr );
        CoUninitialize();
        return 1;
    }

    //  ------------------------------------------------------
    //  Create an instance of the Task Service. 
    ITaskService *pService = NULL;
    hr = CreateElevatedComObject( CLSID_TaskScheduler,
                           NULL,
                           CLSCTX_INPROC_SERVER,
                           IID_ITaskService,
                           (void**)&pService );  
    if (FAILED(hr))
    {
        printf("Failed to CoCreate an instance of the TaskService class: %x", hr);
        CoUninitialize();
        return 1;
    }
        
    //  Connect to the task service.
    hr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());
    if( FAILED(hr) )
    {
        printf("ITaskService::Connect failed: %x", hr );
        pService->Release();
        CoUninitialize();
        return 1;
    }

    //  ------------------------------------------------------
    //  Get the pointer to the root task folder.  This folder will hold the
    //  new task that is registered.
    ITaskFolder *pRootFolder = NULL;
    hr = pService->GetFolder( _bstr_t( L"\\") , &pRootFolder );
    if( FAILED(hr) )
    {
        printf("Cannot get Root Folder pointer: %x", hr );
        pService->Release();
        CoUninitialize();
        return 1;
    }
    
    //  Check if the same task already exists. If the same task exists, remove it.
    hr = pRootFolder->DeleteTask( _bstr_t( wszTaskName), 0  );
    
    //  Create the task builder object to create the task.
    ITaskDefinition *pTask = NULL;
    hr = pService->NewTask( 0, &pTask );

    pService->Release();  // COM clean up.  Pointer is no longer used.
    if (FAILED(hr))
    {
        printf("Failed to CoCreate an instance of the TaskService class: %x", hr);
        pRootFolder->Release();
        CoUninitialize();
        return 1;
    }
        

    //  ------------------------------------------------------
    //  Get the trigger collection to insert the registration trigger.
    ITriggerCollection *pTriggerCollection = NULL;
    hr = pTask->get_Triggers( &pTriggerCollection );
    if( FAILED(hr) )
    {
        printf("\nCannot get trigger collection: %x", hr );
CLEANUP
        return 1;
    }
  
    //  Add the registration trigger to the task.
    ITrigger *pTrigger = NULL;
    
    hr = pTriggerCollection->Create( TASK_TRIGGER_REGISTRATION, &pTrigger );     
    pTriggerCollection->Release();  // COM clean up.  Pointer is no longer used.
    if( FAILED(hr) )
    {
        printf("\nCannot add registration trigger to the Task %x", hr );
        CLEANUP
        return 1;
    }
    pTrigger->Release();

    //  ------------------------------------------------------
    //  Add an Action to the task.     
    IExecAction *pExecAction = NULL;
    IActionCollection *pActionCollection = NULL;

    //  Get the task action collection pointer.
    hr = pTask->get_Actions( &pActionCollection );
    if( FAILED(hr) )
    {
        printf("\nCannot get Task collection pointer: %x", hr );
        CLEANUP
        return 1;
    }
    
    //  Create the action, specifying that it is an executable action.
    IAction *pAction = NULL;
    hr = pActionCollection->Create( TASK_ACTION_EXEC, &pAction );
    pActionCollection->Release();  // COM clean up.  Pointer is no longer used.
    if( FAILED(hr) )
    {
        printf("\npActionCollection->Create failed: %x", hr );
        CLEANUP
        return 1;
    }

    hr = pAction->QueryInterface( IID_IExecAction, (void**) &pExecAction );
    pAction->Release();
    if( FAILED(hr) )
    {
        printf("\npAction->QueryInterface failed: %x", hr );
        CLEANUP
        return 1;
    }

    //  Set the path of the executable to the user supplied executable.
hr = pExecAction->put_Path( _bstr_t( wstrExecutablePath.c_str() ) );  

//hr = pExecAction->put_Path( (BSTR)wstrExecutablePath );  
    if( FAILED(hr) )
    {
        printf("\nCannot set path of executable: %x", hr );
        pExecAction->Release();
        CLEANUP
        return 1;
    }
    hr = pExecAction->put_Arguments( _bstr_t( L"" ) );  
//    hr = pExecAction->put_Arguments( _bstr_t( L"ArgumentsToYourExecutable--HelpFileToOpen" ) );  
   if( FAILED(hr) )
    {
        printf("\nCannot set arguments of executable: %x", hr );
        pExecAction->Release();
        CLEANUP
        return 1;
    }
    
    //  ------------------------------------------------------
    //  Save the task in the root folder.
    IRegisteredTask *pRegisteredTask = NULL;
    hr = pRootFolder->RegisterTaskDefinition(
            _bstr_t( wszTaskName ),
            pTask,
        TASK_CREATE, 
_variant_t(_bstr_t( L"S-1-5-32-545")),//Well Known SID for \\Builtin\Users group
_variant_t(), 
TASK_LOGON_GROUP,
            _variant_t(L""),
            &pRegisteredTask);
    if( FAILED(hr) )
    {
        printf("\nError saving the Task : %x", hr );
        CLEANUP
        return 1;
    }
    printf("\n Success! Task successfully registered. " );
for (i=0; i<100; i++)//give 10 seconds for the task to start
{
pRegisteredTask->get_State(&taskState);
if (taskState == TASK_STATE_RUNNING)
{
printf("\nTask is running\n");
break;
}
Sleep(100);
}
if (i>= 100) printf("Task didn't start\n");

//Delete the task when done
    hr = pRootFolder->DeleteTask(
            _bstr_t( wszTaskName ),
            NULL);
    if( FAILED(hr) )
    {
        printf("\nError deleting the Task : %x", hr );
        CLEANUP
        return 1;
    }

    printf("\n Success! Task successfully deleted. " );

//  Clean up.
    CLEANUP
    CoUninitialize();
    return 0;
}