Что нового

Подстановка процессу окружения (переменные, профиль) от другого пользователя

fly_indiz

Новичок
Сообщения
1
Репутация
0
День добрый профессионалы и любители.
Столкнулся с интересной необходимостью, излагаю суть.

Необходимо чтобы запускаемый процесс (если быть точным - запускаю его от SYSTEM) получил окружение от другого пользователя (если быть точным - то окружение не от SYSTEM, а от работающей учетки условно обзовем ADMIN), а именно:
- блок переменных окружения (сделал)
- загруженный куст HKCU от ADMIN (не получилось, это и есть вопрос).

Процесс порождаю этим способом:
Код:
DllCall(DllOpen("advapi32.dll"), "bool", "CreateProcessWithTokenW", "handle", сдублированый_токен_от_system_процесса, "dword", 0, "ptr", 0, "wstr", "команда_запуска_с_параметрами", "dword", $dwCreationFlags, "ptr", указатель_на_блок_lpEnvironment, "wstr", "рабочая_папка", "ptr", DllStructGetPtr($SI), "ptr", DllStructGetPtr($PI))

все замечательно, порождается, работает. И даже подставленый блок lpEnvironment взятый от процесса который работает от учетки ADMIN - действительно подставил набор переменных окружения от ADMIN
как видно из параметров запуска процесса (dwLogonFlags: "dword", 0) - я не использую процесс загрузки профиля (нам ведь не нужно грузить профиль SYSTEM).
на MSDN( CreateProcessWithTokenW ) сказано, что профиль можно грузить единичкой в параметре dwLogonFlags или самостоятельно, предварительно перед вызовом CreateProcessWithTokenW вызвать функцию LoadUserProfile.
Чтож, ок.
Делаем вызов:
Код:
$Ret = DllCall("Userenv.dll", "int", "LoadUserProfileW", "ptr", $token, "ptr", DllStructGetPtr($PROFILEINFO))

п.с. $token - взят процесса, работающего от ADMIN
Вроде все сделано корректно, вот только LoadUserProfileW не срабатывает, и профиль не подгружается.

Может кто натолкнуть на идею, как правильно сделать так, чтобы порождаемый процесс от SYSTEM стал использовать уже загруженый в пользовательском сеансе профиль ADMIN?
 

Gennadiy

Новичок
Сообщения
10
Репутация
0
А у админа есть заранее известный пароль?
А то, может, просто RunAs() или RunAsWait применить?
 
Верх