Vista: создайте процесс из службы без всплывающих диалоговых окон - PullRequest
0 голосов
/ 17 февраля 2010

Я новичок в Vista, а не продвинутый программист. В последние несколько дней я пытаюсь переварить много технических деталей о Vista. Но все же у меня есть несколько основных вопросов по этому вопросу. Надеюсь, вы все поможете мне получить ответы на мои вопросы.

Можем ли мы создать интерактивный процесс (в котором есть встроенный файл манифеста с «invokeAsAdministrator») из службы, работающей под учетной записью локальной системы?

Здесь я знаю об изоляции сеанса 0 и обо всем. Тем не менее я задаю этот вопрос, потому что, когда я создаю интерактивный процесс через CreateProcessAsUser (который требует прав администратора), он завершается с ошибкой 740. При использовании этого я дал правильное идентификатор сессии. Идентификатор сеанса совпадает с идентификатором моего активного рабочего стола, где мой пользователь входит в систему с правами администратора.

Если процесс может быть создан, отображается ли диалоговое окно UAC?

Если появится диалоговое окно UAC, можем ли мы этого избежать?

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

Это вполне понятная проблема. Локальный аккаунт не имеет привилегий админа. Единственное, что вы можете сделать, это подражать. Временно вы эмулируете другой аккаунт (в вашем случае это админ). Пример этой техники вы можете найти в MSDN для темы WindowsIdentity.Impersonate (http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx)

EDIT

Извините, только после того, как пост заметил, что вы используете vc ++, В Win API используйте ImpersonateLoggedOnUser

0 голосов
/ 29 марта 2010

Createprocessasuser в моем случае дает сбой, потому что по умолчанию, когда мы запрашиваем токен пользователя для сеанса рабочего стола пользователя, я получаю ограниченный токен, который был создан для пользователя (для администраторов создаются два токена 1) ограниченный токен 2) полный токен; любой, как мое приложение может быть запущено только администраторами).

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

Код для создания процесса из сервиса можно найти в следующем вопросе: Проблема с рабочим столом при использовании CreateProcessAsUser из службы в Vista

...