lancer un programme sous une session differente

lancer un programme sous une session differente - C++ - Programmation

Marsh Posté le 25-01-2006 à 15:00:16    

Bonjour a tous,
 
Je travaille sous win XP et avec C++ builder 6.
Je souhaiterais pouvoir installer un logiciel et ses données sur une session administrateur et lancer ce logiciel depuis une session utilisateur (compte limité).
 
Je sais qu'il est possible sous xindows XP de lancer un executable en tant qu'une autre personne : clic droit sur l'executable, puis "executer en tant que" et choisir le compte à utiliser.
 
Mon but serais de faire la même chose depuis un programme :  
 
Voici ce que j'ai fait :  

Code :
  1. HANDLE hDl, hDL2;
  2. int LURet, DTRet, CPRet;
  3. PROCESS_INFORMATION testPI;
  4. STARTUPINFO * testSI;
  5. DWORD error;
  6. LPVOID lpMsgBuf;
  7. LURet = 1;
  8. DTRet = 1;
  9. CPRet = 1;
  10. testSI = new STARTUPINFO;
  11. testSI->cb = sizeof(STARTUPINFO);
  12. testSI->lpReserved = NULL;
  13. testSI->lpDesktop = NULL;
  14. testSI->lpTitle = NULL;
  15. testSI->dwX = 0;
  16. testSI->dwY = 0;
  17. testSI->dwXSize = 0;
  18. testSI->dwYSize = 0;
  19. testSI->dwXCountChars = 0;
  20. testSI->dwYCountChars = 0;
  21. testSI->dwFillAttribute = 0;
  22. testSI->dwFlags = STARTF_USESHOWWINDOW ;
  23. testSI->wShowWindow = SW_SHOWDEFAULT;
  24. testSI->cbReserved2 = 0;
  25. testSI->lpReserved2 = NULL;
  26. testSI->hStdInput = 0;
  27. testSI->hStdOutput = 0;
  28. testSI->hStdError = 0;
  29. LURet = LogonUser( "masession","\\masession-xp","monmdp",LOGON32_LOGON_INTERACTIVE ,LOGON32_PROVIDER_DEFAULT,&hDl);
  30. if(LURet==0)
  31. {
  32. //affichage du message d'erreur
  33. }
  34. else
  35. {
  36. CPRet = CreateProcessAsUser(hDl, Form1->Edit1->Text.c_str(), NULL, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, testSI, &testPI);
  37. if (CPRet==0)
  38. {
  39.  //affichage de mon message d'erreur
  40. }
  41. }


 
Je me logue en tant que l'utilisateur que je veux etre et je tente de lancer mon application avec cet utilisateur.
 
Je penses ne pas être loin de la solution, mais une option doit etre mauvaise car la reponse que j'ai est un message d'erreur me disant que je ne dispose pas d'un privilege necessaire pour faire cette operation.
 
Quelqu'un aurait-il une idéee de ce qui cloche???
 
Merci

Message cité 1 fois
Message édité par barucca le 25-01-2006 à 15:07:29
Reply

Marsh Posté le 25-01-2006 à 15:00:16   

Reply

Marsh Posté le 25-01-2006 à 15:12:33    

Windows :-O)))
Non j'deconne  

Reply

Marsh Posté le 25-01-2006 à 15:13:21    

:) j'y ai pensé aussi, mais je me suis dis que ca ne pouvait pas etre si facile!! :p
d'autres idées???
en fait je n'arrive pas a cerner si ca viens de mon code, une mauvaise option, ou de ma session windows, si il me manque une case a cocher quelque part ou quelque chose comme ca...


Message édité par barucca le 25-01-2006 à 15:14:32
Reply

Marsh Posté le 25-01-2006 à 17:16:36    

barucca a écrit :

Bonjour a tous,
Je penses ne pas être loin de la solution, mais une option doit etre mauvaise car la reponse que j'ai est un message d'erreur me disant que je ne dispose pas d'un privilege necessaire pour faire cette operation.


Le mieux est de savoir quel est le privilege qu'il te faut!
Quel est l'erreur exacte?

Reply

Marsh Posté le 26-01-2006 à 08:47:50    

l'erreur est "le client ne dispose pas d'un privilege necessaire"... tres explicite!! ;)

Reply

Marsh Posté le 26-01-2006 à 10:02:56    

bon je suis sur une piste si on trouve je posterais le resultat, apparemment il faudrait modifier les DACL du user et du bureau...
suite au prochain épisode...

Reply

Marsh Posté le 27-01-2006 à 11:42:44    

tout compte fait on a trouvé un exemple sur la MSDN qui marche en mode console... on a donc laissé tomber le mode graphique.  
Par contre on cherche toujours à nos moments perdus car c'est frustrant de savoir qu'on été pas loin!! ;)

Reply

Marsh Posté le 03-02-2006 à 08:36:56    

bonjour a tous!!!
alors l'exemple que nous avons trouvé sur la MSDN est pour une application console, mais en tunant un peu on a reussi à faire avec un parametre pour pouvoir lancer plusieurs programmes.
pour trouver le lien sur la fonction principale avec un exemple : recherchez dans la MSDN : CreateProcessWithLogonW

Reply

Marsh Posté le 03-02-2006 à 11:50:40    

Bonjour,  
merci, c'est toujours bon a savoir.

Reply

Marsh Posté le 06-02-2006 à 10:01:27    

y a pas de quoi, on a bien galéré, autant que ca serve!! ;)

Reply

Sujets relatifs:

Leave a Replay

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