IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

droit pour ExitWindowsEx


Sujet :

Windows

  1. #1
    Invité
    Invité(e)
    Par défaut droit pour ExitWindowsEx
    Bonjour,
    Comment peut-on savoir si notre programmea les droits pour executer la fonction : ExitWindowsEx ();.
    Si jamais on peut le savoir et que l'on voit que l'on a pas les droits peut-on se les mettre ?
    merci d'avance.

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Pour éteindre l'ordinateur il faut avoir le privilège SE_SHUTDOWN_NAME (TEXT("SeShutdownPrivilege")).

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <windows.h>
     
    void PowerOff()
    {
        HANDLE hToken;                     /* Handle vers les privilèges du processus                     */
        TOKEN_PRIVILEGES token_privileges; /* Structure permettant de représenter un groupe de privilèges */
        LUID luid;                         /* Locally Unique ID (ID Local d'un privilège)                 */
     
        /* Il faut obtenir un handle vers le privilèges du processus qui nous intéresse.                  */
     
        OpenProcessToken( NULL,             /* Handle du processus                                        */
                          TOKEN_ALL_ACCESS, /* Ce que nous souhaitons faire avec le Token Handle          */
                          &hToken           /* Sortie                                                     */ );
     
        /* SE_SHUTDOWN_NAME ("SeShutdownPrivilege") est requis pour pouvoir éteindre l'ordinateur.        */
        /* Récupérons le LUID de ce privilège.                                                            */
     
        LookupPrivilegeValue( NULL,             /* Sur quelle machine ?                                   */
                              SE_SHUTDOWN_NAME, /* Nom du privilège dont le LUID nous intéresse           */
                              &luid             /* Sortie                                                 */ );
     
        /* Composons les nouveaux privilèges du processus.                                                */
     
        token_privileges.PrivilegeCount = 1;
     
        token_privileges.Privileges[0].Luid       = luid;
        token_privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
     
        /* Appliquons.                                                                                    */
     
        AdjustTokenPrivileges( hToken,            /* Token Handle                                         */
                               FALSE,             /* Désactiver tous les privilèges ? (DAP)               */
                               &token_privileges, /* Nouvel état (ignoré si DAP vaut TRUE)                */
                               0,                 /* sizeof(old_state)                                    */
                               NULL,              /* &old_state                                           */
                               NULL               /* &retun_length                                        */ );
     
        /* C'est fait. Fermons le Token Handle.                                                           */
     
        CloseHandle(hToken);
     
        /* On peut maintenant éteindre l'ordinateur.                                                      */
     
        ExitWindowsEx(EWX_POWEROFF, 0);
    }
    Citation Envoyé par brastir
    Comment peut-on savoir si notre programme a les droits pour executer la fonction : ExitWindowsEx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetTokenInformation(hToken, TokenPrivileges, &token_privileges, sizeof(token_privileges), &dwReturnLength);
    D'autre part, ce n'est pas l'utilisation de la fonction ExitWindowsEx elle-même qui nécessite le privilège SE_SHUTDOWN_NAME mais le fait d'éteindre l'ordinateur. Par exemple si on appelle cette fonction avec comme action désirée EWX_LOGOFF, on n'a pas besoin de privilèges particuliers.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Grand merci a toi melem vraiment tu es super! gloire a toi
    PS : donc là c'est bien sur l'ordi il s'éteindra obligatoirement avec cette fonction ?
    Dernière modification par Invité ; 21/09/2008 à 20h40.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il s'éteindra du moment que l'utilisateur possède le privilège en question (ce qui est pratiquement toujours le cas pour un utilisateur loggué localement).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Inactif
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 2
    Points
    2

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Il s'éteindra du moment que l'utilisateur possède le privilège en question (ce qui est pratiquement toujours le cas pour un utilisateur loggué localement).
    Et si aucune autre application n'annule la fermeture de windows ...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Quand je compile aveccode blocks sous win98 le code présent de le lien msdn ne compile pas, il affiche comme erreur que SHTDN_REASON_MAJOR_OPERATINGSYSTEM,
    SHTDN_REASON_MINOR_UPGRADE et SHTDN_REASON_FLAG_PLANNED ne sont pas définis. J'inclu pourtant windows.h .

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Je ne crois pas que ce soit nécessaire sous Windows 98. Essayes d'appeler ExitWindows sans toucher aux privilèges

  9. #9
    Invité
    Invité(e)
    Par défaut
    Enfaite je compile sous 98 mais le programme tournera sous XP alors je doit toucher au privilèges donc j'ai toujours ce problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DBA]Quels droits pour sys.link$
    Par zorglob dans le forum Oracle
    Réponses: 4
    Dernier message: 17/02/2006, 16h01
  2. Droits pour utilisateurs
    Par Maxime555 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 03/05/2005, 19h56
  3. Droit pour faire un déclencheur "after logon on databas
    Par eXiaNazaire dans le forum Oracle
    Réponses: 5
    Dernier message: 05/01/2005, 15h11
  4. Configuration des droits pour samba avec ftp et www
    Par Alkmie dans le forum Réseau
    Réponses: 2
    Dernier message: 07/11/2004, 13h50
  5. Droits pour distribuer une application
    Par aliasjcdenton dans le forum JBuilder
    Réponses: 4
    Dernier message: 17/03/2003, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo