Подтвердить что ты не робот

Запрос прав администратора во время выполнения

Можно ли запустить приложение С++ в Windows для запроса прав администратора из операционной системы во время выполнения?

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

Спасибо за вашу помощь!

EDIT: Что, если я хочу, чтобы текущий экземпляр имел повышенные привилегии? Например, у меня могут быть данные, хранящиеся в памяти, которые я хочу сохранить.

4b9b3361

Ответ 1

Не совсем, но вы можете сделать наоборот: вы можете отказаться от привилегий, если у вас их уже есть. Таким образом, вы можете запустить свою программу в качестве администратора, используя один из методов, перечисленных в Kate Gregory. Затем отбросьте ненужные привилегии; см. Удаление привилегий на С++ в Windows, чтобы как это сделать.

Ответ 2

Если вы хотите, чтобы приложение всегда поднималось, вы можете дать ему манифест либо путем его создания (не компилируя технически), либо путем помещения внешнего манифеста в ту же папку, что и exe. Если вы хотите решить, как человек, чтобы запустить его, вы щелкните правой кнопкой мыши на exe или короткометражке и выберите "Запуск от имени администратора". Если вы запускаете его из кода, то в качестве комментариев @vcsjones вы используете глагол runas при запуске этого процесса. Например:

ShellExecute( NULL, 
    "runas",  
    "c:\\windows\\notepad.exe",  
    " c:\\temp\\report.txt",     
    NULL,                        // default dir 
    SW_SHOWNORMAL  
); 

Ответ 3

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

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


Дополнительные сведения о UAC см. в разделе Проектирование приложений UAC для Windows Vista.

Ответ 5

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

Чтобы добиться этого, вы должны обладать привилегией TCB. Другими словами, чтобы повысить процесс во время выполнения, вам понадобится помощь из процесса, выполняющегося под учетной записью SYSTEM, и Microsoft не предоставляет ни один, ни API для управления текущей реализацией UAC. В противном случае это победит цель.

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

  • Подписываться Microsoft
  • Чтобы выполнить предопределенные операции, например, с помощью команды IFileOperation

Лучшее объяснение, которое я нашел, это этот взлом. С тех пор оно исправлено, но проливает свет на все это.