OVH Cloud OVH Cloud

Liste Serveur VB.NET

2 réponses
Avatar
JL
Bonjour,

Je r=E9alise actuellement une application client/serveur en=20
vb.net. Je souhaiterai pouvoir ins=E9rer la liste des=20
serveurs de donn=E9es disponibles sur le r=E9seau dans une=20
listbox. ESt-ce que quelqu'un connait la proc=E9dure =E0=20
suivre?

Merci d'avance,

JL.

2 réponses

Avatar
Zoury
Salut JL! :O)

regarde ce message :
http://groups.google.com/groups?threadm=uEEpVZ0aEHA.904%40TK2MSFTNGP09.phx.gbl

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic classique
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"JL" a écrit dans le message de
news:2dff401c46bfb$d1688db0$
Bonjour,

Je réalise actuellement une application client/serveur en
vb.net. Je souhaiterai pouvoir insérer la liste des
serveurs de données disponibles sur le réseau dans une
listbox. ESt-ce que quelqu'un connait la procédure à
suivre?

Merci d'avance,

JL.
Avatar
Zoury
J'ai "wrapper" le code dans une classe pour ceux que ça intéresse :

'***
' CNetworkManagement class
Option Explicit On

Imports System.Runtime.InteropServices

Public Enum ServerType
stNone = 0
stWorkStation = &H1
stServer = &H2
stSQLServer = &H4
stDomainCtrl = &H8
stDomainBAKCtrl = &H10
stTimeSource = &H20
stAFP = &H40
stNovell = &H80
stDomainMember = &H100
stPrintQServer = &H200
stDialInServer = &H400
stXenixServer = &H800
stServerUNIX = stXenixServer
stNT = &H1000
stWFW = &H2000
stServerMFPN = &H4000
stServerNT = &H8000
stPotentialBrowser = &H10000
stBackUpBroswer = &H20000
stMasterBrowser = &H40000
stDomainMaster = &H80000
stServerOSF = &H100000
stServerVMS = &H200000
stWindows = &H400000 ' Windows95 and above
stDFS = &H800000 ' Root of a DFS tree
stClusterNT = &H1000000 ' NT Cluster
stTerminalServer = &H2000000 ' Terminal Server
stDCE = &H10000000 ' IBM DSS
stAlternateXport = &H20000000 ' rtn alternate transport
stLocalListOnly = &H40000000 ' rtn local only
stDomainEnum = &H80000000
stAll = &HFFFFFFFF
End Enum

Public Class CNetworkManagement

Private Const MAX_PREFERRED_LENGTH As Int32 = -1
Private Const NERR_SUCCESS As Int32 = 0
Private Const ERROR_MORE_DATA As Int32 = 234

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Private Structure SERVER_INFO_101
Public dwPlatformID As Int32
Public lpszServerName As String
Public dwVersionMajor As Int32
Public dwVersionMinor As Int32
Public dwType As Int32
Public lpszComment As String
End Structure

<DllImport("netapi32.dll", SetLastError:=True)> _
Private Shared Sub NetApiBufferFree _
( _
ByVal lpBuffer As IntPtr _
)
'
End Sub

<DllImport("netapi32.dll", CharSet:=CharSet.Unicode,
SetLastError:=True)> _
Private Shared Function NetServerEnum _
( _
ByVal servername As String, _
ByVal level As Int32, _
ByRef bufptr As IntPtr, _
ByVal prefmaxlen As Int32, _
ByRef entriesread As Int32, _
ByRef totalentries As Int32, _
ByVal servertype As ServerType, _
ByVal domain As String, _
ByRef resume_handle As Int32 _
) As Int32
'
End Function

Public Shared Function GetServerList(Optional ByRef serverType As
ServerType = ServerType.stAll) As String()

Dim lpBuffer As IntPtr
Dim lpTmpBuffer As IntPtr
Dim dwEntriesRead As Int32
Dim dwTotalEntries As Int32
Dim dwResumeHandle As Int32
Dim se101 As SERVER_INFO_101
Dim iRet As Int32
Dim nStructSize As Int32
Dim i As Int32
Dim sServers() As String

nStructSize = Marshal.SizeOf(se101)

iRet = NetServerEnum(Nothing, _
101, _
lpBuffer, _
MAX_PREFERRED_LENGTH, _
dwEntriesRead, _
dwTotalEntries, _
serverType, _
Nothing, _
dwResumeHandle)

If ((iRet = NERR_SUCCESS) And (iRet <> ERROR_MORE_DATA)) Then

' on créer le tableau de noms
ReDim sServers(dwEntriesRead - 1)

' lpBuffer pointe sur un tableau de
' pointeur de structure SERVER_INFO_101
' on doit donc boucler le tableau de pointeur
' afin d'aller extraire les données
'
lpTmpBuffer = lpBuffer
For i = 0 To dwEntriesRead - 1

' on récupère la structure
se101 = Marshal.PtrToStructure(lpTmpBuffer, se101.GetType())

' on conserve le nom du serveur
sServers(i) = se101.lpszServerName

' on passe à la structure suivante (Ptr actuel + taille de
la structure)
lpTmpBuffer = New IntPtr(lpTmpBuffer.ToInt32() +
nStructSize)

Next i

End If

' libère le buffer créer par NetServerEnum
If (Not lpBuffer.Equals(IntPtr.Zero)) Then
NetApiBufferFree(lpBuffer)
End If

Return sServers

End Function

End Class
'***

exemple d'utilisation :
'***
Module Module1

Sub Main()

Dim sServers() As String CNetworkManagement.GetServerList(ServerType.stSQLServer)
Dim s As String

Console.WriteLine(sServers.Length.ToString() & " sql servers found
:")

For Each s In sServers
Console.WriteLine(s)
Next

Console.WriteLine()
Console.WriteLine("Press Enter to quit ...")
Console.ReadLine()

End Sub

End Module
'***

Note que ce code fonctionne sur NT, 2000, XP, 2003 server...

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic classique
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"Zoury" a écrit dans le message de
news:%
Salut JL! :O)

regarde ce message :



http://groups.google.com/groups?threadm=uEEpVZ0aEHA.904%40TK2MSFTNGP09.phx.gbl

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic classique
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"JL" a écrit dans le message de
news:2dff401c46bfb$d1688db0$
Bonjour,

Je réalise actuellement une application client/serveur en
vb.net. Je souhaiterai pouvoir insérer la liste des
serveurs de données disponibles sur le réseau dans une
listbox. ESt-ce que quelqu'un connait la procédure à
suivre?

Merci d'avance,

JL.