#include "thardware.h" #include #include #include #include #include #pragma comment(lib, "Iphlpapi.lib") namespace TC { THardWare::THardWare() {} static bool GetPhyMacAddress(const char *strServiceName, char *RealMAC) { bool bRet = false; // char pstrBuf[512] = {0}; // sprintf(pstrBuf, "//./%s", strServiceName); // HANDLE hDev = CreateFileA(pstrBuf, // GENERIC_READ | GENERIC_WRITE, // FILE_SHARE_READ | FILE_SHARE_WRITE, // NULL, // OPEN_EXISTING, // 0, // 0); // if (hDev != INVALID_HANDLE_VALUE) { // int inBuf; // BYTE outBuf[256] = {0}; // DWORD BytesReturned; // inBuf = OID_802_3_PERMANENT_ADDRESS; // if (DeviceIoControl(hDev, // IOCTL_NDIS_QUERY_GLOBAL_STATS, // (LPVOID) &inBuf, // 4, // outBuf, // 256, // &BytesReturned, // NULL)) { // char buff[256] = {0}; // sprintf(buff, // "%d%d%d%d%d%d", // outBuf[0], // outBuf[1], // outBuf[2], // outBuf[3], // outBuf[4], // outBuf[5]); // bRet = true; // memcpy(RealMAC, buff, strlen(buff)); // } // CloseHandle(hDev); // } return bRet; } std::string THardWare::machineCode() { char Macstr[256] = {0}; ULONG uSize = 0; DWORD dwResult = GetAdaptersInfo(NULL, &uSize); if (dwResult == ERROR_BUFFER_OVERFLOW) { PIP_ADAPTER_INFO piai1 = (PIP_ADAPTER_INFO) new BYTE[uSize]; PIP_ADAPTER_INFO piai = piai1; dwResult = GetAdaptersInfo(piai, &uSize); if (ERROR_SUCCESS == dwResult) { const char *card1 = "QF9700"; const char *card2 = "RD9700"; while (piai) //获取多个网卡MAC地址 { //QF9700 RD9700 特殊USB网卡处理 if (strncmp(piai->Description, card1, strlen(card1)) == 0 || strncmp(piai->Description, card2, strlen(card2)) == 0) { piai = piai->Next; continue; } char mac[32] = {0}; GetPhyMacAddress(piai->AdapterName, mac); piai = piai->Next; ::sprintf(Macstr, "%s%s", Macstr, mac); //把多个网卡MAC地址拼接 } } delete[] piai1; } return std::string(Macstr); } } // namespace TC