2010-11-16 14 views
7

¿Cómo puedo comprobar si un proceso tiene privilegios elevados en Windows 7 (usando C++ nativo, no C#/C++. Net)?¿Cómo comprobar si un proceso tiene privilegios elevados en Windows 7 utilizando C++ nativo?

He estado buscando una respuesta bastante a veces, pero todo lo que puedo encontrar son las respuestas que utilizan .NET Framework.

+1

Define 'elevated'. ¿Privilegio? ¿Prioridad? ¿Algo más? –

+0

@Steve: según la otra respuesta, esta es una excelente pregunta. Acabo de entender que OP significaba "prioridad elevada" y esto podría ser completamente incorrecto. –

+0

También no está claro: ¿su proceso u otro? –

Respuesta

7

El enfoque más simple es llamar a la función IsUserAnAdmin. Si necesita más precisión, también puede utilizar GetTokenInformation, pero en la mayoría de los casos es exagerado.

+1

Kenny tiene razón y es fácil de probar. Escriba una aplicación que imprima si usted es administrador o no y ejecútelo elevado y no, inicie sesión como administrador y un usuario regular (que necesitará OTS para elevar). Verá en cuatro ejecuciones rápidas que se informa que es un administrador si la aplicación es elevada, independientemente de quién se haya registrado por primera vez en la máquina. –

+0

FWIW, la última recomendación en el artículo de MSDN es usar CheckTokenMembership. _Esta función es un contenedor para CheckTokenMembership. Se recomienda llamar a esa función directamente para determinar el estado del grupo de administradores en lugar de llamar a IsUserAnAdmin._ – susmits

+0

@KateGregory Gracias por explicar esto de manera tan simple; La documentación de MSDN implica que comprueba los privilegios del usuario propietario (es el administrador del propietario o no), pero como usted explica que no es correcto. – wizzwizz4

Cuestiones relacionadas