Windows 7 UAC повышение - PullRequest
       14

Windows 7 UAC повышение

1 голос
/ 23 апреля 2010

У меня есть один поток, который я хотел бы запустить от имени администратора в моем приложении. Остальную часть приложения я могу с удовольствием запустить как уровень пользователя по умолчанию ( asInvoker ). Это возможно? Я заметил, что есть функция "ImpersonateLoggedOnUser". Могу ли я как-то использовать это для входа в систему администратора, а затем получить поток, чтобы выдать себя за этого человека?

Кажется, что это должно быть чем-то довольно тривиальным, но не существует очевидного способа сделать это. Кто-нибудь может мне помочь?

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

Ответы [ 3 ]

4 голосов
/ 23 апреля 2010

Нет, высота для процесса, а не для потока.

Если у остальной части приложения есть для запуска без повышенных прав, вы можете запустить себя с повышенными правами с некоторым параметром (myapp.exe /uac "ipcparamhere") и использовать какое-то Межпроцессное взаимодействие связаться с «основным экземпляром» вашего приложения. (Если процесс с повышенными правами выполняет только простую операцию, вы, вероятно, можете проверить успешность, используя код завершения процесса)

1 голос
/ 23 апреля 2010

Вы можете запустить отдельный exe-файл и иметь манифест, в котором говорится, что для этого требуется администратор. Затем обязательно запустите его с помощью shell execute, который использует манифесты, и все готово. В качестве вдумчивого прикосновения наденьте щит UAC на кнопку, с которой начинается эта нить. (Отправьте ему сообщение BCM_SETSHIELD, если вы делаете все это вручную.)

Вы можете решить, хотите ли вы видеть видимое окно или нет в отдельном процессе. Тем временем пользователь все еще может перетащить в главное приложение.

1 голос
/ 23 апреля 2010

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

...