描述:
win2000下可用DDK的CM_系列来获取网卡在设备管理器中被启用还是被禁用,
用setupapi只能做到启用 禁用,但无法获取当前的状态呀?
解决方案1:
typedef struct tagAdapterInfo
{
string strName;// ÊÊÅäÆ÷Ãû³Æ
string strDriverDesc;// ÊÊÅäÆ÷ÃèÊö
string strIP;// IPµØÖ·
string strNetMask;// ×ÓÍøÑÚÂë
string strNetGate;// Íø¹Ø
string strNameServer; //DNS
string strNameServer2; //DNS2
DWORD dbEnableDHCP; //dhcp
DWORD dbAutoDNS;
char iswiredcard;
}IPADAPTER_INFO;
vector<IPADAPTER_INFO*> AdapterInfoVector;
HKEY hKey, hSubKey, hNdiIntKey;
wirelessct=0;
if(IsWin2000xp=='Y') //win2000 xp 的注册表路径
{if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"System\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}",
0,
KEY_READ,
&hKey) != ERROR_SUCCESS)
return FALSE;
}
if(IsWin2000xp=='N') //win98 me的注册表路径
{if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"System\\CurrentControlSet\\Services\\Class\\Net",
0,
KEY_READ,
&hKey) != ERROR_SUCCESS)
return FALSE;
}
if(IsWin2000xp=='4') //NT 4的注册表路径
{if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards",
0,
KEY_READ,
&hKey) != ERROR_SUCCESS)
return FALSE;
}
DWORD dwIndex = 0;
DWORD dwBufSize = 256;
DWORD dwDataType;
char szSubKey[256];
unsigned char szData[256];
while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
{
if(RegOpenKeyEx(hSubKey, "Ndi\\Interfaces", 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)
{
dwBufSize = 256;
if(RegQueryValueEx(hNdiIntKey, "LowerRange", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
if(strcmp((char*)szData, "ethernet") == 0)//
{
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "DriverDesc", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
IPADAPTER_INFO *pAI = new IPADAPTER_INFO;
pAI->strDriverDesc = (LPCTSTR)szData;
CString temp;
temp=szData;
#ifdef _DEBUG
AfxMessageBox(temp);
#endif
temp.MakeLower();
if(temp.Find("wireless")>0)
{
pAI->iswiredcard='N';
havewireless=TRUE;
wirelessct++;
}
else
{
pAI->iswiredcard='Y';
}
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
pAI->strName = (LPCTSTR)szData;
RegGetIP(pAI, (LPCTSTR)szData);
}
AdapterInfoVector.push_back(pAI);//
}
}
}
RegCloseKey(hNdiIntKey);
}
RegCloseKey(hSubKey);
}
dwBufSize = 256;
}
RegCloseKey(hKey);
return TRUE;
}