Как вызвать GetNetworkParams/GetAdaptersInfo С помощью Visual Basic

Переводы статьи Переводы статьи
Код статьи: 223025 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

В этой статье показано, как программно получить сведения о конфигурации IP вида IPCONFIG.EXE утилиту. Он демонстрирует использование интерфейсов API модуля поддержки IP GetNetworkParams() и GetAdaptersInfo() с помощью Visual Basic.

Библиотеки, вызываемых в образце кода в этой статье поддерживаются только на следующих платформах:
Microsoft Windows 2000
Microsoft Windows 98
Microsoft Windows Millennium Edition (Me)
Он должен быть запущен на другие платформы приводит к ошибке.

Дополнительная информация

  1. Начните новый проект Visual Basic стандартный exe-ФАЙЛ. По умолчанию создается форма Form1.
  2. На Проект меню, нажмите кнопку Удаление формы Form1.
  3. На Проект меню, нажмите кнопку Добавить модуль. По умолчанию создается Module1.
  4. Вставьте следующий код в раздел общих объявлений Module1.
    Public Const MAX_HOSTNAME_LEN = 132
    Public Const MAX_DOMAIN_NAME_LEN = 132
    Public Const MAX_SCOPE_ID_LEN = 260
    Public Const MAX_ADAPTER_NAME_LENGTH = 260
    Public Const MAX_ADAPTER_ADDRESS_LENGTH = 8
    Public Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132
    Public Const ERROR_BUFFER_OVERFLOW = 111
    Public Const MIB_IF_TYPE_ETHERNET = 6
    Public Const MIB_IF_TYPE_TOKENRING = 9
    Public Const MIB_IF_TYPE_FDDI = 15
    Public Const MIB_IF_TYPE_PPP = 23
    Public Const MIB_IF_TYPE_LOOPBACK = 24
    Public Const MIB_IF_TYPE_SLIP = 28
    
    Type IP_ADDR_STRING
                Next As Long
                IpAddress As String * 16
                IpMask As String * 16
                Context As Long
    End Type
    
    Type IP_ADAPTER_INFO
                Next As Long
                ComboIndex As Long
                AdapterName As String * MAX_ADAPTER_NAME_LENGTH
                Description As String * MAX_ADAPTER_DESCRIPTION_LENGTH
                AddressLength As Long
                Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte
                Index As Long
                Type As Long
                DhcpEnabled As Long
                CurrentIpAddress As Long
                IpAddressList As IP_ADDR_STRING
                GatewayList As IP_ADDR_STRING
                DhcpServer As IP_ADDR_STRING
                HaveWins As Byte
                PrimaryWinsServer As IP_ADDR_STRING
                SecondaryWinsServer As IP_ADDR_STRING
                LeaseObtained As Long
                LeaseExpires As Long
    End Type
    
    Type FIXED_INFO
                HostName As String * MAX_HOSTNAME_LEN
                DomainName As String * MAX_DOMAIN_NAME_LEN
                CurrentDnsServer As Long
                DnsServerList As IP_ADDR_STRING
                NodeType As Long
                ScopeId  As String * MAX_SCOPE_ID_LEN
                EnableRouting As Long
                EnableProxy As Long
                EnableDns As Long
    End Type
    
    Public Declare Function GetNetworkParams Lib "IPHlpApi.dll" _
           (FixedInfo As Any, pOutBufLen As Long) As Long
    Public Declare Function GetAdaptersInfo Lib "IPHlpApi.dll" _
           (IpAdapterInfo As Any, pOutBufLen As Long) As Long
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
           (Destination As Any, Source As Any, ByVal Length As Long)
    
    Sub main()
        Dim error As Long
        Dim FixedInfoSize As Long
        Dim AdapterInfoSize As Long
        Dim i As Integer
        Dim PhysicalAddress  As String
        Dim NewTime As Date
        Dim AdapterInfo As IP_ADAPTER_INFO
        Dim AddrStr As IP_ADDR_STRING
        Dim FixedInfo As FIXED_INFO
        Dim Buffer As IP_ADDR_STRING
        Dim pAddrStr As Long
        Dim pAdapt As Long
        Dim Buffer2 As IP_ADAPTER_INFO
        Dim FixedInfoBuffer() As Byte
        Dim AdapterInfoBuffer() As Byte
        
        ' Get the main IP configuration information for this machine
        ' using a FIXED_INFO structure.
        FixedInfoSize = 0
        error = GetNetworkParams(ByVal 0&, FixedInfoSize)
        If error <> 0 Then
            If error <> ERROR_BUFFER_OVERFLOW Then
               MsgBox "GetNetworkParams sizing failed with error " & error
               Exit Sub
            End If
        End If
        ReDim FixedInfoBuffer(FixedInfoSize - 1)
        
        error = GetNetworkParams(FixedInfoBuffer(0), FixedInfoSize)
        If error = 0 Then
                CopyMemory FixedInfo, FixedInfoBuffer(0), FixedInfoSize
                MsgBox "Host Name:  " & FixedInfo.HostName
                MsgBox "DNS Servers:  " & FixedInfo.DnsServerList.IpAddress
                pAddrStr = FixedInfo.DnsServerList.Next
                Do While pAddrStr <> 0
                      CopyMemory Buffer, ByVal pAddrStr, LenB(Buffer)
                      MsgBox "DNS Servers:  " & Buffer.IpAddress
                      pAddrStr = Buffer.Next
                Loop
                
                Select Case FixedInfo.NodeType
                           Case 1
                                      MsgBox "Node type: Broadcast"
                           Case 2
                                      MsgBox "Node type: Peer to peer"
                           Case 4
                                      MsgBox "Node type: Mixed"
                           Case 8
                                      MsgBox "Node type: Hybrid"
                           Case Else
                                      MsgBox "Unknown node type"
                End Select
                
                MsgBox "NetBIOS Scope ID:  " & FixedInfo.ScopeId
                If FixedInfo.EnableRouting Then
                           MsgBox "IP Routing Enabled "
                Else
                           MsgBox "IP Routing not enabled"
                End If
                If FixedInfo.EnableProxy Then
                           MsgBox "WINS Proxy Enabled "
                Else
                           MsgBox "WINS Proxy not Enabled "
                End If
                If FixedInfo.EnableDns Then
                          MsgBox "NetBIOS Resolution Uses DNS "
                Else
                          MsgBox "NetBIOS Resolution Does not use DNS  "
                End If
        Else
                MsgBox "GetNetworkParams failed with error " & error
                Exit Sub
        End If
        
        ' Enumerate all of the adapter specific information using the
        ' IP_ADAPTER_INFO structure.
        ' Note:  IP_ADAPTER_INFO contains a linked list of adapter entries.
        
        AdapterInfoSize = 0
        error = GetAdaptersInfo(ByVal 0&, AdapterInfoSize)
        If error <> 0 Then
            If error <> ERROR_BUFFER_OVERFLOW Then
               MsgBox "GetAdaptersInfo sizing failed with error " & error
               Exit Sub
            End If
        End If
        ReDim AdapterInfoBuffer(AdapterInfoSize - 1)
    
        ' Get actual adapter information
        error = GetAdaptersInfo(AdapterInfoBuffer(0), AdapterInfoSize)
        If error <> 0 Then
           MsgBox "GetAdaptersInfo failed with error " & error
           Exit Sub
        End If
       
        ' Allocate memory
         CopyMemory AdapterInfo, AdapterInfoBuffer(0), AdapterInfoSize
        pAdapt = AdapterInfo.Next
    
        Do
         CopyMemory Buffer2, AdapterInfo, AdapterInfoSize
           Select Case Buffer2.Type
                  Case MIB_IF_TYPE_ETHERNET
                       MsgBox "Adapter name: Ethernet adapter "
                  Case MIB_IF_TYPE_TOKENRING
                       MsgBox "Adapter name: Token Ring adapter "
                  Case MIB_IF_TYPE_FDDI
                       MsgBox "Adapter name: FDDI adapter "
                  Case MIB_IF_TYPE_PPP
                       MsgBox "Adapter name: PPP adapter"
                  Case MIB_IF_TYPE_LOOPBACK
                       MsgBox "Adapter name: Loopback adapter "
                  Case MIB_IF_TYPE_SLIP
                       MsgBox "Adapter name: Slip adapter "
                  Case Else
                       MsgBox "Adapter name: Other adapter "
           End Select
           MsgBox "AdapterDescription: " & Buffer2.Description
    
           PhysicalAddress = ""
           For i = 0 To Buffer2.AddressLength - 1
               PhysicalAddress = PhysicalAddress & Hex(Buffer2.Address(i))
               If i < Buffer2.AddressLength - 1 Then
                  PhysicalAddress = PhysicalAddress & "-"
               End If
           Next
           MsgBox "Physical Address: " & PhysicalAddress
        
           If Buffer2.DhcpEnabled Then
              MsgBox "DHCP Enabled "
           Else
              MsgBox "DHCP disabled"
           End If
    
           MsgBox "IP Address: " & Buffer2.IpAddressList.IpAddress
           MsgBox "Subnet Mask: " & Buffer2.IpAddressList.IpMask
           pAddrStr = Buffer2.IpAddressList.Next
           Do While pAddrStr <> 0
              CopyMemory Buffer, Buffer2.IpAddressList, LenB(Buffer)
              MsgBox "IP Address: " & Buffer.IpAddress
              MsgBox "Subnet Mask: " & Buffer.IpMask
              pAddrStr = Buffer.Next
              If pAddrStr <> 0 Then
                 CopyMemory Buffer2.IpAddressList, ByVal pAddrStr, _
                            LenB(Buffer2.IpAddressList)
              End If
           Loop
        
           MsgBox "Default Gateway: " & Buffer2.GatewayList.IpAddress
           pAddrStr = Buffer2.GatewayList.Next
           Do While pAddrStr <> 0
              CopyMemory Buffer, Buffer2.GatewayList, LenB(Buffer)
              MsgBox "IP Address: " & Buffer.IpAddress
              pAddrStr = Buffer.Next
              If pAddrStr <> 0 Then
                 CopyMemory Buffer2.GatewayList, ByVal pAddrStr, _
                            LenB(Buffer2.GatewayList)
              End If
           Loop
    
           MsgBox "DHCP Server: " & Buffer2.DhcpServer.IpAddress
           MsgBox "Primary WINS Server: " & _
                  Buffer2.PrimaryWinsServer.IpAddress
           MsgBox "Secondary WINS Server: " & _
                  Buffer2.SecondaryWinsServer.IpAddress
    
           ' Display time.
           NewTime = DateAdd("s", Buffer2.LeaseObtained, #1/1/1970#)
           MsgBox "Lease Obtained: " & _
                  CStr(Format(NewTime, "dddd, mmm d hh:mm:ss yyyy"))
         
           NewTime = DateAdd("s", Buffer2.LeaseExpires, #1/1/1970#)
           MsgBox "Lease Expires :  " & _
                  CStr(Format(NewTime, "dddd, mmm d hh:mm:ss yyyy"))
           pAdapt = Buffer2.Next
           If pAdapt <> 0 Then
               CopyMemory AdapterInfo, ByVal pAdapt, AdapterInfoSize
            End If
          Loop Until pAdapt = 0
    End Sub
    					
  5. Нажмите клавишу F5, чтобы запустить проект, нажмите кнопку ОК на каждом из окна сообщений, которые будут отображаться и обратите внимание на результаты.
Запустить этот образец, как скомпилировать, EXE дает следующее сообщение об ошибке в конце:
Ошибка выполнения 10: фиксированного массива и временно заблокирован.
Это выполняется внутри IDE создает IPF в VB6.EXE в конце.

Ссылки

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
193059ИНФОРМАЦИЯ: API модуля поддержки IP добавить Net Config и Stat сведения для приложений Win32
234573 Ошибка: IPHelper API работать неправильно после установки IE 5.0 на Windows 98

Свойства

Код статьи: 223025 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • операционная система Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 4.0 Standard Edition
Ключевые слова: 
kbapi kbhowto kbiphelp kbmt KB223025 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:223025

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com