📄 form1.frm
字号:
VERSION 5.00
Begin VB.Form Form1
Caption = "WSAEnumProtocols Output"
ClientHeight = 7725
ClientLeft = 60
ClientTop = 345
ClientWidth = 9795
LinkTopic = "Form1"
ScaleHeight = 7725
ScaleWidth = 9795
StartUpPosition = 3 'Windows Default
Begin VB.ListBox List1
BeginProperty Font
Name = "Fixedsys"
Size = 9
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 7260
Left = 240
TabIndex = 0
Top = 120
Width = 9375
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'
' Project: enumvb
'
' Description:
' This project enumerates all of the Winsock catalog entries and
' displays them in a list box. This is done using the WSAEnumProtocols
' API.
'
Option Explicit
Dim EnumStrAll As String
'
' Subroutine: DoEnum
'
' Description:
' This routine initializes Winsock and then calls WSAEnumProtocols.
' This first call to this function is done to obtain the size of
' the buffer required for the call to complete successfully. We
' then allocate a buffer of that size and call the function again.
'
Private Sub DoEnum()
Dim wsadStartupData As WSADataType
Dim dwRet As Long, dwBufLen As Long, dwErr As Long
Dim pProtoBuffer As Long
Dim i As Long
dwRet = WSAStartup(&H202, wsadStartupData)
If dwRet <> 0 Then
MsgBox "Error WSAStartup: " & Err.LastDllError
Exit Sub
End If
'
' Call the function with NULL and 0 in order to obtain the
' necessary buffer size.
'
dwBufLen = 0
dwRet = WSAEnumProtocols(0, 0, dwBufLen)
If dwRet = SOCKET_ERROR Then 'it's going to happ as buffer is 0
dwErr = Err.LastDllError
If dwErr <> WSAENOBUFS And dwErr <> 0 Then
MsgBox "Error WSAEnumProtocols: " & dwErr
WSACleanup
Exit Sub
End If
'
' Allocate the buffer and call it again.
'
pProtoBuffer = GlobalAlloc(GMEM_FIXED, dwBufLen)
dwRet = WSAEnumProtocols(0, pProtoBuffer, dwBufLen)
If dwRet = SOCKET_ERROR Then
dwErr = Err.LastDllError
MsgBox "Error WSAEnumPrtocols: " & dwErr
GlobalFree pProtoBuffer
WSACleanup
Exit Sub
End If
List1.AddItem "Num Protocols found: " & dwRet
Dim pWorkPointer As Long
'
' Print the info
'
For i = 0 To dwRet - 1
PrintProtocolInfo pProtoBuffer, i
Next i
End If
GlobalFree pProtoBuffer
WSACleanup
End Sub
'
' Subroutine: PrintProtocolInfo
'
' Description:
' This function is responsible for taking each WSAPROTOCOL_INFO
' structure returned from WSAEnumProtocols and printing the
' contained information to a window in human readable form.
'
Sub PrintProtocolInfo(pProtoBuffer As Long, index As Long)
Dim wsapi As WSAPROTOCOL_INFO
CopyMemory2 wsapi, pProtoBuffer + index * LenB(wsapi), LenB(wsapi)
Dim szProtocol As String
szProtocol = String(256, 0)
lstrcpy szProtocol, wsapi.szProtocol(0)
szProtocol = Trim(szProtocol)
List1.AddItem ""
List1.AddItem "Protocol: " & szProtocol
EnumStrAll = " Address Family: "
Select Case (wsapi.iAddressFamily)
Case AF_INET:
EnumStrAll = EnumStrAll & "AF_INET"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: "
Select Case (wsapi.iProtocol)
Case IPPROTO_IP:
EnumStrAll = EnumStrAll & "IPROTO_IP"
Case IPPROTO_ICMP:
EnumStrAll = EnumStrAll & "IPROTO_ICMP"
Case IPPROTO_IGMP:
EnumStrAll = EnumStrAll & "IPROTO_IGMP"
Case IPPROTO_GGP:
EnumStrAll = EnumStrAll & "IPROTO_GGP"
Case IPPROTO_TCP:
EnumStrAll = EnumStrAll & "IPROTO_TCP"
Case IPPROTO_PUP:
EnumStrAll = EnumStrAll & "IPROTO_PUP"
Case IPPROTO_UDP:
EnumStrAll = EnumStrAll & "IPROTO_UDP"
Case IPPROTO_IDP:
EnumStrAll = EnumStrAll & "IPROTO_IDP"
Case IPPROTO_ND:
EnumStrAll = EnumStrAll & "IPROTO_ND"
Case IPPROTO_RAW:
EnumStrAll = EnumStrAll & "IPROTO_RAW"
End Select
List1.AddItem EnumStrAll
Case AF_INET6:
EnumStrAll = EnumStrAll & "AF_INET6"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: "
Select Case (wsapi.iProtocol)
Case IPPROTO_IP:
EnumStrAll = EnumStrAll & "IPROTO_IP"
Case IPPROTO_ICMP:
EnumStrAll = EnumStrAll & "IPROTO_ICMP"
Case IPPROTO_IGMP:
EnumStrAll = EnumStrAll & "IPROTO_IGMP"
Case IPPROTO_GGP:
EnumStrAll = EnumStrAll & "IPROTO_GGP"
Case IPPROTO_TCP:
EnumStrAll = EnumStrAll & "IPROTO_TCP"
Case IPPROTO_PUP:
EnumStrAll = EnumStrAll & "IPROTO_PUP"
Case IPPROTO_UDP:
EnumStrAll = EnumStrAll & "IPROTO_UDP"
Case IPPROTO_IDP:
EnumStrAll = EnumStrAll & "IPROTO_IDP"
Case IPPROTO_ND:
EnumStrAll = EnumStrAll & "IPROTO_ND"
Case IPPROTO_RAW:
EnumStrAll = EnumStrAll & "IPROTO_RAW"
End Select
List1.AddItem EnumStrAll
Case AF_UNSPEC:
EnumStrAll = EnumStrAll & "AF_UNSPEC"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_UNIX:
EnumStrAll = EnumStrAll & "AF_UNIX"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_IMPLINK:
EnumStrAll = EnumStrAll & "AF_IMPLINK"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_PUP:
EnumStrAll = EnumStrAll & "AF_PUP"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_CHAOS:
EnumStrAll = EnumStrAll & "AF_CHAOS"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_NS:
EnumStrAll = EnumStrAll & "AF_NS or AF_IPX"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: "
Select Case wsapi.iProtocol
Case NSPROTO_IPX:
EnumStrAll = EnumStrAll & "NSPROTO_IPX"
Case NSPROTO_SPX:
EnumStrAll = EnumStrAll & "NSPROTO_SPX"
Case NSPROTO_SPXII:
EnumStrAll = EnumStrAll & "NSPROTO_SPXII"
End Select
List1.AddItem EnumStrAll
Case AF_ISO:
EnumStrAll = EnumStrAll & "AF_ISO or AF_OSI"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_ECMA:
EnumStrAll = EnumStrAll & "AF_ECMA"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_DATAKIT:
EnumStrAll = EnumStrAll & "AF_DATAKIT"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_CCITT:
EnumStrAll = EnumStrAll & "AF_CCITT"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_SNA:
EnumStrAll = EnumStrAll & "AF_SNA"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_DECnet:
EnumStrAll = EnumStrAll & "AF_DECnet"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_DLI:
EnumStrAll = EnumStrAll & "AF_DLI"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_LAT:
EnumStrAll = EnumStrAll & "AF_LAT"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_HYLINK:
EnumStrAll = EnumStrAll & "AF_HYLINK"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: UNKNOWN: " & wsapi.iProtocol
Case AF_APPLETALK:
EnumStrAll = EnumStrAll & "AF_APPLETALK"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: "
Select Case (wsapi.iProtocol)
Case DDPPROTO_RTMP:
EnumStrAll = EnumStrAll & "DDPPROTO_RTMP"
Case DDPPROTO_NBP:
EnumStrAll = EnumStrAll & "DDPPROTO_NBP"
Case DDPPROTO_ATP:
EnumStrAll = EnumStrAll & "DDPROTO_ATP"
Case DDPPROTO_AEP:
EnumStrAll = EnumStrAll & "DDPPROTO_AEP"
Case DDPPROTO_RTMPRQ:
EnumStrAll = EnumStrAll & "DDPPROTO_RTMPRQ"
Case DDPPROTO_ZIP:
EnumStrAll = EnumStrAll & "DDPPROTO_ZIP"
Case DDPPROTO_ADSP:
EnumStrAll = EnumStrAll & "DDPPROTO_ADSP"
Case ATPROTO_ADSP:
EnumStrAll = EnumStrAll & "ATPROTO_ADSP"
Case ATPROTO_ATP:
EnumStrAll = EnumStrAll & "ATPROTO_ATP"
Case ATPROTO_ASP:
EnumStrAll = EnumStrAll & "ATPROTO_ASP"
Case ATPROTO_PAP:
EnumStrAll = EnumStrAll & "ATPROTO_PAP"
End Select
List1.AddItem EnumStrAll
Case AF_NETBIOS:
EnumStrAll = EnumStrAll & "AF_NETBIOS"
List1.AddItem EnumStrAll
EnumStrAll = " Protocol: "
If wsapi.iProtocol = &H80000000 Then
EnumStrAll = EnumStrAll & "NetBIOS LANA " & 0
List1.AddItem EnumStrAll
Else
EnumStrAll = EnumStrAll & "NetBIOS LANA " & Abs(wsapi.iProtocol)
List1.AddItem EnumStrAll
End If
Case AF_VOICEVIEW:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -