设为首页 加入收藏

TOP

1.1.4 小试牛刀--编程实现获取MAC地址(4)
2013-10-07 15:51:38 来源: 作者: 【 】 浏览:101
Tags:1.1.4 小试牛刀 编程 实现 获取 MAC 地址

1.1.4  小试牛刀--编程(www.cppentry.com)实现获取MAC地址(4)

  1. HKEY hNewKey;  
  2. DWORD dwType = REG_SZ,dwDataSize = 256;  
  3. dwSize = dwSubKeyLen + 1;  
  4. ::RegEnumKeyEx(hNetCard, i, lpszKeyName,  
  5. &dwSize, NULL,NULL,NULL,NULL);  
  6. lRtn = ::RegOpenKeyEx(hNetCard,lpszKeyName,0,KEY_READ,&hNewKey);  
  7. if(lRtn == ERROR_SUCCESS)  
  8. {  
  9. lRtn = ::RegQueryValueEx(hNewKey, _T("Description"), NULL,  
  10. &dwType, (LPBYTE)m_Cards[i].szDescription, &dwDataSize);  
  11. dwDataSize = 256;  
  12. lRtn = ::RegQueryValueEx(hNewKey, _T("ServiceName"), NULL,  
  13. &dwType, (LPBYTE)szServiceName, &dwDataSize);  
  14. if(lRtn == ERROR_SUCCESS)  
  15. {  
  16. TCHAR szNewKey[256];  
  17. wsprintf(szNewKey, _T("%s\\Interfaces\\%s"),  
  18. szParameters, szServiceName);  
  19. HKEY hTcpKey;  
  20. lRtn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, szNewKey, 0,  
  21. KEY_READ, &hTcpKey);  
  22. if(lRtn == ERROR_SUCCESS)  
  23. {  
  24. dwDataSize = 256;  
  25. ::RegQueryValueEx(hTcpKey, _T("DefaultGateway"), NULL,  
  26. &dwType, (LPBYTE)m_Cards[i].szGateWay, &dwDataSize);  
  27. ProcessMultiString(m_Cards[i].szGateWay, dwDataSize);  
  28. dwDataSize = 256;  
  29. ::RegQueryValueEx(hTcpKey, _T("IPAddress"), NULL,   
  30. &dwType,(LPBYTE)m_Cards[i].szIpAddress,&dwDataSize);  
  31. ProcessMultiString(m_Cards[i].szIpAddress,dwDataSize);  
  32. dwDataSize = 256;  
  33. ::RegQueryValueEx(hTcpKey, _T("SubnetMask"), NULL,   
  34. &dwType, (LPBYTE)m_Cards[i].szIpMask, &dwDataSize);  
  35. ProcessMultiString(m_Cards[i].szIpMask, dwDataSize);  
  36. dwDataSize = 256;  
  37. ::RegQueryValueEx(hTcpKey, _T("NameServer"), NULL,   
  38. &dwType, (LPBYTE)m_Cards[i].szDNSNameServer,   
  39. &dwDataSize);  
  40. }  
  41. ::RegCloseKey(hTcpKey);  
  42. }  
  43. }  
  44. ::RegCloseKey(hNewKey);  
  45. m_Cards[i].szMacAddr[0] = m_MacAddr[i].b1;  
  46. m_Cards[i].szMacAddr[1] = m_MacAddr[i].b2;  
  47. m_Cards[i].szMacAddr[2] = m_MacAddr[i].b3;  
  48. m_Cards[i].szMacAddr[3] = m_MacAddr[i].b4;  
  49. m_Cards[i].szMacAddr[4] = m_MacAddr[i].b5;  
  50. m_Cards[i].szMacAddr[5] = m_MacAddr[i].b6;  
  51. }  
  52. delete []lpszKeyName;  
  53. }  
  54. ::RegCloseKey(hNetCard);  
  55. return lRtn == ERROR_SUCCESS   TRUE : FALSE;  
  56. }  
  57. UCHAR ClassNetSetting::GetAddressByIndex(int lana_num, ASTAT &Adapter)  
  58. {  
  59. NCB ncb;   
  60. UCHAR uRetCode;   
  61. memset(&ncb, 0, sizeof(ncb));   
  62. ncb.ncb_command = NCBRESET;   
  63. ncb.ncb_lana_num = lana_num;   
  64. //指定网卡号,首先对选定的网卡发送一个NCBRESET命令,以便进行初始化   
  65. uRetCode = Netbios(&ncb);   
  66. memset(&ncb, 0, sizeof(ncb));   
  67. ncb.ncb_command = NCBASTAT;   
  68. ncb.ncb_lana_num = lana_num;   //指定网卡号   
  69. strcpy((char*)ncb.ncb_callname, "*      " );   
  70. ncb.ncb_buffer = (unsigned char *)&Adapter;   
  71. //指定返回信息存放的变量   
  72. ncb.ncb_length = sizeof(Adapter);   
  73. //接着,可以发送NCBASTAT命令以获取网卡的信息   
  74. uRetCode = Netbios(&ncb);   
  75. return uRetCode;  
  76. }   
  77.  
  78. void ClassNetSetting::ProcessMultiString(LPTSTR lpszString, DWORD dwSize)  
  79. {   
  80. for(int i=0; i<int(dwSize-2); i++)  
  81. {  
  82. if(lpszString[i] == _T('\0'))  
  83. lpszString[i] = _T(',');  
  84. }  
  85. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1.4 小试牛刀--编程实现获取MAC.. 下一篇1.1.4 小试牛刀--编程实现获取MAC..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)