Как проверить, имеет ли процесс административные права

Как правильно проверить, запущен ли процесс с правами администратора?

Я проверил функцию IsUserAnAdim в MSDN, но она не рекомендуется, поскольку она может быть изменена или недоступна в последующих версиях Windows. Вместо этого рекомендуется использовать функцию CheckTokenMembership.

Затем я просмотрел альтернативный пример в MSDN из описания функции CheckTokenMembership. Однако в MSDN есть комментарий Stefan Ozminski, в котором упоминается, что этот пример не работает должным образом в Windows Vista, если UAC отключен.

Наконец, я попытался использовать код Стефана Озминского из MSDN, но он определяет, что процесс имеет права администратора, даже если я запускаю его под обычным пользователем без административных прав в Windows 7.

Ответ 1

Это скажет вам, работаете ли вы с повышенными привилегиями или нет. Вы можете установить манифест для запуска с наиболее возможными, если вы хотите, чтобы он запрашивал. Существуют также другие способы просить окна через код для альтернативных учетных данных.

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;
}