c++ winapi uac detect administrator

c++ - Detectar si el programa se está ejecutando con todos los derechos de administrador



winapi uac (2)

Necesito determinar si mi programa se está ejecutando con todos los derechos de administrador. Con esto quiero decir si uac está activado (para Windows Vista / 7) que necesito determinar si el programa realmente tiene derechos de administrador (como si el usuario hizo clic derecho y seleccionó "ejecutar como administrador") y no está limitado por uac. ¿Cómo hago esto en C ++?


Una expansión en la respuesta de Anders para aquellos (como yo) que saben menos de 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")); }


Otras alternativas son: IsUserAnAdmin o AccessCheck

No es necesario verificar el contenido de TOKEN_ELEVATION * en el token para probar el proceso actual, pero es útil si necesita averiguar si el usuario podría elevar porque tiene un token dividido, etc.