¿Cómo puedo comprobar si un usuario tiene privilegios de administrador local en Win32 de C++¿Cómo puedo comprobar si un usuario tiene privilegios de administrador local en Win32
Respuesta
acaba de encontrar IsUserAnAdmin() en SHLOBJ.H el que hace el trabajo para mí.
Ser un administrador no significa que el proceso actual se ejecuta con privilegios elevados –
Precaución: IsUserAnAdmin() está en desuso: "Puede estar alterado o no disponible en versiones posteriores". Última versión de cliente compatible: Windows Vista! –
oli afortunadamente solo lo necesitaba para soporte de XP, para Vista y más tarde puedo verificar la elevación. –
Es posible que necesite más que eso para hacer frente a la elevación y cosas semejantes ...
lo hago como esto ....
bool CProcessToken::IsUserAnAdmin() const
{
#if _WIN32_WINNT >= 0x0600
bool isAdmin = false;
DWORD bytesUsed = 0;
TOKEN_ELEVATION_TYPE tokenElevationType;
if (!::GetTokenInformation(m_hToken, TokenElevationType, &tokenElevationType, sizeof(tokenElevationType), &bytesUsed))
{
const DWORD lastError = ::GetLastError();
throw CWin32Exception(_T("CProcessToken::IsUserAnAdmin() - GetTokenInformation - TokenElevationType"), lastError);
}
if (tokenElevationType == TokenElevationTypeLimited)
{
CSmartHandle hUnfilteredToken;
if (!::GetTokenInformation(m_hToken, TokenLinkedToken, reinterpret_cast<void *>(hUnfilteredToken.GetHandle()), sizeof(HANDLE), &bytesUsed))
{
const DWORD lastError = ::GetLastError();
throw CWin32Exception(_T("CProcessToken::IsUserAnAdmin() - GetTokenInformation - TokenLinkedToken"), lastError);
}
BYTE adminSID[SECURITY_MAX_SID_SIZE];
DWORD sidSize = sizeof(adminSID);
if (!::CreateWellKnownSid(WinBuiltinAdministratorsSid, 0, &adminSID, &sidSize))
{
const DWORD lastError = ::GetLastError();
throw CWin32Exception(_T("CProcessToken::IsUserAnAdmin() - CreateWellKnownSid"), lastError);
}
BOOL isMember = FALSE;
if (::CheckTokenMembership(hUnfilteredToken, &adminSID, &isMember))
{
const DWORD lastError = ::GetLastError();
throw CWin32Exception(_T("CProcessToken::IsUserAnAdmin() - CheckTokenMembership"), lastError);
}
isAdmin = (isMember != FALSE);
}
else
{
isAdmin = ToBool(::IsUserAnAdmin());
}
return isAdmin;
#else
return ToBool(::IsUserAnAdmin());
#endif
}
no recuerdo donde me dieron la información de escribir ese bit de código ...
Afortunadamente, puedo ignorar la elevación en este momento, ya que solicito elevación en el manifiesto, esto es solo para instalaciones anteriores a Vista. –
@Len Holgate, ¿sabe si esto también funciona para los miembros de un administrador de dominio (no solo para los administradores locales de máquinas, que verifiqué que está funcionando bien) – OSH
No tengo idea, lo siento. –
- 1. ¿Cómo comprobar si un proceso tiene privilegios elevados en Windows 7 utilizando C++ nativo?
- 2. cómo verificar si el usuario tiene privilegios de administración del sistema en SQL Server 2008 R2
- 3. ¿Cómo puedo saber si una ventana tiene foco? (API Win32)
- 4. Privilegios de administrador para un único método
- 5. ¿Cómo puedo instalar módulos Perl sin privilegios de administrador?
- 6. Averiguar si una aplicación necesita privilegios de administrador
- 7. Comprobar si Html.ValidationSummary() tiene un valor
- 8. ¿Cómo comprobar si CKEditor tiene texto?
- 9. Powershell para comprobar las credenciales de administrador local
- 10. ¿Cómo puedo depurar un servicio IIS local con Visual Studio ejecutándose como un usuario no administrador?
- 11. ¿Cómo comprobar si una orden tiene un envío en Magento?
- 12. Ejecutar un ejecutable con privilegios de administrador en Mac
- 13. ¿Cómo comprobar si el selector tiene qtip?
- 14. ¿Cómo comprobar si un usuario ha iniciado sesión en php?
- 15. ¿Cómo comprobar si EditarTexto tiene un valor en Android/Java
- 16. C# Comprobar si se ejecuta como administrador
- 17. Cómo comprobar si SQLDataReader no tiene filas
- 18. SFML 1.6 sin privilegios de administrador
- 19. ¿Cómo comprobar si Contact tiene imagen?
- 20. @ font-face src: local - ¿Cómo usar la fuente local si el usuario ya la tiene?
- 21. Cómo comprobar si el método tiene un atributo
- 22. cómo otorgar privilegios de usuario en un esquema específico?
- 23. Autenticación de CodeIgniter + privilegios de usuario
- 24. cómo comprobar si un archivo tiene una firma digital
- 25. ¿Cómo puedo determinar si un hilo de Win32 ha finalizado?
- 26. Cómo comprobar si una propiedad tiene valor en Ant
- 27. Detecta si se está ejecutando con privilegios de administrador en Windows XP
- 28. Servicio de Windows iniciar y detener sin privilegios de administrador
- 29. comprobar si un usuario ya existe en Drupal
- 30. Cómo comprobar si el URI de solicitud tiene algún parámetro
Dupe? http://stackoverflow.com/questions/560366/detect-if-running-with-administrator-privileges-under-windows-xp Las respuestas apuntan a soluciones de api win32. – Anonymous
No es exactamente lo mismo con UAC en Vista. "Ejecutar con privilegios de administrador" ahora implica que el usuario tiene derechos de administrador y los usó al iniciar un proceso. – MSalters