gpt4 book ai didi

c++ - WindowsIdentity.GetCurrent().C++ 中的 IsSystem

转载 作者:行者123 更新时间:2023-11-30 03:13:15 27 4
gpt4 key购买 nike

我需要知道当前进程是否作为系统运行。在 C# 中,我使用 WindowsIdentity.GetCurrent().IsSystem 来执行此操作,C++ 中的等效项是什么?

我试图避免比较用户名,因为不同的操作系统对 SYSTEM 帐户有不同的用户名。

最佳答案

我根据 Eryk 的想法创建了一个示例,并且它有效:

BOOL IsSystem()
{
HANDLE hToken = NULL;
BOOL result = false;
TOKEN_USER *tokenUser = NULL;
DWORD dwLength = 0;

if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) == 0)
{
DbgPrint("OpenProcessToken(): %d", GetLastError());
goto cleanup;
}

if (GetTokenInformation(hToken, TokenUser, (LPVOID) tokenUser, 0, &dwLength) == 0)
{
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
{
DbgPrint("GetTokenInformation(): %d", GetLastError());
goto cleanup;
}

tokenUser = (TOKEN_USER *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwLength);
if (tokenUser == NULL)
{
goto cleanup;
}

if (GetTokenInformation(hToken, TokenUser, (LPVOID) tokenUser, dwLength, &dwLength) == 0)
{
DbgPrint("GetTokenInformation(): %d", GetLastError());
goto cleanup;
}

result = IsWellKnownSid(tokenUser->User.Sid, WinLocalSystemSid);
}

cleanup:
if (tokenUser != NULL)
{
HeapFree(GetProcessHeap(), NULL, tokenUser);
}

return result;
}

关于c++ - WindowsIdentity.GetCurrent().C++ 中的 IsSystem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58870309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com