18,363
社区成员




// Declare and initialize variables
// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter.
//
// Note that this sample code only prints out the
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter.
CString strAdapterInfo, strTmp;
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;
// variables used to print DHCP time info
struct tm newtime;
char buffer[32];
errno_t error;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *)MALLOC(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL)
{
TRACE("Error allocating memory needed to call GetAdaptersinfo\n");
return;
}
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
{
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL)
{
TRACE("Error allocating memory needed to call GetAdaptersinfo\n");
return;
}
}
if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
{
pAdapter = pAdapterInfo;
CString strGroupName, strSubItemName, strSubItemValue, strSubItemDescr;
CBCGPProp* pNETGroup = new CBCGPProp(_T("网络信息"));
while (pAdapter)
{
USES_CONVERSION;
strTmp.Format(_T("序号:%d\r\n"), pAdapter->ComboIndex);
strAdapterInfo += strTmp;
strTmp.Format(_T("名称:%s\r\n"), A2W(pAdapter->AdapterName));
strAdapterInfo += strTmp;
strTmp.Format(_T("描述:%s\r\n"), A2W(pAdapter->Description));
strAdapterInfo += strTmp;
strGroupName = A2W(pAdapter->Description);
CBCGPProp* pGroup = new CBCGPProp(strGroupName);
pNETGroup->AddSubItem(pGroup);
strTmp = _T("地址:");
strAdapterInfo += strTmp;
strSubItemName = _T("MAC 地址");
strSubItemValue.Empty();
for (i = 0; i < pAdapter->AddressLength; i++)
{
if (i == (pAdapter->AddressLength - 1))
strTmp.Format(_T("%.2X"), (int)pAdapter->Address[i]);
else
strTmp.Format(_T("%.2X-"), (int) pAdapter->Address[i]);
strAdapterInfo += strTmp + _T("\r\n");
strSubItemValue += strTmp;
}
strSubItemDescr = _T("网卡 MAC 地址(实际物理地址)");
pGroup->AddSubItem(new CBCGPProp(strSubItemName, (_variant_t)strSubItemValue, strSubItemDescr));
strTmp.Format(_T("索引:%d\r\n"), pAdapter->Index);
strAdapterInfo += strTmp;
strTmp = _T("类型:");
strAdapterInfo += strTmp;
switch (pAdapter->Type)
{
case MIB_IF_TYPE_OTHER:
strTmp = _T("其它\r\n");
break;
case MIB_IF_TYPE_ETHERNET:
strTmp = _T("以太网\r\n");
break;
case MIB_IF_TYPE_TOKENRING:
strTmp = _T("令牌环\r\n");
break;
case MIB_IF_TYPE_FDDI:
strTmp = _T("FDDI\r\n");
break;
case MIB_IF_TYPE_PPP:
strTmp = _T("PPP\r\n");
break;
case MIB_IF_TYPE_LOOPBACK:
strTmp = _T("回路\r\n");
break;
case MIB_IF_TYPE_SLIP:
strTmp = _T("Slip\r\n");
break;
default:
strTmp.Format(_T("未知类型 %ld\r\n"), pAdapter->Type);
break;
}
strAdapterInfo += strTmp;
strSubItemName = _T("IP 地址");
strSubItemValue = A2W(pAdapter->IpAddressList.IpAddress.String);
strSubItemDescr = _T("IP 地址");
pGroup->AddSubItem(new CBCGPProp(strSubItemName, (_variant_t)strSubItemValue, strSubItemDescr));
strTmp.Format(_T("IP 地址:%s\r\n"), A2W(pAdapter->IpAddressList.IpAddress.String));
strAdapterInfo += strTmp;
strSubItemName = _T("子网掩码");
strSubItemValue = A2W(pAdapter->IpAddressList.IpMask.String);
strSubItemDescr = _T("子网掩码");
pGroup->AddSubItem(new CBCGPProp(strSubItemName, (_variant_t)strSubItemValue, strSubItemDescr));
strTmp.Format(_T("子网掩码:%s\r\n"), A2W(pAdapter->IpAddressList.IpMask.String));
strAdapterInfo += strTmp;
strSubItemName = _T("网关地址");
strSubItemValue = A2W(pAdapter->GatewayList.IpAddress.String);
strSubItemDescr = _T("网关地址");
pGroup->AddSubItem(new CBCGPProp(strSubItemName, (_variant_t)strSubItemValue, strSubItemDescr));
strTmp.Format(_T("网关地址:%s\r\n"), A2W(pAdapter->GatewayList.IpAddress.String));
strAdapterInfo += strTmp;
strTmp = _T("***\r\n");
strAdapterInfo += strTmp;
if (pAdapter->DhcpEnabled)
{
CString strStart, strEnd;
strTmp = _T("DHCP:是\r\n");
strAdapterInfo += strTmp;
strTmp.Format(_T(" DHCP 服务器:%s\r\n"), A2W(pAdapter->DhcpServer.IpAddress.String));
strAdapterInfo += strTmp;
strTmp = _T(" 租约时间:");
strAdapterInfo += strTmp;
// Display local time
error = _localtime32_s(&newtime, (const __time32_t *)&pAdapter->LeaseObtained);
if (error)
TRACE("Invalid Argument to _localtime32_s\n");
else
{
// Convert to an ASCII representation
strftime(buffer, _countof(buffer), "%Y-%m-%d %H:%M:%S", &newtime);
//error = asctime_s(buffer, 32, &newtime);
//if (error)
// TRACE("Invalid Argument to asctime_s\n");
//else
{
// asctime_s returns the string terminated by \n\0
strTmp.Format(_T("%s\r\n"), A2W(buffer));
strStart = A2W(buffer);
strAdapterInfo += strTmp;
}
}
strTmp = _T(" 到期时间:");
strAdapterInfo += strTmp;
if(pAdapter->LeaseExpires == 0)
{
//time_t spantime = 912395715;
//time_t ts = ::mktime(&newtime);
//time_t lasttime = spantime + ts;
//struct tm lasttm;
//error = localtime_s(&lasttm, &lasttime);
//if (error)
// TRACE("Invalid Argument to _localtime32_s\n");
//else
{
// strftime(buffer, _countof(buffer), "%Y-%m-%d %H:%M:%S", &lasttm);
// strTmp.Format(_T("%s(无限期,静态分配)\r\n"), A2W(buffer));
// strEnd = A2W(buffer);
// strEnd += _T("(无限期,静态分配)");
strTmp = _T("(无限期,静态分配)\r\n");
strEnd = _T("(无限期,静态分配)");
// strAdapterInfo += strTmp;
}
}
else
{
error = _localtime32_s(&newtime, (const __time32_t *)&pAdapter->LeaseExpires);
if (error)
TRACE("Invalid Argument to _localtime32_s\n");
else
{
// Convert to an ASCII representation
strftime(buffer, _countof(buffer), "%Y-%m-%d %H:%M:%S", &newtime);
//error = asctime_s(buffer, 32, &newtime);
//if (error)
// TRACE("Invalid Argument to asctime_s\n");
//else
{
// asctime_s returns the string terminated by \n\0
strTmp.Format(_T("%s\r\n"), A2W(buffer));
strEnd = A2W(buffer);
strAdapterInfo += strTmp;
}
}
}
CBCGPProp* pDHCP = new CBCGPProp(_T("DHCP"), 0, TRUE);
CBCGPProp* pDHCPDetailProp = new CBCGPProp(_T("DHCP 服务器"), (_variant_t)A2W(pAdapter->DhcpServer.IpAddress.String), _T("DHCP 服务器"));
pDHCP->AddSubItem(pDHCPDetailProp);
pDHCPDetailProp = new CBCGPProp(_T("租约时间"), (_variant_t)strStart, _T("租约时间"));
pDHCP->AddSubItem(pDHCPDetailProp);
pDHCPDetailProp = new CBCGPProp(_T("到期时间"), (_variant_t)strEnd, _T("到期时间"));
pDHCP->AddSubItem(pDHCPDetailProp);
pGroup->AddSubItem(pDHCP);
}
else
{
strTmp = _T("DHCP:否\r\n");
strAdapterInfo += strTmp;
CBCGPProp* pDHCP = new CBCGPProp(_T("DHCP"), 0, TRUE);
pDHCP->AddSubItem(new CBCGPProp(_T("DHCP"), (_variant_t)false, _T("DHCP")));
pGroup->AddSubItem(pDHCP);
}
if (pAdapter->HaveWins)
{
strTmp = _T("WINS:是\r\n");
strAdapterInfo += strTmp;
strTmp.Format(_T(" 主 WINS 服务器:%s\r\n"), A2W(pAdapter->PrimaryWinsServer.IpAddress.String));
strAdapterInfo += strTmp;
strTmp.Format(_T(" 辅 WINS 服务器:%s\r\n"), A2W(pAdapter->SecondaryWinsServer.IpAddress.String));
strAdapterInfo += strTmp;
CBCGPProp* pWINS = new CBCGPProp(_T("WINS"), 0, TRUE);
CBCGPProp* pWINSDetailProp = new CBCGPProp(_T("主服务器"), (_variant_t)A2W(pAdapter->PrimaryWinsServer.IpAddress.String), _T("主 WINS 服务器"));
pWINS->AddSubItem(pWINSDetailProp);
pWINSDetailProp = new CBCGPProp(_T("辅服务器"), (_variant_t)A2W(pAdapter->SecondaryWinsServer.IpAddress.String), _T("辅 WINS 服务器"));
pWINS->AddSubItem(pWINSDetailProp);
pGroup->AddSubItem(pWINS);
}
else
{
strTmp = _T("WINS:否\r\n");
strAdapterInfo += strTmp;
CBCGPProp* pWINS = new CBCGPProp(_T("WINS"), 0, TRUE);
pWINS->AddSubItem(new CBCGPProp(_T("WINS"), (_variant_t)false, _T("WINS")));
pGroup->AddSubItem(pWINS);
}
pAdapter = pAdapter->Next;
strAdapterInfo += _T("\r\n");
}
m_wndOtherInfoPropList.AddProperty(pNETGroup);
}
else
{
TRACE("GetAdaptersInfo failed with error: %d\n", dwRetVal);
return;
}
if (pAdapterInfo)
FREE(pAdapterInfo);
//StringCchCopy(szAdapter, BUFSIZE, strAdapterInfo);
return;