Nei*_*man 3 c windows permissions system
确定进程是否以SYSTEM用户身份运行的正确方法是什么.我正在寻找一个win32 C API来检查系统用户.
我们曾经检查用户名是否为"SYSTEM",但自Windows Server 2008 R2起,SYSTEM用户似乎已本地化.即荷兰系统上的SYSTEEM.
我无法通过搜索引擎找到有关系统用户的大量信息,因为您获得了数百万次虚假命中.
提前谢谢尼尔
有代码来做到这一点的独立定位的位置.
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,
0, 0, 0, 0, 0, 0, 0, &pSystemSid))
return FALSE;
// compare the user SID from the token with the LocalSystem SID
bSystem = EqualSid(pTokenUser->User.Sid, pSystemSid);
FreeSid(pSystemSid);
return bSystem;
}
Run Code Online (Sandbox Code Playgroud)
对于此处定义的任何众所周知的SID,相同的代码将起作用(如果已修改).
归档时间: |
|
查看次数: |
1506 次 |
最近记录: |