我想推出一个高度完整的程序。 父进程作为系统服务,LocalSystem帐户运行。 在一台Windows 2008计算机中,subprocess是高级别的,而在另一台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);
什么导致差异? 有configuration或程序的方式来解决它?
不要指望用户的ACL。 当然,LocalSystem帐户可能包含高完整性级别ACL,但这不是获取该IL ACL的可靠方法。 高IL SID是众所周知的( SID: S-1-16-12288
)。 把它放在一个安全描述符中,并将其传递给CreateProcess。
在启动新进程之前,您应该能够通过调用SetTokenInformation并将TOKEN_INFORMATION_CLASS
参数设置为TokenIntegrityLevel
来更改检索到的令牌的完整性级别。