windows获取网卡信息并判断是否是物理网卡 网络适配器的判断

来源:互联网 发布:javascript cookie实例 编辑:程序博客网 时间:2024/05/01 09:23
/***********************************************************************
函数名称  :IsLocalAdapter
函数功能  :根据适配器的名字,判断是否是本地适配器---主要通过注册表进行查看
函数参数  : 参数列表格式 [_IN_ _OUT_ _OPTION_] 参数名 说明信息
LPTSTR szName _IN_ 需要输入的适配器名字
返回值    : BOOL
------------------------------------------------------------------------
备注      :
************************************************************************/
BOOL IsLocalAdapter(LPSTR szName)
{
if (!szName)
{
return FALSE;
}
TCHAR szKeyName[260] = _T("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}");
HKEY hSubKey=NULL;
LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKeyName, 0, KEY_READ, &hSubKey);
if (lRet!=ERROR_SUCCESS)
{
return FALSE;
}
CHAR szDataBuf[260] = { 0 };
sprintf_s(szDataBuf, "%s\\Connection", szName);//格式化字符串
//打开格式化后的字符串
HKEY hLocalKey = NULL;
lRet = RegOpenKeyExA(hSubKey, szDataBuf, 0, KEY_READ, &hLocalKey);
if (ERROR_SUCCESS!=lRet)
{
RegCloseKey(hSubKey);
return FALSE;
}
//请求注册表中的值
DWORD dwType = REG_SZ;
TCHAR szData[250];
DWORD dwSize = 250;
lRet= RegQueryValueEx(hLocalKey, _T("PnPInstanceId"), 0, &dwType, (BYTE*)(szData), &dwSize);
if (ERROR_SUCCESS!=lRet)
{
RegCloseKey(hSubKey);
RegCloseKey(hLocalKey);
return FALSE;
}
if (0==_tcsncmp(szData,_T("PCI"),_tcslen(_T("PCI")))||0==_tcsncmp(szData,_T("USB"),_tcslen(_T("USB"))))
{
RegCloseKey(hSubKey);
RegCloseKey(hLocalKey);
return TRUE;
}
RegCloseKey(hSubKey);
RegCloseKey(hLocalKey);
return FALSE;
}


//获取网络适配器的数量
int GetNetworkAdapterCount()
{
PIP_ADAPTER_INFO pAdapterInfo= NULL;
ULONG OutBufLen = 0;
int nCount = 0;


//Get the required size of the buffer
if (GetAdaptersInfo(NULL, &OutBufLen) == ERROR_BUFFER_OVERFLOW)
{
int divisor = sizeof IP_ADAPTER_INFO;
if (sizeof time_t == 8)
divisor -= 8;


nCount = OutBufLen / divisor;
pAdapterInfo = new IP_ADAPTER_INFO[nCount];


//Get info for the adapters
if (GetAdaptersInfo(pAdapterInfo, &OutBufLen) != ERROR_SUCCESS)
{
//Call failed
delete[] pAdapterInfo;
pAdapterInfo = NULL;
nCount = 0;
}
}
int nResult=0;//最终物理网卡的数量
for (int i=0;i<nCount;++i)
{
if (IsLocalAdapter(pAdapterInfo->AdapterName))
{
++nResult;
}
pAdapterInfo = pAdapterInfo->Next;
}
delete []pAdapterInfo;
return nResult;
}
阅读全文
0 0
原创粉丝点击