1.1.4 小试牛刀--编程(www.cppentry.com)实现获取MAC地址(4)
- HKEY hNewKey;
- DWORD dwType = REG_SZ,dwDataSize = 256;
- dwSize = dwSubKeyLen + 1;
- ::RegEnumKeyEx(hNetCard, i, lpszKeyName,
- &dwSize, NULL,NULL,NULL,NULL);
- lRtn = ::RegOpenKeyEx(hNetCard,lpszKeyName,0,KEY_READ,&hNewKey);
- if(lRtn == ERROR_SUCCESS)
- {
- lRtn = ::RegQueryValueEx(hNewKey, _T("Description"), NULL,
- &dwType, (LPBYTE)m_Cards[i].szDescription, &dwDataSize);
- dwDataSize = 256;
- lRtn = ::RegQueryValueEx(hNewKey, _T("ServiceName"), NULL,
- &dwType, (LPBYTE)szServiceName, &dwDataSize);
- if(lRtn == ERROR_SUCCESS)
- {
- TCHAR szNewKey[256];
- wsprintf(szNewKey, _T("%s\\Interfaces\\%s"),
- szParameters, szServiceName);
- HKEY hTcpKey;
- lRtn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, szNewKey, 0,
- KEY_READ, &hTcpKey);
- if(lRtn == ERROR_SUCCESS)
- {
- dwDataSize = 256;
- ::RegQueryValueEx(hTcpKey, _T("DefaultGateway"), NULL,
- &dwType, (LPBYTE)m_Cards[i].szGateWay, &dwDataSize);
- ProcessMultiString(m_Cards[i].szGateWay, dwDataSize);
- dwDataSize = 256;
- ::RegQueryValueEx(hTcpKey, _T("IPAddress"), NULL,
- &dwType,(LPBYTE)m_Cards[i].szIpAddress,&dwDataSize);
- ProcessMultiString(m_Cards[i].szIpAddress,dwDataSize);
- dwDataSize = 256;
- ::RegQueryValueEx(hTcpKey, _T("SubnetMask"), NULL,
- &dwType, (LPBYTE)m_Cards[i].szIpMask, &dwDataSize);
- ProcessMultiString(m_Cards[i].szIpMask, dwDataSize);
- dwDataSize = 256;
- ::RegQueryValueEx(hTcpKey, _T("NameServer"), NULL,
- &dwType, (LPBYTE)m_Cards[i].szDNSNameServer,
- &dwDataSize);
- }
- ::RegCloseKey(hTcpKey);
- }
- }
- ::RegCloseKey(hNewKey);
- m_Cards[i].szMacAddr[0] = m_MacAddr[i].b1;
- m_Cards[i].szMacAddr[1] = m_MacAddr[i].b2;
- m_Cards[i].szMacAddr[2] = m_MacAddr[i].b3;
- m_Cards[i].szMacAddr[3] = m_MacAddr[i].b4;
- m_Cards[i].szMacAddr[4] = m_MacAddr[i].b5;
- m_Cards[i].szMacAddr[5] = m_MacAddr[i].b6;
- }
- delete []lpszKeyName;
- }
- ::RegCloseKey(hNetCard);
- return lRtn == ERROR_SUCCESS TRUE : FALSE;
- }
- UCHAR ClassNetSetting::GetAddressByIndex(int lana_num, ASTAT &Adapter)
- {
- NCB ncb;
- UCHAR uRetCode;
- memset(&ncb, 0, sizeof(ncb));
- ncb.ncb_command = NCBRESET;
- ncb.ncb_lana_num = lana_num;
- //指定网卡号,首先对选定的网卡发送一个NCBRESET命令,以便进行初始化
- uRetCode = Netbios(&ncb);
- memset(&ncb, 0, sizeof(ncb));
- ncb.ncb_command = NCBASTAT;
- ncb.ncb_lana_num = lana_num; //指定网卡号
- strcpy((char*)ncb.ncb_callname, "* " );
- ncb.ncb_buffer = (unsigned char *)&Adapter;
- //指定返回信息存放的变量
- ncb.ncb_length = sizeof(Adapter);
- //接着,可以发送NCBASTAT命令以获取网卡的信息
- uRetCode = Netbios(&ncb);
- return uRetCode;
- }
-
- void ClassNetSetting::ProcessMultiString(LPTSTR lpszString, DWORD dwSize)
- {
- for(int i=0; i<int(dwSize-2); i++)
- {
- if(lpszString[i] == _T('\0'))
- lpszString[i] = _T(',');
- }
- }