2011-11-08 12 views
12

Jak poprawnie sprawdzić, czy proces jest uruchomiony z uprawnieniami administratora?Jak sprawdzić, czy proces ma uprawnienia administracyjne

Sprawdziłem IsUserAnAdim function in MSDN, ale nie jest to zalecane, ponieważ może być zmienione lub niedostępne w kolejnych wersjach systemu Windows. Zamiast tego zaleca się użycie funkcji CheckTokenMembership.

Następnie przejrzałem alternatywny przykład w MSDN z opisu funkcji CheckTokenMembership. Jednak w MSDN znajduje się komentarz Stefana Ozminskiego, który wspomina, że ​​ten przykład nie działa poprawnie w systemie Windows Vista, jeśli wyłączono UAC.

Wreszcie próbowałem użyć kodu Stefana Ozminski jest z MSDN, ale stwierdza, że ​​proces ma prawa administracyjne, nawet gdybym go uruchomić pod zwykłego użytkownika bez uprawnień administratora w systemie Windows 7.

+1

Jeśli nie można wyświetlić dowolny kod tutaj przynajmniej można dostarczyć nam linki do odwołania Artykuły/komentarze/kodu? –

+2

Pomoże to wielu z was zdefiniować dokładnie, co rozumiecie przez "prawa administracyjne". Masz na myśli, czy działa on jako użytkownik w grupie administratorów? Masz na myśli, czy ma pełne prawa UAC? –

+0

Czy próbowałeś PrivilegeCheck API? – sarat

Odpowiedz

36

Dzięki temu dowiesz się, czy używasz podwyższonych uprawnień lub nie. Możesz ustawić manifest tak, aby działał z najbardziej możliwymi, jeśli chcesz, aby był monitowany. Istnieją również inne sposoby zadawania okien przez kod dla alternatywnych poświadczeń.

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

Powiązane problemy