CreateProcess + SeXXXPriveleges
От: Tujh Голландия  
Дата: 06.09.19 11:41
Оценка:
Добрый день!

У меня, с одной стороны, достаточно простой вопрос, а с другой — не такой уж он и простой, нагуглить что-то вразумительное не удалось и понять что не так до конца не получается.

Если кратко — есть один процесс, который запускает второй и есть необходимость выполнить действия во втором процессе, которые теоретически разрешены учётной записи пользователя, но не практике — не достаточно прав. В частности речь идёт и вызове SetLocalTime.
Код вызова оформлен, вроде бы как полагается:

OpenProcessToken -> AdjustTokenPrivileges -> SetLocalTime


но вот работает эта цепочка только из родительского приложения.

Добавил проверку через GetTokenInformation и получается, что родительский процесс имеет (token_privileges->PrivilegeCount == 24), а дочерний (token_privileges->PrivilegeCount == 6), таки образом количество priveleges для дочернего процесса значительно меньше чем для родительского.
Порождение дочернего процесса делается так:
CreateProcessAsUser( process_token, NULL, strCmdLine, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi )


process_token получен через тот же OpenProcessToken, возможно что в этом и ошибка.

Кто сталкивался с подобным — подскажите где почитать или как оно должно правильно быть?

Заранее благодарю!
Re: CreateProcess + SeXXXPriveleges
От: okman Беларусь https://searchinform.ru/
Дата: 07.09.19 10:15
Оценка: +1
Здравствуйте, Tujh, Вы писали:

T>...


T>Порождение дочернего процесса делается так:

T>
T>CreateProcessAsUser( process_token, NULL, strCmdLine, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi )
T>


А почему нельзя просто CreateProcess?
И из какого процесса берется process_token? Может, там просто ограниченный токен (у которого нет прав администратора)?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.