LogonUser et CreateProcessAsUser [Résolu]

mathieu57100 104 Messages postés jeudi 24 juin 2004Date d'inscription 9 février 2006 Dernière intervention - 17 mai 2005 à 13:36 - Dernière réponse : cs_nope 16 Messages postés samedi 4 janvier 2003Date d'inscription 10 novembre 2006 Dernière intervention
- 21 juin 2005 à 10:54
Bonjour, j'ai un ptit prob dans ma procédure qui execute un programme en tant qu'un autre utilisateur...
la voici:

procedure TForm1.Button2Click(Sender: TObject);
var
Token : THandle;
Si : STARTUPINFO;
Pi : PROCESS_INFORMATION;
begin
ZeroMemory(@Si, SizeOf(STARTUPINFO));
Si.dwFlags := STARTF_USESHOWWINDOW;
Si.wShowWindow := SW_SHOWNORMAL;
if LogonUser('administrateur', 'ordinateur_local', 'password',LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_WINNT50, Token) then
begin
showmessage('Authentification réussie');
CreateProcessAsUser(Token, 'C:\Program Files\WinRAR\WinRAR.exe', nil, nil, nil, false, 0, nil, nil, Si, Pi);
showmessage('Résultat de l''execution...' + #13 + 'Code d''erreur: ' +IntToStr(GetLastError));
end
else
showmessage('Authentification échouée' + #13 + 'Code d''erreur: ' +IntToStr(GetLastError));
end;

lors de l'execution de cette derniere, j'ai un code d'erreur 1314 qui correspond à : " Le client ne dispose pas d'un privilège nécessaire", alors que j'utilise le compte de l'administrateur local de l'ordinateur...

si quelqu'un a une idée...
merci d'avance.
Afficher la suite 

7 réponses

Répondre au sujet
cs_hendrix 69 Messages postés lundi 30 décembre 2002Date d'inscription 18 novembre 2008 Dernière intervention - 19 mai 2005 à 15:05
+3
Utile
Bonjour,

J'ai déjà eu ce problème.

En fait, ce n'est pas le compte administrateur qui doit avoir les fameux 3 privilèges pour exécuter le logonuser et le createprocessasuser, mais en fait l'utilisateur qui va lancer ton programme.... j'ai cherché assez longtemps à l'époque avant de trouver ça.

Donc, regarde les privilèges des utilisateurs qui vont exécuter ton programme delphi sans t'inquiéter des privilèges du compte admin.... et ça devrait solutionner ton problème.

Meilleures salutations !!!

hendrix
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_hendrix
cs_hendrix 69 Messages postés lundi 30 décembre 2002Date d'inscription 18 novembre 2008 Dernière intervention - 20 mai 2005 à 12:21
+3
Utile
Bonjour,

Oui, le sujet ne semble pas intéresser beaucoup de monde, ou bien il est trop compliqué que personne ne s'y intéresse... mais disons que c'est pratique en entreprise de pouvoir faire exécuter à des users, des choses auxquels ils n'ont pas droit, alors je me suis penché sur le sujet sérieusement il y a un petit moment déjà).

En fait, dans l'administration des comptes NT/XP/AD, tu as des notions de droits utilisateurs et aussi des notions de privilèges (exemple de privilège: pouvoir éteindre ou non une machine, se connecter depuis le réseau etc etc ...). Dans ton cas, tu utilises la fonction suivante: "logonuser", qui sera exécutée avec ton compte utilisateur lambda (pour justement se loguer en tant qu'admin).

Si tu vas voir:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/logonuser.asp

Tu verras que la personne qui va lancer un process qui s'appuie sur logonuser doit avoir la plupart du temps les privilèges suivants:
SE_TCB_NAME = "Act as part of the Operating System"
SE_CHANGE_NOTIFY_NAME = "Bypass traverse checking"

Il faut donc que dans l'administration de ta machine:
- dans NT on accède aux privilèges par:
* programmes/outils d'administration/gestionnaire des utilisateurs
* stratégie/droits des utilisateurs (cocher "afficher les droits avancés des
utilisateurs" pour les avoir tous)

- dans 2000/XP on y accède par:
* panneau de config/outil d'admin/stratégie de sécurité locale/
* stratégies locales/attribution des droits utilisateur

il faut que le compte lambda qui va faire le logonuser dispose des privilèges ci dessus ( je pense que pour toi c'est le premier qui manque pour le compte lambda).

Ceci dit, si la population de machines sur laquelle tu dois mettre en place ta solution, est une population de machines XP, moi je te conseille d'utiliser à ce moment là la fonction "CreateProcessWithLogonW" (ne fonctionne pas sur NT ). Là, tu n'as aucun logon user à faire, il suffit d'appeler la fonction et tout se fait naturellement et simplement et avec les privilèges de base des utilisateurs en plus !!!!

Voilà, j'espère que c'est plus clair pour toi (parce que j'ai pas dû pas du être trop clair dnas la façon de m'exprimer ). Donc il faut juste pour que ton code s'exécute, que tu ajoutes - pour le compte qui va exécuter ce code - le premier privilège et peut être le deuxième. Je sais que moi j'ai assez longtemps galéré avant de trouver ça. (un conseil, révise la partie administration NT/XP et ça devrait bien se passer).

Meilleures salutations et bon courage à toi.

hendrix
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_hendrix
mathieu57100 104 Messages postés jeudi 24 juin 2004Date d'inscription 9 février 2006 Dernière intervention - 19 mai 2005 à 15:24
0
Utile
bonjour,

tout d'abord maerci pour ta réponse, j'ai cru que je n'en n'aurait pas...
je crois pas que ce sois des fontions très utilisées...lol

mais c'est un peu flou pour moi sur ce que tu veux dire à propos des utilisateurs.
peu tu etre un peu plus explicite?

merci d'avance.
Commenter la réponse de mathieu57100
cs_hendrix 69 Messages postés lundi 30 décembre 2002Date d'inscription 18 novembre 2008 Dernière intervention - 30 mai 2005 à 13:38
0
Utile
Salut !!

Alors, as tu avancé sur le sujet ?

@+ et bon courage !

hendrix
Commenter la réponse de cs_hendrix
cs_hendrix 69 Messages postés lundi 30 décembre 2002Date d'inscription 18 novembre 2008 Dernière intervention - 8 juin 2005 à 13:22
0
Utile
Non, plus de nouvelles... c'était bien la peine que "ducros il se décarcasse"

Faut pas baisser les bras comme ça voyons !!!

@+

hendrix
Commenter la réponse de cs_hendrix
mathieu57100 104 Messages postés jeudi 24 juin 2004Date d'inscription 9 février 2006 Dernière intervention - 8 juin 2005 à 14:30
0
Utile
j'ai pas baissé les bras, mais j'ai mis ca de coté pour quelque chose de plus urgent...
Commenter la réponse de mathieu57100
cs_nope 16 Messages postés samedi 4 janvier 2003Date d'inscription 10 novembre 2006 Dernière intervention - 21 juin 2005 à 10:54
0
Utile
Bonjour a tous,
Je suis entrain de deveollper un programme tres similaire a celui que mathieu developpe (sauf que je programme en C++). Bref, j'ai suivi tout les conseils de hendrix, mais ca me dis toujours que le client ne bénéficie pas des droits.

J'explique un peu mon environnement.

Je programme sous Windows NT4 (demande du client) en C++. J'ai créé un compte admintest (dans le groupe administrateurs) et un autre compte adm (aussi dans le groupe administrateur).

Voila, ca fait une semaine que je bloque dessus. Yaurai-t-il un moyen d'avoir un code qui marche?
Commenter la réponse de cs_nope

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.