Bonjour tout l'monde.

Un souci concernant les API windows au sein de Windev commence à m'exaspérer sérieusement. En effet, j'ai une application d'archivage de factures qui peut être utilisée par de nombreuses personnes. MAIS, chaque personne possède des droits qui leur sont propres. Donc certaines personnes peuvent avoir accès à tant d'onglets, tandis que d'autres moins d'onglets etc ...

Dernièrement, ces droits étaient définis par un fichier .ini, on m'a demandé de faire en sorte que désormais, ce soit défini par l'Active Directory. Pour cela, je dois récupérer le MemberOf de l'utilisateur (pour connaitre son service au sein de l'entreprise). Ex : pour ma part, mon MemberOf est Informatique, mon domain est le nom de mon entreprise. Mais ce, sans demander le mot de passe à l'utilisateur.

J'ai essayé ça :

Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
Workgroup est une chaîne = ""
pInfos est un entier système// Pointeur sur les infos retournées par l'API
join_status est un entier // Pointeur sur le statut
QUAND EXCEPTION DANS
	// 1er paramètre à 0x00 --> ordinateur local
	API("Netapi32.dll", "NetGetJoinInformation", 0x00,&pInfos,&join_status) //ou NetGetJoinInformation ou NetWkstaGetInfo
	// join_status = 0 --> statut inconnu
	// join_status = 1 --> pas de réseau accessible
	// join_status = 2 --> groupe de travail
	// join_status = 3 --> domaine
	SI join_status=2 ALORS Workgroup = SansEspace(ChaîneRécupère(pInfos,crAdresseUNICODE))
 
FAIRE
	RENVOYER ""
FIN
// Libération de la mémoire réservée par NetGetJoinInformation
Workgroup = SansEspace(ChaîneRécupère(pInfos,crAdresseUNICODE))
API("Netapi32.dll", "NetApiBufferFree", &pInfos)

J'ai récupéré ce code sur un forum windev... en vain. Le join_status est toujours à 3. J'ai tenté avec NetWkstaGetInfo mais ça ne fonctionne pas du tout là. Le code est à 0. Y a t'il un moyen avec une API Windows de connaître ce MemberOf ?

Information supplémentaire :

Je vous ai parlé de MemberOf tout à l'heure, voici comme je l'obtiens (mauvaise façon, car utilisation du mot de passe) :

Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
LDAPRAZ()
//Paramètres de connexion
LDAPSession.Hôte = "nom de mon serveur ad"
LDAPSession.Port = 389
LDAPSession.Version = 2
 
LDAPSession.Utilisateur = "login_user@domain.local"
LDAPSession.MotDePasse = "password_user"
// Connexion
resultat est un booléen = LDAPConnecte("MaSession")
SI PAS resultat ALORS
	Ferme(Fen_Archivage) 
FIN
strDN est une chaîne = LDAPRecherche("MaSession","dc=cerpbn,dc=lan","sAMAccountName=" + LDAPSession.Utilisateur)
SI strDN<> "" ALORS
	// Impossible de lister le DN de connexion
	// l'utilisateur n'a pas été logué avec le bon mot de passe.
	Erreur("Le mot de passe de l'utilisateur "+ LDAPSession.Utilisateur + " est erroné.")
FIN
 
 
strInfo est une chaîne
strFiltre est une chaîne ="sn= nom_user" 
strSession est une chaîne = "MaSession"
 
 
strDN = LDAPRecherche(strSession, "dc=cerpbn,dc=lan", strFiltre) //Lance une recherche dans un serveur LDAP
SI PAS ErreurDétectée() ALORS
	SI strDN <> "" ALORS
		strListeAttributs est une chaîne = LDAPListeAttribut("MaSession", strDN)
		strInfo = "Description : " + LDAPValeur(strSession, strDN, "description", 1) + RC
		strInfo += "Company : " + LDAPValeur(strSession, strDN, "company", 1) + RC
		strInfo += "MemberOf : " + LDAPValeur(strSession, strDN, "MemberOf", 1) + RC
		strInfo += "Département : " + LDAPValeur(strSession, strDN, "Department", 1) + RC
		strInfo += "PrimaryGroupID : " + LDAPValeur(strSession, strDN, "primaryGroupID", 1) + RC
		strInfo += "UserAccountControl : " + LDAPValeur(strSession, strDN, "userAccountControl", 1) + RC
		strNom est une chaîne = LDAPValeur(strSession, strDN, "sn", 1)
		strPrenom est une chaîne = LDAPValeur(strSession, strDN, "givenName", 1)
		strInfo += "sAMAccountName : "+ LDAPValeur(strSession, strDN, "sAMAccountName", 1) + RC
		strInfo += "userPrincipalName : "+ LDAPValeur(strSession, strDN, "userPrincipalName", 1) + RC
		strInfo += "DN:"+ strDN + RC
		Info("Bonjour " + strPrenom + " " + strNom + RC + strInfo)
	FIN	
FIN
 
// Déconnexion
LDAPDéconnecte("MaSession")