UAC подсказка из уже поднятого приложения - PullRequest
2 голосов
/ 15 марта 2019

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

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

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

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

По сути, что-то вроде этого:

if VerifyAdminWithUacPrompt then
begin
  //critical stuff
end;

Пример Delphi был бы идеальным, но я 'Я также рад общим идеям, как этого добиться.

1 Ответ

2 голосов
/ 15 марта 2019

Ваше приложение не должно вызывать новое приглашение UAC, так как UAC уже запускает ваше приложение с повышенными правами.Приложению просто нужно запросить учетные данные у пользователя.Для этой цели Windows имеет API: CredUIPromptForCredentials() и CredUIPromptForWindowsCredentials():

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

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

См. Запрос пользователя для ввода учетных данных на MSDN для получения более подробной информации:

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

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

Для правильного получения учетных данных пользователя

  • Сообщите пользователю, используя сообщение, котороеЯсно, что часть вашего приложения, что они увидят диалоговое окно, которое запрашивает их имя пользователя и пароль.Вы также можете использовать структуру CREDUI_INFO для вызова CredUIPromptForCredentials для передачи идентифицирующих данных или сообщения.

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

  • Вызов CredUIParseUserName и CredUIConfirmCredentials, чтобы убедиться, что вы получили соответствующие учетные данные.

...