CreateProcessAsUser Windows 服务通常在启动用户指定的可执行文件时使用它,以便以中等完整性级别运行它以确保特权隔离。
查看签名,hToken必须提供一个。根据我的观察,Windows 服务始终选择执行此操作的当前登录用户。
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
);
Q:什么机制决定了“当前用户”?
我用双引号引用了“当前用户”,因为假设一个实现点似乎很模糊。我目前假设每个调用的函数CreateProcessAsUser都有自己的检索“当前用户”以传递其令牌的实现。
我想了解这个逻辑hToken是什么样的,以及选择的标准是什么。由于用户模式进程创建是由许多 Windows 服务执行的,我不得不假设它有一个通用逻辑,但我没有在堆栈跟踪中看到它(见图)。

