proceso procedimiento planeacion etapas administrativo c++ winapi

c++ - procedimiento - Cómo comprobar si un proceso tiene los derechos administrativos.



proceso administrativo pdf (2)

¿Cómo verifico correctamente si un proceso se está ejecutando con derechos administrativos?

IsUserAnAdim función IsUserAnAdim en MSDN , pero no se recomienda ya que podría estar alterada o no disponible en versiones posteriores de Windows. En su lugar, se recomienda utilizar la función CheckTokenMembership .

Luego miré el ejemplo alternativo en MSDN a partir de una descripción de la función CheckTokenMembership . Sin embargo, hay un comentario de Stefan Ozminski en MSDN que menciona que este ejemplo no funciona correctamente en Windows Vista si UAC está deshabilitado.

Finalmente, intenté usar el código de Stefan Ozminski de MSDN, pero determina que el proceso tiene derechos administrativos, incluso si lo inicio bajo un usuario normal sin los derechos administrativos en Windows 7.


Esto le dirá si está ejecutando con privilegios elevados o no. Puede configurar el manifiesto para que se ejecute lo más posible si desea que se le solicite. También hay otras formas de pedir ventanas a través del código para credenciales alternativas.

BOOL IsElevated( ) { BOOL fRet = FALSE; HANDLE hToken = NULL; if( OpenProcessToken( GetCurrentProcess( ),TOKEN_QUERY,&hToken ) ) { TOKEN_ELEVATION Elevation; DWORD cbSize = sizeof( TOKEN_ELEVATION ); if( GetTokenInformation( hToken, TokenElevation, &Elevation, sizeof( Elevation ), &cbSize ) ) { fRet = Elevation.TokenIsElevated; } } if( hToken ) { CloseHandle( hToken ); } return fRet; }


Puedes usar la función LsaOpenPolicy() . La función LsaOpenPolicy abre un identificador para el objeto de Política en un sistema local o remoto.

Debe ejecutar el proceso "Como administrador" para que la llamada no falle con ERROR_ACCESS_DENIED .

Fuente: MSDN