NetUserSetInfo

oooDieu Messages postés 12 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 15 mars 2005 - 3 mars 2005 à 10:56
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006 - 3 mars 2005 à 15:46
Bonjour à tous,



Voilà, je débute en C++, et je dois maintenir et faire évoluer un programme.

Je cherche à définir les paramètres d'un compte utilisateur déjà créé :
Password n'expire jamais, User can't change password, etc...



J'utilise dans un premier temps la fonction NetUserGetInfo pour récupérer l' "état" actuel du compte, et cela marche très bien.



J'utilise ensuite la fonction NetUserSetInfo, mais j'avoue avoir
sacrément du mal pour bien définir les paramètres de cette fonction.
Voici mon code :



// Définition des variables.

USER_INFO_1 Buffer;

NET_API_STATUS SetInfoStatus;

char* user;

user = "Test";

wchar_t wuser[5];



// Fonction devant je crois transformer "user" au format demandé par la fonction, c-a-d "LPCWSTR ". (Récupéré sur le net, aucune idée de comment ça marche, et si ça marche...)



mbstowcs(wuser, user, strlen(user)+1);



// Définition de la partie FLAGS :

Buffer.usri1_flags = UF_SCRIPT | UF_DONT_EXPIRE_PASSWD | UF_PASSWD_CANT_CHANGE | UF_ACCOUNTDISABLE;



// Appel de la fonction

SetInfoStatus = NetUserSetInfo ( NULL, wuser, level, (LPBYTE)&Buffer, NULL);



Mon code se compile bien, mais à l'exécution s'arrete à l'exécution de
la fonction NetUserSetInfo avec une erreur critique : "L'instruction à
(0x77f3395d) emploie l'adresse mémoire "0xcccccccc". La mémoire ne peut
pas être "read".



Au secours....

5 réponses

yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006
3 mars 2005 à 12:46
A mon avis le pb vient de char* user
. Si tu met char user [256], ca devrait aller mieux. De tout façon le nom d'utilisateur sous windows est limité à 256 caractère je crois.

Bon courrage.
0
oooDieu Messages postés 12 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 15 mars 2005
3 mars 2005 à 14:14
Cela ne résoud pas mon problème, au contraire puisqu'en faisant cela,
j'ai une erreur de compilation : "cannot convert from 'char [5]' to
'char [256]' " sur la ligne " user = "Test"; ".



J'avoue que je n'y comprends rien à tous ces types de variables, entre les pointeurs, les valeurs et unicode....



ERRATUM : Dans le code cité ci-dessus, j'ai oublié de mettre cette ligne : DWORD level = 1;

Mais j'ai bien cette ligne dans mon programme, donc, l'erreur ne vient pas de là....



Merci quand même. Si quelqu'un à une autre solution à me proposer...
0
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006
3 mars 2005 à 14:21
Au lieu de user = "test" utilise strcpy (user, "test")
0
oooDieu Messages postés 12 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 15 mars 2005
3 mars 2005 à 15:33
Bon, ok, ça marche déjà mieux puisque je n'ai plus l'erreur de compilation.

J'avais prévenu, je suis une bille en C++ !!!



Malgré tout, j'ai toujours mon erreur critique à l'exécution...

J'avoue que je commence à désespérer, et à péter un câble !!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006
3 mars 2005 à 15:46
Pourquoi wchar_t wuser[5];
(pourquoi 5 et pas 256).
Il me semble que la taille de wuser va etre imposé par user.
Par exemple wuser[256].

Clairement il s'agit certainement d'un pb d'allocation.

Bon courrage.
0
Rejoignez-nous