如何确定流程的完整性级别

How integrity level of a process is determined?

本文关键字:完整性 何确定      更新时间:2023-10-16

我想启动一个具有高完整性级别的流程。父进程作为系统服务LocalSystem帐户运行。在一台Windows 2008计算机中,子进程是高级别的,而在另一台2008计算机中则是"中等"级别的。看起来CreateProcessAsUser在不同的机器中得到了不同的级别。

if (!WTSQueryUserToken(sessionID, &hToken)) 
{//The admin user logged in the rdp session of "sessionID".
    return;
}
BOOL fSuccess = CreateProcessAsUser(hToken, NULL, cmdLine, NULL, NULL,
TRUE,CREATE_NEW_CONSOLE,NULL, workDir, &si, &pi);

是什么导致了差异?有没有配置或程序的方法来解决这个问题?

不要指望用户的ACL。当然,LocalSystem帐户可能包含高完整性级别ACL,但这不是获取IL ACL的可靠方法。高IL SID是众所周知的(SID: S-1-16-12288)。将其放入安全描述符中,并将其传递给CreateProcess。

TOKEN_INFORMATION_CLASS参数设置为TokenIntegrityLevel的情况下,通过调用SetTokenInformation,您应该能够在启动新进程之前更改检索到的令牌的完整性级别。