CreateProcessAsUser — Создать процесс с другим родителем?

Я читал о реализации UAC на MSDN:
http://technet.microsoft.com/en-us/magazine/2007.06.uac.aspx

Случайно натолкнулся на эту интересную строку:

Хотя AIS технически является родителем повышенного процесса, AIS
использует новую поддержку в API CreateProcessAsUser, который устанавливает
ID родительского процесса процесса к тому процессу, который первоначально
запустил его (см. рисунок 13).

Вот страница MSDN для CreateProcessAsUser:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682429(v=vs.85).aspx

BOOL WINAPI CreateProcessAsUser(
_In_opt_     HANDLE hToken,
_In_opt_     LPCTSTR lpApplicationName,
_Inout_opt_  LPTSTR lpCommandLine,
_In_opt_     LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_     LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_         BOOL bInheritHandles,
_In_         DWORD dwCreationFlags,
_In_opt_     LPVOID lpEnvironment,
_In_opt_     LPCTSTR lpCurrentDirectory,
_In_         LPSTARTUPINFO lpStartupInfo,
_Out_        LPPROCESS_INFORMATION lpProcessInformation
);

Exert говорит, что мы можем создать процесс и установить другого родителя, используя параметры в API. Я не уверен, как это сделать? Нужно ли копаться в токене?

3

Решение

Эта функциональность задокументирована в записях MSDN для InitializeProcThreadAttributeList а также UpdateProcThreadAttribute функции.

В частности см. PROC_THREAD_ATTRIBUTE_PARENT_PROCESS атрибут:

Параметр lpValue — это указатель на дескриптор процесса, который следует использовать вместо вызывающего процесса в качестве родителя для создаваемого процесса. Используемый процесс должен иметь право доступа PROCESS_CREATE_PROCESS.

2

Другие решения


По вопросам рекламы [email protected]