2014-11-04 72 views
3

我在读有关UAC的MSDN上实现: http://technet.microsoft.com/en-us/magazine/2007.06.uac.aspxCreateProcessAsUser - 使用不同的父级创建进程?

在这个有趣的线上偶然:

尽管AIS在技术上的提升进程的父,AIS 使用CreateProcessAsUser API中新的支持,将 进程的父进程ID设置为最初的 启动它的进程的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 
); 

的使出说,我们可以创建一个进程,并通过API使用选项设置不同的父母。我不知道如何做到这一点?我需要挖掘令牌吗?

回答

2

此功能记录在InitializeProcThreadAttributeListUpdateProcThreadAttribute函数的MSDN条目中。

特别地看到PROC_THREAD_ATTRIBUTE_PARENT_PROCESS属性:

的lpValue参数是一个指向句柄的处理代替使用调用进程的作为父为正在创建的过程。要使用的进程必须具有PROCESS_CREATE_PROCESS访问权限。