begin process at 2012 05 30 17:01:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Systeme

 > 

Savoir si la session en cours est administrateur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Savoir si la session en cours est administrateur

mercredi 6 juillet 2005 à 11:27:27 | Savoir si la session en cours est administrateur

sephiro

Membre Club

Il est important pour l'un de mes programmes de savoir si l'utilisateur est admin ou non.
J'ai recherché sur ce site des informations sans rien trouver, j'ai fini par trouver une fonction qui marche sur plusieurs sites et forum.
Je l'ai testé sous Win XP Pro, avec 2 logins, l'un admin l'autre non. Elle retourne TRUe si administrateur. Je ne l'ai pas testé sous Win XP Home.
/////////////////////////////////////SOMMES NOUS ADMINISTRATEUR ///////////////////////////////
BOOL RunningAsAdministrator( VOID)
{
   BOOL   fAdmin;
   HANDLE  hThread;
   TOKEN_GROUPS *ptg = NULL;
   DWORD  cbTokenGroups;
   DWORD  dwGroup;
   PSID   psidAdmin;
   SID_IDENTIFIER_AUTHORITY SystemSidAuthority=
SECURITY_NT_AUTHORITY;
  
  
   // First we must open a handle to the access token for this thread.
   if ( !OpenThreadToken( GetCurrentThread(), TOKEN_QUERY, FALSE, &hThread))
   {
      DWORD Error = GetLastError();
      if ( Error == ERROR_NO_TOKEN)
      {
         // If the thread does not have an access token, we'll examine the
         // access token associated with the process.
         if (!OpenProcessToken ( GetCurrentProcess(), TOKEN_QUERY, &hThread))
             return ( FALSE);
       }
      else
      {//Phil: If not a Local Administrator, it seem Error=5
         return ( FALSE);
      }
   }
   // Then we must query the size of the group information associated with
   // the token. Note that we expect a FALSE result from GetTokenInformation
   // because we've given it a NULL buffer. On exit cbTokenGroups will tell
   // the size of the group information.
   if (GetTokenInformation ( hThread, TokenGroups, NULL, 0, &cbTokenGroups))
      return ( FALSE);
  
   // Here we verify that GetTokenInformation failed for lack of a large
   // enough buffer.
   if ( GetLastError() != ERROR_INSUFFICIENT_BUFFER)
      return ( FALSE);
  
   // Now we allocate a buffer for the group information.
   // Since _alloca allocates on the stack, we don't have
   // to explicitly deallocate it. That happens automatically
   // when we exit this function.
   if ( ! ( ptg = (TOKEN_GROUPS *) _alloca ( cbTokenGroups)))
      return ( FALSE);
  
   // Now we ask for the group information again.
   // This may fail if an administrator has added this account
   // to an additional group between our first call to
   // GetTokenInformation and this one.
   if ( !GetTokenInformation ( hThread, TokenGroups, ptg,cbTokenGroups, &cbTokenGroups) )
       return ( FALSE);
  
  
   // Now we must create a System Identifier for the Admin group.
   if ( ! AllocateAndInitializeSid ( &SystemSidAuthority, 2,SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,             0, 0, 0, 0, 0, 0, &psidAdmin) ) 
    return (FALSE);

   // Finally we'll iterate through the list of groups for this access
   // token looking for a match against the SID we created above.
   fAdmin= FALSE;
   for ( dwGroup= 0; dwGroup < ptg->GroupCount; dwGroup++)
   {  if ( EqualSid ( ptg->Groups[dwGroup].Sid, psidAdmin))
      {    fAdmin = TRUE;
         break;
      }
   }

   // Before we exit we must explicity deallocate the SID we created.
    FreeSid ( psidAdmin);
   

    return ( fAdmin);

}

mercredi 6 juillet 2005 à 18:57:39 | Re : Savoir si la session en cours est administrateur

vecchio56

Administrateur CodeS-SourceS
Tu as un problème avec le code ou tu le donnes juste pour info?
vendredi 8 juillet 2005 à 20:57:58 | Re : Savoir si la session en cours est administrateur

sephiro

Membre Club
Aucun probleme, je le donne pour info
De plus je l'ai testé sur XP Home il marche
J'allais poser des questions sur ce probleme dans le forum et j'ai trouvé ma réponse entre temps.


Cette discussion est classée dans : we, for, return, false, token


Répondre à ce message

Sujets en rapport avec ce message

[DevCPP][DirectInput] Pb avec SetDataFormat [ par Shinji ] Bonjour à tous !J'utilise DirectInput pour gérer clavier et souris dans mon programme. Je l'ai déjà réalisé avec succès mais depuis que j'ai du change insertion d'un joystick sous directx [ par kennit69 ] bonjourje souhaite integrer un joystick dans mon programme directxj'ai suivi les etapes explique sur le site msdn et lors de l'appele a la fonction H Problème chargeur dll [ par M5i9k ] Bonjour,j'ai écrit un programme qui permet de charger une dll dans un processus, mais le programme fonctionne seulement en DEBUG, en RELEASE, j'ai un injection de dll [ par deck_bsd ] Yop,Voila , je tente de faire une injection de dll dans un processus . Seulement voila , tout devrait bien se dérouler et d'ailleur aparement tout rou ce code ne marche pas?????????? [ par banak3181 ] s'il vous plait les gars je veux que quelqu'un me disent pourquoi ce code ne marche sur dev C++:#include #include #include #include # include<myconio. Return tableau? [ par zut69 ] Bonjour,Je suis en train d'écrire un petit programme sur les matrices en C, mais vu que je veux faire quelque chose d'assez général, j'ai besoin que d probleme droit d'acces sur processus [ par wisar ] bonjours voila je suis en train de programmer une petite application sur l'injection de dll. Hors j'ai remarqué que j'ai un problème de droit d'accès tableau [ par imanedaoudi ] Salut,Je veux récuperer le tableaux triée sans faire return, avec ce programme je recupere le tableau non trier ,comment faire pour recuperer le tab t recv() winsock2 en plusieurs morceaux [ par billbaxter ] Bonjour,J'ai développé une appli client-serveur avec les winsock2 en me référant aux exemples MSDN.Ceux-ci ne présentent qu'un dialogue effectué en un Problème compréhension du programme le compte est bon [ par echec ] Bonjour,Je cherchai un programme c++ sur internet qui permettait de calculer la solution du jeu le compte est bon, j'en est finalement trouvé un, mais


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,872 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales