donner un privilège a mon application

donner un privilège a mon application - C++ - Programmation

Marsh Posté le 24-08-2006 à 11:22:20    

bonjour
 
j'aurais voulu utiliser les fonctions pour éteindre/redémarrer le pc automatiquement  
 
 
mais elles ne fonctionnent que si mon programme a les privilèges windows, et pour ça il faut mettre ce bout de code (j'ai trouvé le meme sur plusieurs sites):
 

Code :
  1. HANDLE hToken;
  2. TOKEN_PRIVILEGES tkp;
  3. AnsiString error;
  4. // Get a token for this process.
  5. if (!OpenProcessToken(GetCurrentProcess(),
  6. TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
  7. error = "OpenProcessToken";
  8. // Get the LUID for the shutdown privilege.
  9. LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
  10. &tkp.Privileges[0].Luid);
  11. tkp.PrivilegeCount = 1; // one privilege to set
  12. tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  13. // Get the shutdown privilege for this process.
  14. AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
  15. (PTOKEN_PRIVILEGES)NULL, 0);
  16. // Cannot test the return value of AdjustTokenPrivileges.
  17. if (GetLastError() != ERROR_SUCCESS)
  18. error = "AdjustTokenPrivileges";


 
mais quand je l'utilise j'ai une montagne d'erreurs ! (erreurs de syntaxes, variables non définies, erreurs de liens... la totale quoi)
pourtant sur tous les sites qui proposaient ce code AUCUN n'a spécifié qu'il fallait inclure un header ou un .lib particulier... help !

Reply

Marsh Posté le 24-08-2006 à 11:22:20   

Reply

Marsh Posté le 24-08-2006 à 11:45:14    

Quelle est la question ?


Message édité par _darkalt3_ le 24-08-2006 à 11:45:38

---------------
Töp of the plöp
Reply

Marsh Posté le 24-08-2006 à 11:55:53    

:D  
ben, comment faire pour que ce code fonctionne ?
 
j'en ai trouvé un autre, qui me donne qu'une seule erreur lors de la compilation:

Code :
  1. bool __fastcall SetPrivilege(SE_SHUTDOWN_NAME, TRUE)
  2. {
  3.    TOKEN_PRIVILEGES wTokenIn, wTokenOut;
  4.    DWORD wLength;
  5.    HANDLE wCurrentProcess, wToken;
  6.    _LUID wLuid;
  7.    bool ret;
  8.    wCurrentProcess = GetCurrentProcess();
  9.    OpenProcessToken(wCurrentProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &wToken);
  10.    LookupPrivilegeValue(NULL, name.c_str(), &wLuid);
  11.    wTokenIn.PrivilegeCount = 1;
  12.    wTokenIn.Privileges[0].Luid = wLuid;
  13.    wTokenIn.Privileges[0].Attributes = (grant?SE_PRIVILEGE_ENABLED:0);
  14.    ret = AdjustTokenPrivileges(wToken, FALSE, &wTokenIn, sizeof(TOKEN_PRIVILEGES), &wTokenOut,&wLength))
  15.    CloseHandle(wToken);
  16.    return ret;
  17. }


 
error C2448: 'SetPrivilege' : l'initialiseur de style fonction semble être une définition de fonction

Reply

Marsh Posté le 24-08-2006 à 11:58:39    

T'as vérifié fonction utilisée par fonction utilisée dans quelle(s) bibliothèque(s) tu pouvais les trouver ?


Message édité par _darkalt3_ le 24-08-2006 à 11:59:01

---------------
Töp of the plöp
Reply

Marsh Posté le 24-08-2006 à 12:18:59    

comment le vérifier ?
d'après ce que j'ai lu ça fait partie de l'api windows, il faut inclure windows.h mais ensuite ils ne parlent pas de .lib a ajouter dans l'éditeur de liens :/

Reply

Marsh Posté le 24-08-2006 à 13:45:01    

Citation :

Library  
 
Use Advapi32.lib.


 
Vu dans http://msdn.microsoft.com/library/ [...] ileges.asp

Reply

Marsh Posté le 24-08-2006 à 14:36:19    

je l'ai inclu mais ça me fait toujours la meme erreur :/
pour advapi32.dll je pense que le .lib le charge de lui-meme non ?
là ché plus quoi faire  :pt1cable:


Message édité par xphanoo le 24-08-2006 à 14:41:56
Reply

Marsh Posté le 24-08-2006 à 15:49:15    

SetPrivilege() <-- enleve les params

Reply

Marsh Posté le 24-08-2006 à 17:57:11    

j'ai trouvé un autre bout de code et celui-ci marche sans problème, va savoir pourquoi...
 

Code :
  1. HANDLE token;
  2.    TOKEN_PRIVILEGES privileges;
  3.    // Get the current process token handle...
  4.    OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token );
  5.    // Get the LUID for shutdown privilege...
  6.    LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &privileges.Privileges[ 0 ].Luid );
  7.    // Set parameters for AdjustTokenPrivileges...
  8.    privileges.PrivilegeCount = 1;
  9.    privileges.Privileges[ 0 ].Attributes = SE_PRIVILEGE_ENABLED;
  10.    // Enable shutdown privilege...
  11.    AdjustTokenPrivileges( token, FALSE, &privileges, 0, (PTOKEN_PRIVILEGES)NULL, 0 );

Reply

Marsh Posté le 25-08-2006 à 13:38:07    

LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &privileges.Privileges[ 0 ].Luid ) != LookupPrivilegeValue(NULL, name.c_str(), &wLuid); car name.c_str() n'apparait nul par dans ton code, ça doit surement être le param non typé du param SE_SHUTDOWN_NAME dans SetPrivilege(SE_SHUTDOWN_NAME, TRUE) donc ça me parait logique.

Reply

Marsh Posté le 25-08-2006 à 13:38:07   

Reply

Marsh Posté le 25-08-2006 à 14:04:18    

Salut tout le monde
 
Je cherche depuis un petit moment a faire exactement la même chose que xphanoo mais en asp.
J'ai donc pris le bout de code que tu as donné qui apparement marche chez toi mais pas chez moi :-(
 
"Une directive using ou une référence d'assembly est introuvable"
 
Quand j'essaye d'ajouter la référence "Advapi32.dll" il me dit que "[...] ce n'est pas une assembly valide ou un composant com [...]"
 
Est ce que quelqu'un pourrait m'expliquer comment donner les privilèges à mon application asp afin de pouvoir utiliser les fonctions pour redemarrer un pc???
 
En vous remerciant

Reply

Marsh Posté le 25-08-2006 à 16:07:44    

xphanoo a écrit :

:D  
ben, comment faire pour que ce code fonctionne ?
 
j'en ai trouvé un autre, qui me donne qu'une seule erreur lors de la compilation:

Code :
  1. bool __fastcall SetPrivilege(SE_SHUTDOWN_NAME, TRUE)
  2. {
  3. <snip>
  4. }


 
error C2448: 'SetPrivilege' : l'initialiseur de style fonction semble être une définition de fonction


 
hahem ... tu n'aurais pas oublié le type dans la déclaration de ta fonction ?
bool __fastcall SetPrivilege(SE_SHUTDOWN_NAME typeX, TRUE type2)
 
Ca aurais une meilleur gueulle !

Reply

Marsh Posté le 27-08-2006 à 18:23:14    

xphanoo a écrit :

j'ai trouvé un autre bout de code et celui-ci marche sans problème, va savoir pourquoi...


 
Commence par apprendre à programmer avec un bouquin au lieu de copier n'importe quoi sur le net sans rien comprendre.
90% des codes des forums (genre developpez (le pire)) sont écrits par des incapables ou des gamins.
Les seuls codes valables sont ceux de msdn (source des 10% restants évidemment...)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed