Запуск с правами администратора

Первым шагом в определении типа учетной записи, с которой должно работать приложение, является изучение ресурсов, которые приложение будет использовать и какие привилегированные API оно будет вызывать. Вы можете обнаружить, что приложению или его большим частям не требуются права администратора. Написание защищенного кода, Майкл Ховард и Дэвид Леблан предлагает отличное описание того, как выполнить эту оценку, и настоятельно рекомендуется. (Этот ресурс может быть недоступен в некоторых языках и странах.)

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

  • Запустите под учетной записью с меньшими привилегиями. Один из способов сделать это — использовать PrivilegeCheck , чтобы определить, какие привилегии включены в маркере. Если доступных привилегий недостаточно для текущей операции, можно отключить этот код и попросить пользователя выполнить вход в учетную запись с правами администратора.
  • Разбейте отдельные функции приложения, которым требуются разрешения администратора. Вы можете предоставить пользователю ярлык, который выполняет команду Запуска от имени. Подробные инструкции по настройке ярлыка см. в справке по слову runas. Программными средствами можно настроить команду RunAs в разделе реестра AppId Key для приложения.
  • Выполните проверку подлинности пользователя, вызвав CredUIPromptForCredentials (GUI) или CredUICmdLinePromptForCredentials (командная строка), чтобы получить имя пользователя и пароль. Пример см. в разделе Запрос учетных данных у пользователя.
  • Олицетворить пользователя. Процесс, который запускается под учетной записью с высоким уровнем привилегий, такой как System, может олицетворять учетную запись пользователя путем вызова ImpersonateLoggedOnUser или аналогичных функций Impersonate, что снижает уровень привилегий. Однако если вызов RevertToSelf внедряется в поток, процесс возвращается к исходным системным привилегиям.

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