Come posso controllare se un utente dotato di privilegi di amministratore locale in Win32 da C++Come faccio a controllare se un utente dotato di privilegi di amministratore locale in Win32
risposta
appena trovato IsUserAnAdmin() in SHLOBJ.H che fa il lavoro per me.
Essere un amministratore non significa che il processo corrente venga eseguito con privilegi elevati –
Attenzione: IsUserAnAdmin() è obsoleto: "Potrebbe essere modificato o non disponibile nelle versioni successive." Ultima versione client supportata: Windows Vista! –
oli fortunatamente mi serviva solo per il supporto XP, per Vista e successivamente posso controllare l'elevazione. –
Potrebbe essere necessario più di quello a che fare con l'elevazione e simili ...
lo faccio come questo ....
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
}
non mi ricordo dove ho ottenuto le informazioni da scrivere però quel pezzetto di codice ...
Fortunatamente posso ignorare l'elevazione al momento in cui richiedo l'elevazione nel manifest, questo è solo per le installazioni pre Vista. –
@Len Holgate sai se funziona anche per i membri di un amministratore di dominio (non solo per gli amministratori delle macchine locali, che ho verificato funzionasse correttamente) – OSH
Non ho idea, mi dispiace. –
- 1. Privilegi di amministratore per un singolo metodo
- 2. Verificare se un'applicazione richiede i privilegi di amministratore
- 3. C# Controllare se eseguire come amministratore
- 4. Aggiungere porte con netsh in WCF come amministratore di dominio senza privilegi di amministratore
- 5. Esegui un eseguibile con privilegi di amministratore su mac
- 6. Rileva se è in esecuzione con privilegi di amministratore in Windows XP
- 7. Come mostrare tutti i privilegi di un utente in oracle?
- 8. Come utilizzare IPC senza essere un amministratore locale?
- 9. Esecuzione di IIS Express con amministratore privilegi di
- 10. Forzata l'applicazione per disporre dei privilegi di amministratore
- 11. Emulatore di Windows Azure senza privilegi di amministratore
- 12. Come avviare un programma con privilegi di amministratore in un file batch
- 13. Privilegi di amministratore del progetto Java windows 7
- 14. Come faccio a stampare l'anteprima in Win32 C++?
- 15. Verifica se un utente è un amministratore basato su req.user sicuro?
- 16. È possibile installare Rust su Linux senza privilegi di amministratore?
- 17. MeleScript: chiedere il prompt dei privilegi di amministratore
- 18. XAMPP Mac OS X "Questa applicazione richiede privilegi di amministratore"
- 19. Servizio Windows avviato e arrestato senza privilegi di amministratore
- 20. Come faccio a rinnovare un utente Facebook_access_token se gestisco un sacco di AJAX?
- 21. Come faccio a controllare a livello di codice se un'immagine (PNG, JPEG o GIF) è corrotta?
- 22. Ansible: creare un utente con privilegi sudo
- 23. MySQL: creazione di un utente con privilegi di root
- 24. Come faccio a controllare a livello di codice se un'immagine animata è GIF?
- 25. Come faccio a controllare a livello di codice per vedere a quale dominio sono connesso?
- 26. Come posso controllare se esiste un determinato nome utente?
- 27. Come eseguire l'applicazione con i privilegi di amministratore utilizzando il file manifest in Visual Studio 2005?
- 28. Come faccio a far funzionare un'app per console come amministratore?
- 29. Crea un utente amministratore di programmazione in WordPress
- 30. Tutorial per l'installazione di un utente non amministratore di Wix?
Dupe? http://stackoverflow.com/questions/560366/detect-if-running-with-administrator-privileges-under-windows-xp Le risposte puntano a soluzioni API a win32. – Anonymous
Non esattamente lo stesso con UAC sotto Vista. "Esecuzione con privilegi di amministratore" implica ora che l'utente ha i diritti di amministratore e li ha utilizzati all'avvio di un processo. – MSalters