4

我在 MSDN 上阅读了有关 UAC 的实施: http ://technet.microsoft.com/en-us/magazine/2007.06.uac.aspx

偶然发现了这条有趣的路线:

尽管 AIS 在技术上是提升进程的父进程,但 AIS 使用 CreateProcessAsUser API 中的新支持,将进程的父进程 ID 设置为最初启动它的进程的 ID(参见图 13)。

这是 CreateProcessAsUser 的 MSDN 页面:

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 中的选项创建一个进程并设置不同的父进程。我不知道该怎么做?我需要挖掘令牌吗?

4

1 回答 1

3

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

特别看PROC_THREAD_ATTRIBUTE_PARENT_PROCESS属性:

lpValue 参数是一个指向进程句柄的指针,该句柄使用而不是调用进程作为正在创建的进程的父进程。要使用的进程必须具有 PROCESS_CREATE_PROCESS 访问权限。

于 2014-11-05T02:15:23.930 回答