📄 enumprotocalview.cpp
字号:
//单向接收
if (pInfo->dwServiceFlags1 & XP1_UNI_RECV)
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent2,
"Unidirectional in the recv direction");
//单向发送和接收
if (!(pInfo->dwServiceFlags1 & XP1_UNI_SEND) &&
!(pInfo->dwServiceFlags1 & XP1_UNI_RECV))
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent2,
"Bidirectional sending and receiving");
if (pInfo->dwServiceFlags1 & XP1_IFS_HANDLES)
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent2,
"Socket descriptors are IFS handles");
ADDSF(XP1_PARTIAL_MESSAGE,
"Supports MSG_PARTIAL",
"Doesn't support MSG_PARTIAL");
//协议提供商
hParent2 = AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Provider Flags");
if (pInfo->dwProviderFlags &
PFL_MULTIPLE_PROTO_ENTRIES)
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent2,
"This is one behavior of two or"
" more for this protocol");
if (pInfo->dwProviderFlags &
PFL_RECOMMENDED_PROTO_ENTRY)
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent2,
"This is the recommended entry"
" for this protocol.");
//显示隐藏的目录入口
if (pInfo->dwProviderFlags & PFL_HIDDEN)
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent2,
"WS2 SPI ERROR."
" Hidden catalog entry shown");
//设置协议参数为0
if (pInfo->dwProviderFlags &
PFL_MATCHES_PROTOCOL_ZERO)
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent2,
"Use zero as protocol parameter");
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"GUID: %s",
GUIDtoString((GUID *)&pInfo->ProviderId));
//目录入口
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Catalog entry: %ld",
pInfo->dwCatalogEntryId);
// 协议链
switch(pInfo->ProtocolChain.ChainLen)
{
case 0:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Layered protocol");
break;
case 1:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Base protocol");
break;
default:
if (pInfo->ProtocolChain.ChainLen > 1)
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Protocol chain");
else
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"SPI ERROR:"
" Invalid ChainLen");
}
//协议的版本信息
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Version: %d",
pInfo->iVersion);
// 地址族
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Address family: %s",
GetDescription(pInfo->iAddressFamily));
//这里调用GetDescription获得相应地址索引的描述。
// SOCKADDR的最大尺寸
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Min/Max Address length: %d/%d",
pInfo->iMinSockAddr,
pInfo->iMaxSockAddr);
// 支持的套接字类型
switch(pInfo->iSocketType)
{
case SOCK_STREAM:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"SOCK_STREAM");
break;
case SOCK_DGRAM:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"SOCK_DGRAM");
break;
case SOCK_RAW:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"SOCK_RAW");
break;
case SOCK_RDM:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"SOCK_RDM");
break;
case SOCK_SEQPACKET:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"SOCK_SEQQPACKET");
break;
default:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Unknown");
}
// 协议
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Protocol: %s",
GetProtoDesc(pInfo->iProtocol));
//这里调用GetProtoDesc函数获取相应的协议的描述
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Protocol Max Offset: %d",
pInfo->iProtocolMaxOffset);
// 网络子节顺序
switch(pInfo->iNetworkByteOrder)
{
case BIGENDIAN:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Big Endian");
break;
case LITTLEENDIAN:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Little Endian");
break;
default:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Unknown");
}
//支持的安全特性
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Security scheme: %d",
pInfo->iSecurityScheme);
// 报文的最大尺寸
switch(pInfo->dwMessageSize)
{
case 0:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Max message siz≥e"
" not applicable");
break;
case 1:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Max message size based on MTU");
break;
case 0xFFFFFFFF:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"No limit on max message size");
break;
default:
AddTreeItem(GetTreeCtrl().m_hWnd,
hParent,
"Unknown max message size: %ld",
pInfo->dwMessageSize);
}
// 读取下一个协议
pInfo++;
}
//操作结束,释放内存
free(pBuf);
return;
}
HTREEITEM CEnumProtocalView::AddTreeItem(HWND hWndTree,
HTREEITEM hParent,
LPSTR lpszFormat,
...)
{
va_list Marker;
char szBuf[256];
TV_ITEM tvi;
TV_INSERTSTRUCT tvis;
// Format the string
va_start(Marker, lpszFormat);
vsprintf(szBuf, lpszFormat, Marker);
va_end(Marker);
// Fill in the TV_ITEM structure
tvi.mask = TVIF_TEXT;
tvi.pszText = szBuf;
tvi.cchTextMax = lstrlen(szBuf);
// Fill in the TV_INSERTSTRUCT
tvis.item = tvi;
tvis.hInsertAfter = TVI_LAST;
tvis.hParent = hParent;
return (TreeView_InsertItem(hWndTree, &tvis));
}
LPCTSTR CEnumProtocalView::GUIDtoString(GUID *pGUID)
{
static char szStr[33];
wsprintf(szStr,
"%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
pGUID->Data1,
pGUID->Data2,
pGUID->Data3,
pGUID->Data4[0],
pGUID->Data4[1],
pGUID->Data4[2],
pGUID->Data4[3],
pGUID->Data4[4],
pGUID->Data4[5],
pGUID->Data4[6],
pGUID->Data4[7]);
return(szStr);
}
LPCTSTR CEnumProtocalView::GetDescription(int nAddressFamily)
{
switch(nAddressFamily)
{
case AF_UNSPEC:
return "AF_UNSPEC";
case AF_UNIX:
return "AF_UNIX";
case AF_INET:
return "AF_INET";
case AF_IMPLINK:
return "AF_IMPLINK";
case AF_PUP:
return "AF_PUP";
case AF_CHAOS:
return "AF_CHAOS";
// AF_NS, "AF_NS", // Same as AF_IPX
case AF_IPX:
return "AF_IPX";
case AF_ISO:
return "AF_ISO";
case AF_ECMA:
return "AF_ECMA";
case AF_DATAKIT:
return "AF_DATAKIT";
case AF_CCITT:
return "AF_CCITT";
case AF_SNA:
return "AF_SNA";
case AF_DECnet:
return "AF_DECnet";
case AF_DLI:
return "AF_DLI";
case AF_LAT:
return "AF_LAT";
case AF_HYLINK:
return "AF_HYLINK";
case AF_APPLETALK:
return "AF_APPLETALK";
case AF_NETBIOS:
return "AF_NETBIOS";
case AF_VOICEVIEW:
return "AF_VOICEVIEW";
case AF_FIREFOX:
return "AF_FIREFOX";
case AF_UNKNOWN1:
return "AF_UNKNOWN1 Somebody is using this!";
case AF_BAN:
return "AF_BAN";
case AF_ATM:
return "AF_ATM";
case AF_INET6:
return "AF_INET6";
default:
return("Unknown Protocol Type");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -