PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → L'api NetServerEnum ne me renvoie pas tous les noms
L'api NetServerEnum ne me renvoie pas tous les noms
Débuté par Meunier Claude, 20 oct. 2004 17:58 - 2 réponses
Posté le 20 octobre 2004 - 17:58
Je fais appelle a NetServerEnum pour récupérer toutes les stations (et leur noms) d'un domaine.
Il me renvoie bien le nombre exact de poste dans l'arguments entriesread mais pour une machine sur deux au lieu d'avoir le nom de la machine j'ai un <EOT>.
Pour contourner le probleme, je suis obligé de declarer mon tableau avec entries * 2 entier
et transferer et lire deux fois plus de ligne.
Quelqu'un a-t-il déja eu le cas et comment le résoudre sans effectuer cette bidouille ?

Voilà mon code :

SV_TYPE_WORKSTATION est un réel = 1
SV_TYPE_ALL est un réel = 0xffffffff
MAX_PREFERRED_LENGTH est un entier = -1
RetourFonction est un boolean
servername est un entier = 0 // Type C :LPCWSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
level est un entier = 100 // Type C :DWORD
bufptr est un entier // Pointeur sur type LPBYTE
prefmaxlen est un entier = MAX_PREFERRED_LENGTH // Type C :DWORD
entriesread est un entier // Type C :LPDWORD
totalentries est un entier // Type C :LPDWORD
servertype est un entier = SV_TYPE_ALL // Type C :DWORD
domain est un entier = 0 // Type C :LPCWSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
resume_handle est un entier // Type C :LPDWORD
i est un entier
TableGroupe est un tableau dynamique
RetourFonction=AppelDLL32("netapi32.DLL","NetServerEnum",servername,level,&bufptr,prefmaxlen,&entriesread,&totalentries,servertype,domain,resume_handle)
TableGroupe = allouer un tableau dynamique entriesread entier
Transfert(&TableGroupe,bufptr,entriesread * 4) //4=nb octets pour un entier
ChNomPc est une chaîne
POUR i = 1 A entriesread
ChNomPc = ChaîneRécupère(TableGroupe[i],crAdresseUNICODE)
SI ChNomPc <> EOT ALORS
TableAjoute(TableSource,"" + TAB + ChNomPc + TAB + "" + TAB + "")
FIN
FIN
AppelDLL32("netapi32.dll","NetApiBufferFree",&bufptr)
Posté le 20 octobre 2004 - 21:05
Salut,

il y a quelques trucs à changer

1.ajoute la déclaration de cette structure
SERVER_INFO_100 est une structure
iId est un entier
iNom est un entier
FIN
2.Remplace la ligne suivante
TableGroupe = allouer un tableau dynamique entriesread entier
par celle ci
TableGroupe = allouer un tableau dynamique entriesread SERVER_INFO_100

3.Remplace le ligne suivante
Transfert(&TableGroupe,bufptr,entriesread * 4) //4=nb octets pour un entier
par
Transfert(&TableGroupe,bufptr,entriesread * 8) //4=nb octets pour un entier (2 dans la structure SERVER_INFO_100)

4.Remplace la ligne suivnte
ChNomPc = ChaîneRécupère(TableGroupe[i],crAdresseUNICODE)
par celle-ci
ChNomPc = ChaîneRécupère(TableGroupe[i]:iNom,crAdresseUNICODE)

et voilà le tour est joué

Mathieu
Posté le 21 octobre 2004 - 12:24
Merci beaucoup, c'est beaucoup plus propre que ma solution.