PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Comment lister les contrôleurs de domaine
Comment lister les contrôleurs de domaine
Started by p.poinsignon, Apr., 07 2006 9:18 AM - 3 replies
Posted on April, 07 2006 - 9:18 AM
Bonjour à tous, petite question que je me pose pour une appli que je suis en train de développer:

Existe t'il un moyen pour récupérer la liste des contrôleurs de domaine sur un réseau?

Si quelqu'un en a déjà eu besoin, la solution m'intéresse!!
Merci d'avance.

Lepatou
Posted on April, 07 2006 - 1:31 PM
Bonjour
sur un réseau W2KPro multisite multi controlleur j'utilise ces deux
fonctions mais je ne peut pas tester dans autre environement
N'oublie pas de me donner un compte rendu
Merci

CONSTANT
ERROR_SUCCESS = 0
DS_NOTIFY_AFTER_SITE_RECORDS = 0x02 // Return
ERROR_FILEMARK_DETECTED after all
ERROR_NO_MORE_ITEMS = 259
ERROR_FILEMARK_DETECTED = 1101
END

//****************************************************************
// Renvoie le nom du domaine sur lequel on est connecté en format exemple :
toto.com
//****************************************************************
FUNCTION LDAPGetDomainName()
NomDuDomaine est une chaîne = ""
nCONTROLLER_INFO est un entier sans signe sur 8 octets
sDomainControllerName est une chaîne ASCIIZ sur 1024 =""
dwRes est un entier sur 8 octets
i, ErrorCode sont des entiers

WHEN EXCEPTION IN
ErrorCode = API(NomDllNet, "DsGetDcNameA", 0x00, 0x00, 0x00, 0x00, 0 ,
&nCONTROLLER_INFO)
IF ErrorCode=ERROR_SUCCESS THEN
Transfert(&dwRes, nCONTROLLER_INFO, 4)
Transfert(&sDomainControllerName, dwRes, 1023)
ELSE
RENVOYER ""
END
DO
RENVOYER ""
END
i = Position(sDomainControllerName,".")
IF i>0 THEN
NomDuDomaine = sDomainControllerName[[ i+1 A ]]
ELSE
NomDuDomaine = ""
END

RENVOYER NomDuDomaine

//*************************************************************************
// Renvoie une chaine séparateur TAB de tous les contrôleurs de domaine
detecté sur le domaine
// Uniquement pour le site en cours ?
//*************************************************************************
FUNCTION LDAPGetAllDomainControler()
DomainName est une chaîne ASCIIZ sur 512
Retry est un entier
RetGetDcContext est un entier = 0
RetFunction est un entier = 0

SockAddressCount, SockAddresses, DnsHostName sont des entier sans signe sur
8 octets
SockAddressCount=0x00
SockAddresses=0x00
DnsHostName=0x00

ServeurName est une chaîne ASCIIZ sur 256
ListeDesServeur est une chaîne = ""
SiteName est une chaîne ASCIIZ sur 512 = ""
DcFlags est un entier sans signe sur 4 octets

// Prend le nom du domaine sur lequel on est connecté
Retry = 0
DomainName = LDAPGetDomainName()
WHILE DomainName="" AND Retry<10
DomainName = LDAPGetDomainName()
Retry++
END

// Opens a new domain controller enumeration operation
DcFlags = DS_FORCE_REDISCOVERY
RetFunction = API(NomDllNet, "DsGetDcOpen", &DomainName,
DS_NOTIFY_AFTER_SITE_RECORDS, 0x00, 0x00, 0x00, DcFlags, &RetGetDcContext )

IF RetFunction = 0 THEN
// Good
WHILE RetFunction = 0
//
RetFunction = API(NomDllNet,"DsGetDcNext", RetGetDcContext,
&SockAddressCount, &SockAddresses, &DnsHostName)
//
IF RetFunction = 0 THEN
IF SockAddressCount>0 THEN
Transfert(&ServeurName,DnsHostName,255)
API(NomDllNet,"NetApiBufferFree",&DnsHostName)
IF ListeDesServeur<>"" THEN ListeDesServeur += TAB
ListeDesServeur += Remplace(ServeurName,"."+DomainName,"")
END
ELSE
IF EnModeTest() THEN
IF RetFunction = ERROR_NO_MORE_ITEMS THEN Erreur("ERROR_NO_MORE_ITEMS")
IF RetFunction = ERROR_FILEMARK_DETECTED THEN
Erreur("ERROR_FILEMARK_DETECTED")
END
SORTIR
END
END

// Closes a domain controller enumeration operation.
API(NomDllNet, "DsGetDcClose",RetGetDcContext)
END

RENVOYER ListeDesServeur

"Lepatou" <p.poinsignon@caisse-epargne.nc> a écrit dans le message de news:
4435f21d$1@news.pcsoft.fr...
Bonjour à tous, petite question que je me pose pour une appli que je suis
en train de développer:

Existe t'il un moyen pour récupérer la liste des contrôleurs de domaine
sur un réseau?

Si quelqu'un en a déjà eu besoin, la solution m'intéresse!!
Merci d'avance.

Lepatou


Posted on April, 18 2006 - 12:56 PM
Merci beaucoup, je n'ai pas encore testé mais on est sur une configuration qui est la même que toi donc ça devrait être ok, je te tiens au courant, merci!
Posted on April, 19 2006 - 9:45 AM
D'après moi, dans les fonctions proposées plus haut, tu ne m'a pas tout mis car il manque des déclarations, Windev me met qu'il ne connait pas certaines variables (ou constantes??)

ex: NomDllNet, DS_FORCE_REDISCOVERY...

En regardant d'autres de tes posts j'ai réussi à trouver certaines déclarations pour faire fonctionner LDAPGetDomainName() mais la constante DS_FORCE_REDISCOVERY me pose toujours problème pour la fonction LDAPGetAllDomainControler().

Patrick