Проверьте, что пользователь является администратором на локальном компьютере в C++ в Windows

Я пытаюсь найти решение или winapi, чтобы проверить, является ли имя пользователя admin или нет на локальной машине.
Процесс выполняется в Windows Credential Provider, поэтому я считаю, что проверка текущего пользовательского потока не даст мне желаемого значения.

Обратите внимание, что я прошел через другие ответы в Stackru, который указывает на MSDN, который оценивает токен доступа пользователя текущего потока.

У меня есть имя пользователя, для которого мне нужно найти информацию о доступе, есть ли у пользователя права доступа администратора на текущем компьютере

Любые указатели или предложения приветствуются.

1 ответ

Я не уверен, что он будет делать то, что вы хотите, но NetUserGetInfo имеет поле, которое, по крайней мере, очень похоже на то, что вы, похоже, просите:

bool is_user_admin()
{
    bool result;
    DWORD rc;
    wchar_t user_name[256];
    USER_INFO_1 *info;
    DWORD size = sizeof( user_name );

    GetUserNameW( user_name, &size);

    rc = NetUserGetInfo( NULL, user_name, 1, (byte **) &info );
    if ( rc != NERR_Success )
        return false;

    result = info->usri1_priv == USER_PRIV_ADMIN;

    NetApiBufferFree( info );
    return result;
}

Есть также LsaEnumerateAccountRights, но (если память не изменяет) это показывает только те права / привилегии, которые назначены непосредственно соответствующей учетной записи, а не те, которые он получает через членство в группах и т. д. (но это было довольно давно, а моей памяти еще далеко до совершенства).

Другие вопросы по тегам