Определить, работает ли программа с полными правами администратора - PullRequest
18 голосов
/ 20 ноября 2010

Мне нужно определить, работает ли моя программа с полными правами администратора.Под этим я подразумеваю, что если UAC включен (для Win Vista / 7), мне нужно определить, действительно ли у программы есть права администратора (например, если пользователь щелкнул правой кнопкой мыши и выбрал «Запуск от имени администратора») и не ограничен UAC.Как мне сделать это в C ++?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Расширение ответа Андерса для тех (как я), которые менее грамотны в Windows:

    BOOL isMember;
    PSID administratorsGroup = NULL;
    SID_IDENTIFIER_AUTHORITY SIDAuthNT =
        SECURITY_NT_AUTHORITY;

    if (!AllocateAndInitializeSid(&SIDAuthNT, 2,
        SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0,
        &administratorsGroup))
    {
        throw(oops_t(GetLastError(), "AllocateAndInitializeSid"));
    }

    if (!CheckTokenMembership(nullptr, administratorsGroup, &isMember))
    {
        throw(oops_t(GetLastError(), "CheckTokenMembership"));
    }

    if (!isMember)
    {
        throw(oops_t(ERROR_ACCESS_DENIED, "Test for Admin privileges"));
    }
...