Я знаю, как получить SID для текущего пользователя . Концептуально ответ:
- Используйте OpenThreadToken (или OpenProcessToken ) для получения защиты
TOKEN
работающего пользователя
- используйте GetTokenInformation , чтобы получить TOKEN_USER структуру
- , а затем
TOKEN_USER.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
}
Чтение бонусов