Netapi32.dll + access denied

Résolu
cs_jimmy69 Messages postés 778 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 27 novembre 2008 - 21 nov. 2007 à 08:51
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 1 déc. 2007 à 17:32
Bonjour,

J'ai un project écrit en c# 1.1 qui fait appel a une api windows qui est Netapi32.dll.

J'utilises la fonction NetUserChangePassword de cette dll dans mon code.

Voici l'appel de cette methode :



public string CheckUser(string domain, string username, string password)
{
string valeur;
valeur = "KO";
int ret;

ret = NetUserChangePassword( domain, username, password, password );
if (ret != 0 && ret != 1327 && ret != 2245)
{
valeur = "KO";

MessageBox.Show("Return code: " + ret.ToString());
}
else
{
valeur = "OK";
MessageBox.Show("Return code: " + ret.ToString());

}
return valeur;

Ca fonctionne...sauf que sur une machine, le return code de l'appel de la fonction me renvoit => 5 et donc KO!

D'apres ce que j'ai lu sur internet ce return code correspond a ERROR_ACCESS_DENIED
=> The user does not have access to the requested information.

L'utilisateur n'aurait pas acces aux informations!? Mais comment lui octoroyer ?
Quelqu'un aurait il eu ce probleme et pourrait il me dire ce qu'il a effectue pour corriger cela !?

je vous remercie
Christophe

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
25 nov. 2007 à 01:26
Salut,

Je dirais plutôt que l'utilisateur n'a pas les droits de modifier les informations du compte ciblé.
Quelles sont les différences entre les machines ? Les machines font elles partie d'un domaine ? Quel type d'application utilise ce code ? Depuis où le code est il executé ? Des comptes de domaine sont ils utilisés pour lancer l'application ?
Sinon quel est le but final de la manoeuvre ?

/*
coq
MVP Visual C#
CoqBlog
*/
3
cs_jimmy69 Messages postés 778 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 27 novembre 2008 1
27 nov. 2007 à 08:45
salut salut coq,

Oui exactement c'etait bien cela ! l'utilisateur avait bien l'option user can't change password d'ACTIVIE !!!ce qui nous renvoyaient quand on essayait d'executer le code ..erreur 5 => ACCESS DENIED d'apres la doc MSDN!

Alors pour info, cette dll est placé dans un paquet installable (installshield) et dans la user interface, j'ai un custom dialog avec 3 champs :
domaine, user, password, et quand le user clique sur next j'utilise cette méthode SANS CHANGER SON MOT DE PASSE BIEN SUR afin de verifier si ce user existe ou non ! Si le resultat est ok je passe a l'ecran suivant et j'installe donc le produit ! Il faut absolument que le user existe car un service tourne sous ce user c'est super important !

Ok tu vas me demander pourquoi utilise cette méthode et pas une autre !
Avant on utilisait une methode nommée logonuser avant mais sur certaines machines cela ne tournait pas (win 2000 et vista si mes souvenirs sont bons) !

C'est le seul moyen que j'ai trouve pour verifier si un user local ou du domaine existe ou pas !!!

Si tu as une autre idée, elle est bien sur la bienvenue !

Merci
Christophe
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 déc. 2007 à 17:32
Salut,

Utiliser la méthode de changement de mot de passe pour tester la validité des informations d'authentification fournies me semble dangereux.
D'ailleurs tu changes le mot de passe, pour le même, mais tu fais l'action de le changer, ce qui peut avoir un impact sur la gestion de péremption du mot de passe et autres les règles en vigueur sur la gestion des comptes
A mon avis tu ferais mieux de creuser la raison pour laquelle LogonUser/LogonUserEx ne fonctionnait pas, ce qui en plus devrait te permettre de tester le logon dans le contexte final, c'est à dire pour lancer un service.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous