设为首页 加入收藏

TOP

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

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

  1. ::RegQueryValueEx(hNewKey,_T("IPAddress"), NULL,  
  2. &dwType, (LPBYTE)m_Cards[i].szIpAddress, &dwDataSize);  
  3. ProcessMultiString(m_Cards[i].szIpAddress, dwDataSize);  
  4. dwDataSize = 256;  
  5. ::RegQueryValueEx(hNewKey, _T("IPMask"), NULL, &dwType,  
  6. (LPBYTE)m_Cards[i].szIpMask, &dwDataSize);  
  7. ProcessMultiString(m_Cards[i].szIpMask, dwDataSize);  
  8. //拷贝前面得到的DNS主机名  
  9. _tcscpy(m_Cards[i].szDNSNameServer, szNameServer);  
  10. }  
  11. ::RegCloseKey(hNewKey);  
  12. }  
  13. m_Cards[i].szMacAddr[0] = m_MacAddr[i].b1;  
  14. m_Cards[i].szMacAddr[1] = m_MacAddr[i].b2;  
  15. m_Cards[i].szMacAddr[2] = m_MacAddr[i].b3;  
  16. m_Cards[i].szMacAddr[3] = m_MacAddr[i].b4;  
  17. m_Cards[i].szMacAddr[4] = m_MacAddr[i].b5;  
  18. m_Cards[i].szMacAddr[5] = m_MacAddr[i].b6;  
  19. }  
  20. }  
  21. ::RegCloseKey(hNetCard);  
  22. return lRet == ERROR_SUCCESS   TRUE : FALSE;  
  23. }  
  24. int ClassNetSetting::GetMacAddress(LPMAC_ADDRESS pMacAddr)  
  25. {  
  26. NCB ncb;   
  27. UCHAR uRetCode;  
  28. int num = 0;  
  29. LANA_ENUM lana_enum;   
  30. memset(&ncb, 0, sizeof(ncb));   
  31. ncb.ncb_command = NCBENUM;   
  32. ncb.ncb_buffer = (unsigned char *)&lana_enum;   
  33. ncb.ncb_length = sizeof(lana_enum);   
  34. //向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡,  
  35. //每张网卡的编号等   
  36. uRetCode = Netbios(&ncb);  
  37. if (uRetCode == 0)   
  38. {  
  39. num = lana_enum.length;  
  40. //对每一张网卡,以其网卡编号为输入编号,获取其MAC地址   
  41. for (int i=0; i<num; i++)  
  42. {  
  43. ASTAT Adapter;  
  44. if(GetAddressByIndex(lana_enum.lana[i],Adapter) == 0)  
  45. {  
  46. pMacAddr[i].b1 = Adapter.adapt.adapter_address[0];  
  47. pMacAddr[i].b2 = Adapter.adapt.adapter_address[1];  
  48. pMacAddr[i].b3 = Adapter.adapt.adapter_address[2];  
  49. pMacAddr[i].b4 = Adapter.adapt.adapter_address[3];  
  50. pMacAddr[i].b5 = Adapter.adapt.adapter_address[4];  
  51. pMacAddr[i].b6 = Adapter.adapt.adapter_address[5];  
  52. }  
  53. }  
  54. }  
  55. return num;  
  56. }  
  57. BOOL ClassNetSetting::GetSettingOfWinNT()  
  58. {  
  59. LONG lRtn;  
  60. HKEY hMainKey;  
  61. TCHAR szParameters[256];  
  62. //获得域名,主机名和是否使用IP路由  
  63. _tcscpy(szParameters,  
  64. _T("SYSTEM\\ControlSet001\\Services\\Tcpip\\Parameters"));  
  65. lRtn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,  
  66. szParameters, 0, KEY_READ, &hMainKey);  
  67. if(lRtn == ERROR_SUCCESS)  
  68. {  
  69. DWORD dwType,dwDataSize = 256;  
  70. ::RegQueryValueEx(hMainKey, _T("Domain"), NULL, &dwType,  
  71. (LPBYTE)m_szDomain, &dwDataSize);  
  72. dwDataSize = 256;  
  73. ::RegQueryValueEx(hMainKey, _T("Hostname"), NULL, &dwType,  
  74. (LPBYTE)m_szHostName, &dwDataSize);  
  75. dwDataSize = 256;  
  76. ::RegQueryValueEx(hMainKey, _T("IPEnableRouter"), NULL, &dwType,  
  77. (LPBYTE)&m_IPEnableRouter, &dwDataSize);  
  78. }  
  79. ::RegCloseKey(hMainKey);  
  80.  
  81. //获得IP地址和DNS解析等其他设置  
  82. HKEY hNetCard = NULL;  
  83. m_TotalNetCards = GetMacAddress(m_MacAddr);  
  84. lRtn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,  
  85. _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"),  
  86. 0, KEY_READ, &hNetCard);  
  87. if(lRtn != ERROR_SUCCESS) //此处失败就返回  
  88. {  
  89. if(hNetCard != NULL)  
  90. ::RegCloseKey(hNetCard);  
  91. return FALSE;  
  92. }  
  93. DWORD dwSubKeyNum=0dwSubKeyLen=256;  
  94. //得到子键的个数,通常与网卡个数相等  
  95. lRtn = ::RegQueryInfoKey(hNetCard, NULL, NULL, NULL,  
  96. &dwSubKeyNum, &dwSubKeyLen, NULL,NULL,NULL,NULL,NULL,NULL);  
  97. if(lRtn == ERROR_SUCCESS)  
  98. {  
  99. m_TotalNetCards = dwSubKeyNum; //网卡个数以此为主  
  100. LPTSTR lpszKeyName = new TCHAR[dwSubKeyLen + 1];  
  101. DWORD dwSize;  
  102. for(int i=0; i<(int)dwSubKeyNum; i++)  
  103. {  
  104. TCHAR szServiceName[256];  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇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)