Enumerating machines on domain network

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Joe User

    #1

    Enumerating machines on domain network

    Hi - I found the class below on another website (www.devx.com)
    and can't seem to figure out how to make a call to this class to
    retrieve the machines and put them in a listbox.

    I am definitely a beginner in vb programming, and would really
    appreciate the help.

    TIA!



    Imports System.Runtime. InteropServices

    Public Class MasterBrowseLis t

    Private Const MAX_PREFERRED_L ENGTH As Integer = -1&
    Private Const NERR_SUCCESS As Long = 0&
    Private Const ERROR_MORE_DATA As Long = 234&
    Private Const SV_TYPE_WORKSTA TION As Long = &H1
    Private Const SV_TYPE_SERVER As Long = &H2
    Private Const SV_TYPE_SQLSERV ER As Long = &H4
    Private Const SV_TYPE_DOMAIN_ CTRL As Long = &H8
    Private Const SV_TYPE_DOMAIN_ BAKCTRL As Long = &H10
    Private Const SV_TYPE_TIME_SO URCE As Long = &H20
    Private Const SV_TYPE_AFP As Long = &H40
    Private Const SV_TYPE_NOVELL As Long = &H80
    Private Const SV_TYPE_DOMAIN_ MEMBER As Long = &H100
    Private Const SV_TYPE_PRINTQ_ SERVER As Long = &H200
    Private Const SV_TYPE_DIALIN_ SERVER As Long = &H400
    Private Const SV_TYPE_XENIX_S ERVER As Long = &H800
    Private Const SV_TYPE_SERVER_ UNIX As Long = SV_TYPE_XENIX_S ERVER
    Private Const SV_TYPE_NT As Long = &H1000
    Private Const SV_TYPE_WFW As Long = &H2000
    Private Const SV_TYPE_SERVER_ MFPN As Long = &H4000
    Private Const SV_TYPE_SERVER_ NT As Long = &H8000
    Private Const SV_TYPE_POTENTI AL_BROWSER As Long = &H10000
    Private Const SV_TYPE_BACKUP_ BROWSER As Long = &H20000
    Private Const SV_TYPE_MASTER_ BROWSER As Long = &H40000
    Private Const SV_TYPE_DOMAIN_ MASTER As Long = &H80000
    Private Const SV_TYPE_SERVER_ OSF As Long = &H100000
    Private Const SV_TYPE_SERVER_ VMS As Long = &H200000
    Private Const SV_TYPE_WINDOWS As Long = &H400000
    'Windows95 +
    Private Const SV_TYPE_DFS As Long = &H800000
    'Root of a DFS tree
    Private Const SV_TYPE_CLUSTER _NT As Long = &H1000000 'NT
    Cluster
    Private Const SV_TYPE_TERMINA LSERVER As Long = &H2000000
    'Terminal Server
    Private Const SV_TYPE_DCE As Long = &H10000000 'IBM
    DSS
    Private Const SV_TYPE_ALTERNA TE_XPORT As Long = &H20000000
    'return alternate transport
    Private Const SV_TYPE_LOCAL_L IST_ONLY As Long = &H40000000
    'return local only
    Private Const SV_TYPE_DOMAIN_ ENUM As Long = &H80000000
    Private Const SV_TYPE_ALL As Long = &HFFFFFFFF
    Private Const MAJOR_VERSION_M ASK As Long = &HF

    Private Structure SERVER_INFO_101
    Dim PlatformID As Integer
    Dim Name As IntPtr
    Dim VersionMajor As Integer
    Dim VersionMinor As Integer
    Dim Type As Integer
    Dim Comment As IntPtr
    End Structure

    Private Declare Auto Function NetApiBufferFre e Lib "netapi32.d ll"
    (ByVal bufptr As IntPtr) As Integer


    Private Declare Auto Function NetServerEnum Lib "netapi32.d ll" _
    (ByVal nullptr As Integer, _
    ByVal Level As Integer, _
    ByRef BufPtr As IntPtr, _
    ByVal BufMaxLen As Integer, _
    ByRef EntriesRead As Integer,
    _
    ByRef TotalEntries As Integer,
    _
    ByVal ServerType As Integer, _
    ByVal Domain As IntPtr, _
    ByVal ResumeHandle As Integer)
    As Integer


    Public Enum MACHINEPLATFORM As Integer
    DOS = 300
    OS2 = 400
    NT_2K_XP = 500
    OSF = 600
    VMS = 700
    End Enum

    Public Enum MACHINETYPE As Integer
    Workstation = &H1
    Server = &H2
    SQLServer = &H4
    DomainControlle r = &H8
    BackupDomainCon troller = &H10
    TimeSource = &H20
    AppleFileProtoc olServer = &H40
    NovellServer = &H80
    DomainMember = &H100
    PrintServer = &H200
    DialinServer = &H400
    UnixOrXenix = &H800
    NT_2K_XP = &H1000
    WinForWorkgroup s = &H2000
    ServerFilePrint ForNetware = &H4000
    ServerNT = &H8000
    PotentialBrowse r = &H10000
    BackupBrowser = &H20000
    MasterBrowser = &H40000
    DomainMaster = &H80000
    ServerOSF = &H100000
    ServerVMS = &H200000
    Windows95OrHigh er = &H400000
    DFSRoot = &H800000
    ClusterNode = &H1000000
    TerminalServer = &H2000000
    ClusterVirtualS erver = &H4000000
    End Enum

    Public Structure MACHINE
    Dim Platform As MACHINEPLATFORM
    Dim Name As String
    Dim VersionMajor As Integer
    Dim VersionMinor As Integer
    Dim TypeBits As MACHINETYPE
    Dim Comment As String
    End Structure

    Public Shared Function GetMasterBrowse List() As MACHINE()
    Return GetMasterBrowse List(Nothing)
    End Function

    Public Shared Function GetMasterBrowse List(ByVal Domain As String)
    As MACHINE()
    Dim BrowseList As New ArrayList

    Dim BufPtr As IntPtr
    Dim se101 As SERVER_INFO_101
    Dim StructSize As Integer = Marshal.SizeOf( se101)

    Dim EntriesRead As Integer
    Dim TotalEntries As Integer
    Dim ServerType As Integer = SV_TYPE_WORKSTA TION Or
    SV_TYPE_SERVER
    Dim DomainPtr As IntPtr

    If Domain Is Nothing Or Domain = "" Then
    DomainPtr = New IntPtr(0)
    Else
    'we are faking a constant string here with a BSTR by
    appending
    'a null character. we'll free it afterwards
    DomainPtr = Marshal.StringT oBSTR(Domain & Chr(0))
    End If

    Dim ret As Integer = NetServerEnum(0 , _
    101, _
    BufPtr, _
    MAX_PREFERRED_L ENGTH, _
    EntriesRead, _
    TotalEntries, _
    ServerType, _
    DomainPtr, _
    0)
    Marshal.FreeBST R(DomainPtr)

    Try
    If ret = NERR_SUCCESS Then
    Dim nextbufptr As IntPtr

    For t As Integer = 0 To EntriesRead - 1
    'copy memory chunk OF SIZE StructSize
    ' FROM LOC bufptr +
    (StructSize + t)
    ' INTO LOC se101
    nextbufptr = New IntPtr(BufPtr.T oInt32 +
    (StructSize * t))
    se101 = Marshal.PtrToSt ructure(nextbuf ptr,
    GetType(SERVER_ INFO_101))

    Dim themachine As MACHINE
    themachine.Name =
    Marshal.PtrToSt ringUni(se101.N ame)
    themachine.Comm ent =
    Marshal.PtrToSt ringUni(se101.C omment)
    themachine.Plat form = se101.PlatformI D
    themachine.Type Bits = se101.Type
    themachine.Vers ionMajor = se101.VersionMa jor And
    MAJOR_VERSION_M ASK
    themachine.Vers ionMinor = se101.VersionMi nor

    BrowseList.Add( themachine)
    Next
    End If
    Catch ex As Exception
    Throw ex
    Finally
    NetApiBufferFre e(BufPtr)
    End Try

    Return BrowseList.ToAr ray(GetType(MAC HINE))

    End Function

    End Class
  • Ken Tucker [MVP]

    #2
    Re: Enumerating machines on domain network

    Hi,

    This will only work if you are connected to an active directory. Add
    a reference to system.director yservices. Replace NetworkName with your
    network name.

    Dim de As New System.Director yServices.Direc toryEntry("LDAP ://NetworkName")

    Dim ds As New System.Director yServices.Direc torySearcher(de )

    Dim r As System.Director yServices.Searc hResult

    ds.Filter = "(objectClass=c omputer)"

    Try

    For Each r In ds.FindAll

    Dim s As String

    Console.WriteLi ne(r.GetDirecto ryEntry.Name.To String)

    Next

    Catch e As Exception

    Console.WriteLi ne(e.ToString)

    End Try


    This NetServerEnum api will work for a network without a domain. I
    pasted the code for a sample console app below.

    Imports System.Runtime. InteropServices

    Module Module1

    Structure Computer_info_1 01

    Public Platform_ID As Integer

    <MarshalAsAttri bute(UnmanagedT ype.LPWStr)> Public Name As String

    Public Version_Major As Integer

    Public Version_Minor As Integer

    Public Type As Integer

    <MarshalAsAttri bute(UnmanagedT ype.LPWStr)> Public Comment As String

    End Structure

    Declare Unicode Function NetServerEnum Lib "Netapi32.d ll" _

    (ByVal Servername As Integer, ByVal level As Integer, _

    ByRef buffer As Integer, ByVal PrefMaxLen As Integer, _

    ByRef EntriesRead As Integer, ByRef TotalEntries As Integer, _

    ByVal ServerType As Integer, ByVal DomainName As String, _

    ByRef ResumeHandle As Integer) As Integer

    Declare Function NetApiBufferFre e Lib "Netapi32.d ll" _

    (ByVal lpBuffer As Integer) As Integer

    Private Const SV_TYPE_SERVER As Integer = &H2 ' All Servers

    Sub Main()

    Dim ComputerInfo As Computer_info_1 01

    Dim i, MaxLenPref, level, ret, EntriesRead, TotalEntries, ResumeHandle As
    Integer

    Dim BufPtr As Integer

    Dim iPtr As IntPtr

    MaxLenPref = -1

    level = 101

    ret = NetServerEnum(0 , level, BufPtr, MaxLenPref, EntriesRead, TotalEntries,
    _

    SV_TYPE_SERVER, "MSHOME", ResumeHandle) ' Replace MSHOME with your workgroup
    name

    If ret <> 0 Then

    Console.WriteLi ne("An Error has occured")

    Return

    End If



    ' loop thru the entries

    For i = 0 To EntriesRead - 1

    ' copy the stuff into our structure

    Dim ptr As IntPtr = New IntPtr(BufPtr)

    computerInfo = CType(Marshal.P trToStructure(p tr,
    GetType(Compute r_info_101)), _

    Computer_info_1 01)

    BufPtr = BufPtr + Len(ComputerInf o)

    Console.WriteLi ne(computerInfo .Name)

    Next

    NetApiBufferFre e(BufPtr)

    Console.Write(" Press Enter to End")

    Dim s As String = Console.ReadLin e()

    End Sub





    End Module

    Ken
    ---------------

    "Joe User" <jake_a_lake@ya hoo.com> wrote in message
    news:a2045aae.0 411080847.77dfa c5d@posting.goo gle.com...
    Hi - I found the class below on another website (www.devx.com)
    and can't seem to figure out how to make a call to this class to
    retrieve the machines and put them in a listbox.

    I am definitely a beginner in vb programming, and would really
    appreciate the help.

    TIA!



    Imports System.Runtime. InteropServices

    Public Class MasterBrowseLis t

    Private Const MAX_PREFERRED_L ENGTH As Integer = -1&
    Private Const NERR_SUCCESS As Long = 0&
    Private Const ERROR_MORE_DATA As Long = 234&
    Private Const SV_TYPE_WORKSTA TION As Long = &H1
    Private Const SV_TYPE_SERVER As Long = &H2
    Private Const SV_TYPE_SQLSERV ER As Long = &H4
    Private Const SV_TYPE_DOMAIN_ CTRL As Long = &H8
    Private Const SV_TYPE_DOMAIN_ BAKCTRL As Long = &H10
    Private Const SV_TYPE_TIME_SO URCE As Long = &H20
    Private Const SV_TYPE_AFP As Long = &H40
    Private Const SV_TYPE_NOVELL As Long = &H80
    Private Const SV_TYPE_DOMAIN_ MEMBER As Long = &H100
    Private Const SV_TYPE_PRINTQ_ SERVER As Long = &H200
    Private Const SV_TYPE_DIALIN_ SERVER As Long = &H400
    Private Const SV_TYPE_XENIX_S ERVER As Long = &H800
    Private Const SV_TYPE_SERVER_ UNIX As Long = SV_TYPE_XENIX_S ERVER
    Private Const SV_TYPE_NT As Long = &H1000
    Private Const SV_TYPE_WFW As Long = &H2000
    Private Const SV_TYPE_SERVER_ MFPN As Long = &H4000
    Private Const SV_TYPE_SERVER_ NT As Long = &H8000
    Private Const SV_TYPE_POTENTI AL_BROWSER As Long = &H10000
    Private Const SV_TYPE_BACKUP_ BROWSER As Long = &H20000
    Private Const SV_TYPE_MASTER_ BROWSER As Long = &H40000
    Private Const SV_TYPE_DOMAIN_ MASTER As Long = &H80000
    Private Const SV_TYPE_SERVER_ OSF As Long = &H100000
    Private Const SV_TYPE_SERVER_ VMS As Long = &H200000
    Private Const SV_TYPE_WINDOWS As Long = &H400000
    'Windows95 +
    Private Const SV_TYPE_DFS As Long = &H800000
    'Root of a DFS tree
    Private Const SV_TYPE_CLUSTER _NT As Long = &H1000000 'NT
    Cluster
    Private Const SV_TYPE_TERMINA LSERVER As Long = &H2000000
    'Terminal Server
    Private Const SV_TYPE_DCE As Long = &H10000000 'IBM
    DSS
    Private Const SV_TYPE_ALTERNA TE_XPORT As Long = &H20000000
    'return alternate transport
    Private Const SV_TYPE_LOCAL_L IST_ONLY As Long = &H40000000
    'return local only
    Private Const SV_TYPE_DOMAIN_ ENUM As Long = &H80000000
    Private Const SV_TYPE_ALL As Long = &HFFFFFFFF
    Private Const MAJOR_VERSION_M ASK As Long = &HF

    Private Structure SERVER_INFO_101
    Dim PlatformID As Integer
    Dim Name As IntPtr
    Dim VersionMajor As Integer
    Dim VersionMinor As Integer
    Dim Type As Integer
    Dim Comment As IntPtr
    End Structure

    Private Declare Auto Function NetApiBufferFre e Lib "netapi32.d ll"
    (ByVal bufptr As IntPtr) As Integer


    Private Declare Auto Function NetServerEnum Lib "netapi32.d ll" _
    (ByVal nullptr As Integer, _
    ByVal Level As Integer, _
    ByRef BufPtr As IntPtr, _
    ByVal BufMaxLen As Integer, _
    ByRef EntriesRead As Integer,
    _
    ByRef TotalEntries As Integer,
    _
    ByVal ServerType As Integer, _
    ByVal Domain As IntPtr, _
    ByVal ResumeHandle As Integer)
    As Integer


    Public Enum MACHINEPLATFORM As Integer
    DOS = 300
    OS2 = 400
    NT_2K_XP = 500
    OSF = 600
    VMS = 700
    End Enum

    Public Enum MACHINETYPE As Integer
    Workstation = &H1
    Server = &H2
    SQLServer = &H4
    DomainControlle r = &H8
    BackupDomainCon troller = &H10
    TimeSource = &H20
    AppleFileProtoc olServer = &H40
    NovellServer = &H80
    DomainMember = &H100
    PrintServer = &H200
    DialinServer = &H400
    UnixOrXenix = &H800
    NT_2K_XP = &H1000
    WinForWorkgroup s = &H2000
    ServerFilePrint ForNetware = &H4000
    ServerNT = &H8000
    PotentialBrowse r = &H10000
    BackupBrowser = &H20000
    MasterBrowser = &H40000
    DomainMaster = &H80000
    ServerOSF = &H100000
    ServerVMS = &H200000
    Windows95OrHigh er = &H400000
    DFSRoot = &H800000
    ClusterNode = &H1000000
    TerminalServer = &H2000000
    ClusterVirtualS erver = &H4000000
    End Enum

    Public Structure MACHINE
    Dim Platform As MACHINEPLATFORM
    Dim Name As String
    Dim VersionMajor As Integer
    Dim VersionMinor As Integer
    Dim TypeBits As MACHINETYPE
    Dim Comment As String
    End Structure

    Public Shared Function GetMasterBrowse List() As MACHINE()
    Return GetMasterBrowse List(Nothing)
    End Function

    Public Shared Function GetMasterBrowse List(ByVal Domain As String)
    As MACHINE()
    Dim BrowseList As New ArrayList

    Dim BufPtr As IntPtr
    Dim se101 As SERVER_INFO_101
    Dim StructSize As Integer = Marshal.SizeOf( se101)

    Dim EntriesRead As Integer
    Dim TotalEntries As Integer
    Dim ServerType As Integer = SV_TYPE_WORKSTA TION Or
    SV_TYPE_SERVER
    Dim DomainPtr As IntPtr

    If Domain Is Nothing Or Domain = "" Then
    DomainPtr = New IntPtr(0)
    Else
    'we are faking a constant string here with a BSTR by
    appending
    'a null character. we'll free it afterwards
    DomainPtr = Marshal.StringT oBSTR(Domain & Chr(0))
    End If

    Dim ret As Integer = NetServerEnum(0 , _
    101, _
    BufPtr, _
    MAX_PREFERRED_L ENGTH, _
    EntriesRead, _
    TotalEntries, _
    ServerType, _
    DomainPtr, _
    0)
    Marshal.FreeBST R(DomainPtr)

    Try
    If ret = NERR_SUCCESS Then
    Dim nextbufptr As IntPtr

    For t As Integer = 0 To EntriesRead - 1
    'copy memory chunk OF SIZE StructSize
    ' FROM LOC bufptr +
    (StructSize + t)
    ' INTO LOC se101
    nextbufptr = New IntPtr(BufPtr.T oInt32 +
    (StructSize * t))
    se101 = Marshal.PtrToSt ructure(nextbuf ptr,
    GetType(SERVER_ INFO_101))

    Dim themachine As MACHINE
    themachine.Name =
    Marshal.PtrToSt ringUni(se101.N ame)
    themachine.Comm ent =
    Marshal.PtrToSt ringUni(se101.C omment)
    themachine.Plat form = se101.PlatformI D
    themachine.Type Bits = se101.Type
    themachine.Vers ionMajor = se101.VersionMa jor And
    MAJOR_VERSION_M ASK
    themachine.Vers ionMinor = se101.VersionMi nor

    BrowseList.Add( themachine)
    Next
    End If
    Catch ex As Exception
    Throw ex
    Finally
    NetApiBufferFre e(BufPtr)
    End Try

    Return BrowseList.ToAr ray(GetType(MAC HINE))

    End Function

    End Class


    Comment

    • Joe User

      #3
      Re: Enumerating machines on domain network

      Thanks for the post Ken, but I'm not working in an AD environment
      'yet'. Seems like it'd be easier if i was. :\

      I'll take a look at the console code, but I was hoping someone could
      show me how to use the code i posted, as I'd really like to know how
      the function GetMasterBrowse List is to be used and what exactly it
      returns.

      Any ideas?


      Thanks again!

      joe



      "Ken Tucker [MVP]" <vb2ae@bellsout h.net> wrote in message news:<exQlG1cxE HA.3416@TK2MSFT NGP09.phx.gbl>. ..[color=blue]
      > Hi,
      >
      > This will only work if you are connected to an active directory. Add
      > a reference to system.director yservices. Replace NetworkName with your
      > network name.
      >
      > Dim de As New System.Director yServices.Direc toryEntry("LDAP ://NetworkName")
      >
      > Dim ds As New System.Director yServices.Direc torySearcher(de )
      >
      > Dim r As System.Director yServices.Searc hResult
      >
      > ds.Filter = "(objectClass=c omputer)"
      >
      > Try
      >
      > For Each r In ds.FindAll
      >
      > Dim s As String
      >
      > Console.WriteLi ne(r.GetDirecto ryEntry.Name.To String)
      >
      > Next
      >
      > Catch e As Exception
      >
      > Console.WriteLi ne(e.ToString)
      >
      > End Try
      >
      >
      > This NetServerEnum api will work for a network without a domain. I
      > pasted the code for a sample console app below.
      >
      > Imports System.Runtime. InteropServices
      >
      > Module Module1
      >
      > Structure Computer_info_1 01
      >
      > Public Platform_ID As Integer
      >
      > <MarshalAsAttri bute(UnmanagedT ype.LPWStr)> Public Name As String
      >
      > Public Version_Major As Integer
      >
      > Public Version_Minor As Integer
      >
      > Public Type As Integer
      >
      > <MarshalAsAttri bute(UnmanagedT ype.LPWStr)> Public Comment As String
      >
      > End Structure
      >
      > Declare Unicode Function NetServerEnum Lib "Netapi32.d ll" _
      >
      > (ByVal Servername As Integer, ByVal level As Integer, _
      >
      > ByRef buffer As Integer, ByVal PrefMaxLen As Integer, _
      >
      > ByRef EntriesRead As Integer, ByRef TotalEntries As Integer, _
      >
      > ByVal ServerType As Integer, ByVal DomainName As String, _
      >
      > ByRef ResumeHandle As Integer) As Integer
      >
      > Declare Function NetApiBufferFre e Lib "Netapi32.d ll" _
      >
      > (ByVal lpBuffer As Integer) As Integer
      >
      > Private Const SV_TYPE_SERVER As Integer = &H2 ' All Servers
      >
      > Sub Main()
      >
      > Dim ComputerInfo As Computer_info_1 01
      >
      > Dim i, MaxLenPref, level, ret, EntriesRead, TotalEntries, ResumeHandle As
      > Integer
      >
      > Dim BufPtr As Integer
      >
      > Dim iPtr As IntPtr
      >
      > MaxLenPref = -1
      >
      > level = 101
      >
      > ret = NetServerEnum(0 , level, BufPtr, MaxLenPref, EntriesRead, TotalEntries,
      > _
      >
      > SV_TYPE_SERVER, "MSHOME", ResumeHandle) ' Replace MSHOME with your workgroup
      > name
      >
      > If ret <> 0 Then
      >
      > Console.WriteLi ne("An Error has occured")
      >
      > Return
      >
      > End If
      >
      >
      >
      > ' loop thru the entries
      >
      > For i = 0 To EntriesRead - 1
      >
      > ' copy the stuff into our structure
      >
      > Dim ptr As IntPtr = New IntPtr(BufPtr)
      >
      > computerInfo = CType(Marshal.P trToStructure(p tr,
      > GetType(Compute r_info_101)), _
      >
      > Computer_info_1 01)
      >
      > BufPtr = BufPtr + Len(ComputerInf o)
      >
      > Console.WriteLi ne(computerInfo .Name)
      >
      > Next
      >
      > NetApiBufferFre e(BufPtr)
      >
      > Console.Write(" Press Enter to End")
      >
      > Dim s As String = Console.ReadLin e()
      >
      > End Sub
      >
      >
      >
      >
      >
      > End Module
      >
      > Ken
      > ---------------
      >
      > "Joe User" <jake_a_lake@ya hoo.com> wrote in message
      > news:a2045aae.0 411080847.77dfa c5d@posting.goo gle.com...
      > Hi - I found the class below on another website (www.devx.com)
      > and can't seem to figure out how to make a call to this class to
      > retrieve the machines and put them in a listbox.
      >
      > I am definitely a beginner in vb programming, and would really
      > appreciate the help.
      >
      > TIA!
      >
      >
      >
      > Imports System.Runtime. InteropServices
      >
      > Public Class MasterBrowseLis t
      >
      > Private Const MAX_PREFERRED_L ENGTH As Integer = -1&
      > Private Const NERR_SUCCESS As Long = 0&
      > Private Const ERROR_MORE_DATA As Long = 234&
      > Private Const SV_TYPE_WORKSTA TION As Long = &H1
      > Private Const SV_TYPE_SERVER As Long = &H2
      > Private Const SV_TYPE_SQLSERV ER As Long = &H4
      > Private Const SV_TYPE_DOMAIN_ CTRL As Long = &H8
      > Private Const SV_TYPE_DOMAIN_ BAKCTRL As Long = &H10
      > Private Const SV_TYPE_TIME_SO URCE As Long = &H20
      > Private Const SV_TYPE_AFP As Long = &H40
      > Private Const SV_TYPE_NOVELL As Long = &H80
      > Private Const SV_TYPE_DOMAIN_ MEMBER As Long = &H100
      > Private Const SV_TYPE_PRINTQ_ SERVER As Long = &H200
      > Private Const SV_TYPE_DIALIN_ SERVER As Long = &H400
      > Private Const SV_TYPE_XENIX_S ERVER As Long = &H800
      > Private Const SV_TYPE_SERVER_ UNIX As Long = SV_TYPE_XENIX_S ERVER
      > Private Const SV_TYPE_NT As Long = &H1000
      > Private Const SV_TYPE_WFW As Long = &H2000
      > Private Const SV_TYPE_SERVER_ MFPN As Long = &H4000
      > Private Const SV_TYPE_SERVER_ NT As Long = &H8000
      > Private Const SV_TYPE_POTENTI AL_BROWSER As Long = &H10000
      > Private Const SV_TYPE_BACKUP_ BROWSER As Long = &H20000
      > Private Const SV_TYPE_MASTER_ BROWSER As Long = &H40000
      > Private Const SV_TYPE_DOMAIN_ MASTER As Long = &H80000
      > Private Const SV_TYPE_SERVER_ OSF As Long = &H100000
      > Private Const SV_TYPE_SERVER_ VMS As Long = &H200000
      > Private Const SV_TYPE_WINDOWS As Long = &H400000
      > 'Windows95 +
      > Private Const SV_TYPE_DFS As Long = &H800000
      > 'Root of a DFS tree
      > Private Const SV_TYPE_CLUSTER _NT As Long = &H1000000 'NT
      > Cluster
      > Private Const SV_TYPE_TERMINA LSERVER As Long = &H2000000
      > 'Terminal Server
      > Private Const SV_TYPE_DCE As Long = &H10000000 'IBM
      > DSS
      > Private Const SV_TYPE_ALTERNA TE_XPORT As Long = &H20000000
      > 'return alternate transport
      > Private Const SV_TYPE_LOCAL_L IST_ONLY As Long = &H40000000
      > 'return local only
      > Private Const SV_TYPE_DOMAIN_ ENUM As Long = &H80000000
      > Private Const SV_TYPE_ALL As Long = &HFFFFFFFF
      > Private Const MAJOR_VERSION_M ASK As Long = &HF
      >
      > Private Structure SERVER_INFO_101
      > Dim PlatformID As Integer
      > Dim Name As IntPtr
      > Dim VersionMajor As Integer
      > Dim VersionMinor As Integer
      > Dim Type As Integer
      > Dim Comment As IntPtr
      > End Structure
      >
      > Private Declare Auto Function NetApiBufferFre e Lib "netapi32.d ll"
      > (ByVal bufptr As IntPtr) As Integer
      >
      >
      > Private Declare Auto Function NetServerEnum Lib "netapi32.d ll" _
      > (ByVal nullptr As Integer, _
      > ByVal Level As Integer, _
      > ByRef BufPtr As IntPtr, _
      > ByVal BufMaxLen As Integer, _
      > ByRef EntriesRead As Integer,
      > _
      > ByRef TotalEntries As Integer,
      > _
      > ByVal ServerType As Integer, _
      > ByVal Domain As IntPtr, _
      > ByVal ResumeHandle As Integer)
      > As Integer
      >
      >
      > Public Enum MACHINEPLATFORM As Integer
      > DOS = 300
      > OS2 = 400
      > NT_2K_XP = 500
      > OSF = 600
      > VMS = 700
      > End Enum
      >
      > Public Enum MACHINETYPE As Integer
      > Workstation = &H1
      > Server = &H2
      > SQLServer = &H4
      > DomainControlle r = &H8
      > BackupDomainCon troller = &H10
      > TimeSource = &H20
      > AppleFileProtoc olServer = &H40
      > NovellServer = &H80
      > DomainMember = &H100
      > PrintServer = &H200
      > DialinServer = &H400
      > UnixOrXenix = &H800
      > NT_2K_XP = &H1000
      > WinForWorkgroup s = &H2000
      > ServerFilePrint ForNetware = &H4000
      > ServerNT = &H8000
      > PotentialBrowse r = &H10000
      > BackupBrowser = &H20000
      > MasterBrowser = &H40000
      > DomainMaster = &H80000
      > ServerOSF = &H100000
      > ServerVMS = &H200000
      > Windows95OrHigh er = &H400000
      > DFSRoot = &H800000
      > ClusterNode = &H1000000
      > TerminalServer = &H2000000
      > ClusterVirtualS erver = &H4000000
      > End Enum
      >
      > Public Structure MACHINE
      > Dim Platform As MACHINEPLATFORM
      > Dim Name As String
      > Dim VersionMajor As Integer
      > Dim VersionMinor As Integer
      > Dim TypeBits As MACHINETYPE
      > Dim Comment As String
      > End Structure
      >
      > Public Shared Function GetMasterBrowse List() As MACHINE()
      > Return GetMasterBrowse List(Nothing)
      > End Function
      >
      > Public Shared Function GetMasterBrowse List(ByVal Domain As String)
      > As MACHINE()
      > Dim BrowseList As New ArrayList
      >
      > Dim BufPtr As IntPtr
      > Dim se101 As SERVER_INFO_101
      > Dim StructSize As Integer = Marshal.SizeOf( se101)
      >
      > Dim EntriesRead As Integer
      > Dim TotalEntries As Integer
      > Dim ServerType As Integer = SV_TYPE_WORKSTA TION Or
      > SV_TYPE_SERVER
      > Dim DomainPtr As IntPtr
      >
      > If Domain Is Nothing Or Domain = "" Then
      > DomainPtr = New IntPtr(0)
      > Else
      > 'we are faking a constant string here with a BSTR by
      > appending
      > 'a null character. we'll free it afterwards
      > DomainPtr = Marshal.StringT oBSTR(Domain & Chr(0))
      > End If
      >
      > Dim ret As Integer = NetServerEnum(0 , _
      > 101, _
      > BufPtr, _
      > MAX_PREFERRED_L ENGTH, _
      > EntriesRead, _
      > TotalEntries, _
      > ServerType, _
      > DomainPtr, _
      > 0)
      > Marshal.FreeBST R(DomainPtr)
      >
      > Try
      > If ret = NERR_SUCCESS Then
      > Dim nextbufptr As IntPtr
      >
      > For t As Integer = 0 To EntriesRead - 1
      > 'copy memory chunk OF SIZE StructSize
      > ' FROM LOC bufptr +
      > (StructSize + t)
      > ' INTO LOC se101
      > nextbufptr = New IntPtr(BufPtr.T oInt32 +
      > (StructSize * t))
      > se101 = Marshal.PtrToSt ructure(nextbuf ptr,
      > GetType(SERVER_ INFO_101))
      >
      > Dim themachine As MACHINE
      > themachine.Name =
      > Marshal.PtrToSt ringUni(se101.N ame)
      > themachine.Comm ent =
      > Marshal.PtrToSt ringUni(se101.C omment)
      > themachine.Plat form = se101.PlatformI D
      > themachine.Type Bits = se101.Type
      > themachine.Vers ionMajor = se101.VersionMa jor And
      > MAJOR_VERSION_M ASK
      > themachine.Vers ionMinor = se101.VersionMi nor
      >
      > BrowseList.Add( themachine)
      > Next
      > End If
      > Catch ex As Exception
      > Throw ex
      > Finally
      > NetApiBufferFre e(BufPtr)
      > End Try
      >
      > Return BrowseList.ToAr ray(GetType(MAC HINE))
      >
      > End Function
      >
      > End Class[/color]

      Comment

      • VisualPro

        #4
        RE: Enumerating machines on domain network

        Try this:

        dim oMasterBrowseLi st as New MasterBrowseLis t.GetMasterBrow seList()
        dim oMachine as MasterBrowseLis t.MACHINE

        For Each oMachine in oMasterBrowseLi st
        List1.Additem oMachine.Name
        Next


        From http://developmentnow.com/g/38_2004_...in-network.htm

        Posted via DevelopmentNow. com Groups
        DevelopmentNow is an award-winning creative software development agency integrating mobile, web, hardware, mixed reality, and emerging technology.

        Comment

        Working...