Я ищу способ повысить привилегии выполнения потока или процесса без появления всплывающего окна UAC.
Пользователь, который запускает процесс, является администратором, и у меня есть его имя пользователя и пароль.
Мне нужно сделать это для выполнения некоторых административных задач, таких как перезапуск службы и запись файлов в системные каталоги. Мое приложение запускается удаленно, и нет интерактивного пользователя для подтверждения диалога UAC. Отключение UAC не вариант.
Я пытался жонглировать LogonUser()
, ImpersonateLoggedOnUser()
, CreateProcessAsUser()
и DuplicateTokenEx()
на лучшую часть или два дня, но не смог найти правильную комбинацию, и если вообще это вообще возможно.
В частности, я попробовал вот что:
HANDLE token = 0;
LogonUserA(user, NULL, pass, LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT, &token);
HANDLE impToken = 0;
DuplicateToken(token, SecurityImpersonation, &impToken);
ImpersonateLoggedOnUser(impToken);
CreateFileA("C:\\windows\\blabla.dll", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
последний вызов завершается неудачно с GetLastError()
= 1346, «либо требуемый уровень олицетворения не был предоставлен, либо предоставленный уровень олицетворения недействителен».
Что я делаю не так?
Примечание - это работает на Win2008 R2