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.
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.
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); }Envoyé par brastirD'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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part GetTokenInformation(hToken, TokenPrivileges, &token_privileges, sizeof(token_privileges), &dwReturnLength);
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.
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.
Penser à lire la doc MSDN :
http://msdn.microsoft.com/en-us/libr...71(VS.85).aspx
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
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 .
Je ne crois pas que ce soit nécessaire sous Windows 98. Essayes d'appeler ExitWindows sans toucher aux privilèges
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager