LogonUser et CreateProcessAsUser [Résolu]

Messages postés
104
Date d'inscription
jeudi 24 juin 2004
Dernière intervention
9 février 2006
- - Dernière réponse : cs_nope
Messages postés
16
Date d'inscription
samedi 4 janvier 2003
Dernière intervention
10 novembre 2006
- 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 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
69
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
18 novembre 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de cs_hendrix
Messages postés
69
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
18 novembre 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de cs_hendrix
Messages postés
104
Date d'inscription
jeudi 24 juin 2004
Dernière intervention
9 février 2006
0
Merci
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
Messages postés
69
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
18 novembre 2008
0
Merci
Salut !!

Alors, as tu avancé sur le sujet ?

@+ et bon courage !

hendrix
Commenter la réponse de cs_hendrix
Messages postés
69
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
18 novembre 2008
0
Merci
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
Messages postés
104
Date d'inscription
jeudi 24 juin 2004
Dernière intervention
9 février 2006
0
Merci
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
Messages postés
16
Date d'inscription
samedi 4 janvier 2003
Dernière intervention
10 novembre 2006
0
Merci
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.