2012-01-18 2 views
11

Я разрабатываю программу диска раздела, и для меня читать \\\\.\\PhysicalDrive0 Мне нужны права администратора.Возможно ли, чтобы исполняемый файл попросил права администратора? (Windows 7)

Мне интересно, возможно ли во время выполнения программа получить права администратора? Есть ли выигрыш для этого?

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

+0

Нет. Вам нужно будет переместить этот код в другой проект .exe, в котором есть манифест, запрашивающий разрешение на повышение UAC. Запустите этот .exe при необходимости. –

+0

Спасибо за ответы! Трюк разделения процесса будет выполнять эту работу. –

+1

@HansPassant: Не обязательно _another_ .exe. Посмотрите на диспетчер задач, который перезапустится с правами администратора, если вы выберете «процессы просмотра для всех пользователей». – MSalters

ответ

13

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

  1. Поместите часть приложения, которая требует повышенных привилегий, в отдельный процесс и проявите это с помощью requireAdministrator.
  2. Запустите часть приложения, для которой требуются повышенные привилегии как COM-объект вне proc. СВОЙСТВ
+0

См. [Эту статью] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms679687 (v ​​= vs.85) .aspx) в MSDN для метода повышения уровня COM. – Deanna

5

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

Я с нетерпением жду других ответов, если есть другой способ.

(обновление)
В статье Teach Your Apps To Play Nicely With Windows Vista User Account Control (примерно на полпути вниз) подтверждает, что права администратора могут быть предоставлены только во время создания процесса.

+0

Ссылка не работает. –

+0

@bronzeman: исправлено. – wallyk

2

Вам нужно встроить манифест с requireAdministrator флагом

http://msdn.microsoft.com/en-us/library/bb756929.aspx

+0

Не прочитанный вопрос. – Voo

+0

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

+2

По той же причине, что OpenSSH не запускает все с правами root, просто потому, что он должен прослушивать порт 22 .. все остальное - ужасный дизайн и нарушает один из самых основополагающих принципов безопасного проектирования кода. [Есть даже статья wiki об этом] (http://en.wikipedia.org/wiki/Privilege_separation) – Voo

1

проекта (Alt + Enter) -> Linker -> Manifest File -> UAC уровень выполнения (в VS2015, в 2010 году это похоже) -> requireAdministrator или highestAvailable

Edit: Кроме того, если это программа обновления, просто введите имя вашей программы, начиная с Update, и Windows автоматически распознает ее.

Смежные вопросы