The Process
exe / dll скомпилированы в C ++ для запуска
The Process
как админThe Process
открывает приложение (exe), используя ShellExecute Приложение открывается в сфера действия администратора
Приложение открывается в сфера действия обычного пользователя
использование CreateProcessAsUser (Предполагая, что мне удалось получить hToken
правильно что должен был решить вопрос).
Тем не менее, я получаю вызов сбой с кодом ошибки 1314 — ERROR_PRIVILEGE_NOT_HELD. Возвращение к документации говорит мне:
Если эта функция завершается с ошибкой ERROR_PRIVILEGE_NOT_HELD (1314), используйте
Вместо этого создайте функцию CreateProcessWithLogonW
Так что я покопался и нашел это Ошибка CreateProcessAsUser 1314 что было не очень полезно.
с помощью ImpersonateLoggedOnUser генерируется тот же код ошибки: 1314 — ERROR_PRIVILEGE_NOT_HELD.
CreateProcessWithLogonW требует lpPassword
что естественно у меня нет
Как процесс администратора может открыть приложение вошедшего в систему пользователя?
Вы пытались использовать CreateProcessWithTokenW
который упоминается в CreateProcessWithLogonW
документация? Кажется, требуется гораздо более слабая привилегия, чем CreateProcessAsUser
, тот, которым ты должен обладать (SE_IMPERSONATE_NAME
скорее, чем SE_ASSIGNPRIMARYTOKEN_NAME
).
Вы сказали, что у вас уже есть токен для интерактивного пользователя, поэтому я не буду вдаваться в подробности.
(Примечание: со всем этим сообщалось о странных ошибках, включая CreateProcessWithTokenW
, Не сдавайся с первой попытки. Ошибка и исправление, например: почему CreateProcessWithTokenW завершается ошибкой с ERROR_ACCESS_DENIED )
hToken
не «правильно». Это знак. Ошибка говорит о том, что вам не хватает привилегия.
Владение привилегией не является фундаментальным правом! Некоторые привилегии предоставляются определенным пользователям по умолчанию. Другие должны быть предоставлены через Политика локальной безопасности (в узле «Назначение прав пользователя» в оснастке MMC или с LsaAddAccountRights
— все что задокументировано на странице Назначение привилегий учетной записи).
Помимо этого вам иногда приходится включить использование привилегий AdjustTokenPrivileges
. Это задокументировано на странице родного брата Изменение привилегий в токене.
Некоторые API включают их, если вы их держите. Другие этого не делают и требуют от вас сами. Очевидный путь — включить привилегию перед вызовом и задокументированный API, который требует ее.
Возможно, ссылки на MS Forum не было, но сообщение об ошибке совершенно ясно. MSDN говорит о функции:
Как правило, процесс, который вызывает CreateProcessAsUser
функция должна иметь SE_INCREASE_QUOTA_NAME привилегия
и может потребовать SE_ASSIGNPRIMARYTOKEN_NAME привилегия
если токен не может быть назначен
и ошибка (со страницы, на которую вы ссылаетесь!):
ERROR_PRIVILEGE_NOT_HELD
1314 (0x522)
Требуемая привилегия не удерживается клиентом.
Это на самом деле очень сложная задача, которую вы хотите выполнить. Существуют очень строгие политики безопасности, которые делают его очень сложным.
Насколько я знаю, вы можете сделать это с PsExec. Он имеет переключатель командной строки, который обеспечивает взаимодействие с пользователем, но запускает процесс от имени администратора. Я думаю, что ваша команда должна выглядеть следующим образом:
psexec \\target-computer -i -s [your command]
Другой способ сделать это — использовать WMI. Но для этого вам нужно изменить параметры безопасности целевой машины (возможно, с помощью объектов групповой политики). Вам необходимо подключиться к целевой машине, используя уровень олицетворения deletgate
увидеть Вот. Кроме того, как уже было сказано, вам нужно изменить настройки безопасности. Увидеть Вот