正确的方法来确定服务是否作为SYSTEM用户运行
发布时间:2020-12-16 09:30:33 所属栏目:百科 来源:网络整理
导读:确定进程是否以SYSTEM用户身份运行的正确方法是什么.我正在寻找一个win32 C API来检查系统用户. 我们曾经检查用户名是否为“SYSTEM”,但自Windows Server 2008 R2起,SYSTEM用户似乎已本地化.即荷兰系统上的SYSTEEM. 我无法通过搜索引擎找到有关系统用户的大
确定进程是否以SYSTEM用户身份运行的正确方法是什么.我正在寻找一个win32 C API来检查系统用户.
我们曾经检查用户名是否为“SYSTEM”,但自Windows Server 2008 R2起,SYSTEM用户似乎已本地化.即荷兰系统上的SYSTEEM. 我无法通过搜索引擎找到有关系统用户的大量信息,因为您获得了数百万次虚假命中. 提前致谢 解决方法
有独立于本地化
here的代码.
BOOL IsLocalSystem() { HANDLE hToken; UCHAR bTokenUser[sizeof(TOKEN_USER) + 8 + 4 * SID_MAX_SUB_AUTHORITIES]; PTOKEN_USER pTokenUser = (PTOKEN_USER)bTokenUser; ULONG cbTokenUser; SID_IDENTIFIER_AUTHORITY siaNT = SECURITY_NT_AUTHORITY; PSID pSystemSid; BOOL bSystem; // open process token if (!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken)) return FALSE; // retrieve user SID if (!GetTokenInformation(hToken,TokenUser,pTokenUser,sizeof(bTokenUser),&cbTokenUser)) { CloseHandle(hToken); return FALSE; } CloseHandle(hToken); // allocate LocalSystem well-known SID if (!AllocateAndInitializeSid(&siaNT,1,SECURITY_LOCAL_SYSTEM_RID,&pSystemSid)) return FALSE; // compare the user SID from the token with the LocalSystem SID bSystem = EqualSid(pTokenUser->User.Sid,pSystemSid); FreeSid(pSystemSid); return bSystem; } 对于任何定义为here的已知SID,相同的代码将起作用(如果已修改). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |