Здравствуйте, Аноним, Вы писали:
S>>как по полученому SID TokenGroups узнать имя группы?
А>NetUserGetGroups
А>Между прочим реально токен залогиненного юзера может иметь в своих мемберах совсем иной список групп. Потому если у вас есть токен правильнее будет сделать GetTokenInformation(..TokenGroups..)
нет. токена нету. я его получаю на основе того который залогинился
HANDLE hToken;
DWORD cbNeeded;
PTOKEN_GROUPS pGroup;
// получаем идентификатор привилегии
//if (!LookupPrivilegeValue(NULL, _nameUser, &Luid))
// return FALSE;
// получаем токен текущего потока
if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hToken))
{
if (GetLastError() != ERROR_NO_TOKEN)
return FALSE;
// получаем токен процесса
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
return FALSE;
}
// определяем размер буфера, необходимый для получения
// всех групп
if (!GetTokenInformation(hToken, TokenGroups, NULL, 0, &cbNeeded))
{
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
{
DWORD dwError = GetLastError();
CloseHandle(hToken);
return SetLastError(dwError), FALSE;
}
}
// выделяем память для выходного буфера
pGroup = (PTOKEN_GROUPS)_alloca(cbNeeded);
_ASSERTE(pGroup != NULL);
// получаем список групп
if (!GetTokenInformation(hToken, TokenGroups, pGroup, cbNeeded,
&cbNeeded))
{
DWORD dwError = GetLastError();
CloseHandle(hToken);
return SetLastError(dwError), FALSE;
}
CloseHandle(hToken);