【发布时间】:2019-10-16 13:20:08
【问题描述】:
我知道如何获取当前用户的 SID。从概念上讲,答案是:
- 使用OpenThreadToken(或OpenProcessToken)获取运行用户的安全
TOKEN - 使用GetTokenInformation获取TOKEN_USER结构
- 然后
TOKEN_USER.Sid是 Sid
所以在伪代码中:
String GetCurrentUserSid()
{
// Get the calling thread's access token.
TOKEN hToken;
if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, true, out hToken)
{
if (GetLastError() != ERROR_NO_TOKEN)
RaiseLastWin32Error();
// No thread token exists, try again against the process token
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, out hToken)
RaiseLastWin32Error();
}
try
{
// Obtain the size of the user information in the token.
DWORD cbReturned;
GetTokenInformation(hToken, TokenUser, nil, 0, out cbReturned);
//Allocate memory and try again for real
TOKEN_USER* tiUser = GetMemory(cbReturned);
if (!GetTokenInformation(hToken, TokenUser, tiUser, cbReturned, out cbReturned))
RaiseLastWin32Error();
}
finally
{
CloseHandle(hToken);
}
//Convert the structure to a string
return SidToString(tiUser.User.Sid);
}
但是对于现在的机器怎么办呢?
String GetCurrentMachineSid()
{
// TODO: Ask Stackoverflow
}
阅读奖励
【问题讨论】:
-
但是如何 Sysinternals PsGetSid 工具 得到它 - 对你来说好吗?
标签: winapi