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

C++ 如何确定流程的完整性级别?,c++,windows,winapi,process,C++,Windows,Winapi,Process,我想启动一个具有高完整性级别的流程。父进程作为系统服务LocalSystem帐户运行。在一台Windows 2008计算机中,子进程为高级,而在另一台2008计算机中,该进程为“中级”。它看起来像是CreateProcessAsUser在不同的机器中获得不同的级别 if (!WTSQueryUserToken(sessionID, &hToken)) {//The admin user logged in the rdp session of "sessionID". retu

我想启动一个具有高完整性级别的流程。父进程作为系统服务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\u INFORMATION\u CLASS
参数设置为
TokenIntegrityLevel

调用,可能其中一台机器已禁用UAC,那么管理员没有得到分割令牌?或者,在一种情况下,所讨论的帐户是内置的管理员帐户,默认情况下,该帐户免于获取分割令牌?