Re[2]: получить имена групп в которые входит пользователь
От: ssy2  
Дата: 05.03.09 17:38
Оценка:
Здравствуйте, Аноним, Вы писали:

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);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.