Je souhaite obtenir le nom d'utilisateur du processus et vérifier s'il s'agit d'un administrateur local. Pour vérifier directement si l'utilisateur en cours de procees est un administrateur localVérifiez si l'utilisateur du processus est un administrateur C++
Répondre
En supposant que vous êtes sur un système d'exploitation de la fenêtre il y a une fonction shell: IsUserAnAdmin
Voir MSDN article
Cet article ne suggère rouler votre propre fonction cependant, utilisez CheckTokenMembership. Il y a même un exemple de code pour vous aider.
merci! mais tout ce que j'ai est l'utilisateur connecté Je cherche un moyen d'obtenir l'utilisateur wjo exécute un service et vérifie si c'est un administrateur local – sofr
Je ne suis pas sûr d'où vous venez. Mais je suis prêt à aider. Un peu plus d'informations sur ce que vous essayez de réaliser peut éventuellement m'aider. Ce service est-il quelque chose que vous avez écrit? Si oui, vous pouvez appliquer une sécurité pendant l'installation pour autoriser/refuser aux utilisateurs (et/ou aux groupes) de démarrer ou d'arrêter le service, si c'est ce que vous recherchez? Généralement, les services Windows ne sont pas exécutés en tant qu'utilisateur qui les a démarrés. Par défaut, le compte système est utilisé comme compte sous lequel un service est exécuté, mais il peut être configuré pour être n'importe quel utilisateur. Les threads de service peuvent ensuite usurper l'identité des utilisateurs comme ils le souhaitent. – MrBry
Je sais que c'est une vieille réponse mais juste pour le souligner, cela ne fonctionne que jusqu'à Windows Vista, donc pour Windows 7, 8 et 10 cette fonctionnalité ne fonctionnera pas. – Alex
Obtenez le nom d'utilisateur actuel avec GetUserName(), puis appelez NetUserGetInfo() avec le nom du serveur (NULL pour local) et le nom d'utilisateur que vous venez d'obtenir. Passez-lui une structure USER_INFO_1, puis accédez à usri1_priv dans la structure. Si la valeur est USER_PRIV_ADMIN, vous saurez que le nom d'utilisateur est un admin.
Testé sur Windows XP SP3, Windows 7 32 bits et 64 bits avec utilisateur admin et utilisateur non administrateur. Le code a été porté à partir de C# équivalent et utilise les classes d'encapsulation de sécurité ATL Windows.
#include <atlbase.h>
#include <atlsecurity.h>
// The function returns true if the user who is running the
// application is a member of the Administrators group,
// which does not necessarily mean the process has admin privileges.
bool IsAdministrator(HRESULT &rHr)
{
bool bIsAdmin = false;
try
{
// Open the access token of the current process.
ATL::CAccessToken aToken;
if (!aToken.GetProcessToken(TOKEN_QUERY))
{
throw MAKE_SCODE(SEVERITY_ERROR, FACILITY_WIN32,
::GetLastError());
}
// Query for the access token's group information.
ATL::CTokenGroups groups;
if (!aToken.GetGroups(&groups))
{
throw MAKE_SCODE(SEVERITY_ERROR, FACILITY_WIN32,
::GetLastError());
}
// Iterate through the access token's groups
// looking for a match against the builtin admins group.
ATL::CSid::CSidArray groupSids;
ATL::CAtlArray<DWORD> groupAttribs;
groups.GetSidsAndAttributes(&groupSids, &groupAttribs);
for (UINT i = 0; !bIsAdmin && i < groupSids.GetCount(); ++i)
{
bIsAdmin = groupSids.GetAt(i) == ATL::Sids::Admins();
}
rHr = S_OK;
}
catch (HRESULT hr)
{
rHr = hr;
}
return bIsAdmin;
}
- 1. Vérifiez si le nom d'utilisateur est dans le groupe administrateur
- 2. Vérifiez si l'objet est pas de type (! = Équivalent « EST ») - C#
- 3. Vérifiez si une socket est déconnectée en C, sans select()
- 4. Vérifiez si le handle appartient au processus en cours?
- 5. Vérifiez si ftp est complet ou non?
- 6. Vérifiez si l'application IIS est en cours d'exécution sans l'exécuter
- 7. CrystalReportViewer, vérifiez si un rapport est actuellement affiché?
- 8. Vérifiez si le paquet Python est installé
- 9. Vérifiez si Yahoo Messenger est installé
- 10. Vérifiez si Char est dans la gamme
- 11. Vérifiez si un répertoire existe en PHP
- 12. Vérifiez si un proc stocké est en cours d'exécution?
- 13. Vérifiez si un tableau est vide sans utiliser de boucle?
- 14. Vérifiez si stderr est un tube dans bash
- 15. Vérifiez si un fichier PDF est corrompu avec PHP
- 16. Vérifiez si un arrêt est initié ou non
- 17. Vérifiez si un serveur SQL est disponible par programmation?
- 18. Vérifiez si une chaîne est codée en UTF-8
- 19. Vérifiez si Outlook est installé sur le PC
- 20. Vérifiez si une socket est connectée avant d'envoyer des données
- 21. ejabberd: existe-t-il un moyen de déterminer si un utilisateur est un administrateur?
- 22. Vérifiez si l'e-mail existe
- 23. Vérifiez si le son est en cours de lecture
- 24. Vérifiez si le service est en cours d'exécution dans WiX
- 25. Vérifiez si le débogage est activé dans une application Pylons
- 26. Python: Vérifiez si le fichier téléchargé est jpg
- 27. Vérifiez si le LButton de souris est en panne?
- 28. Vérifiez si HTML contient du JavaScript en PHP
- 29. Vérifiez si une bibliothèque DLL est déjà chargée? (Java)
- 30. iPhone - vérifiez si la connectivité Internet est disponible ou non
Quel système d'exploitation? Cela fait probablement une différence ... – crashmstr
"administrateur local" est probablement sur Windows. – sharptooth
Je cours - Windows OS – sofr