| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include "thardware.h"
- #include <Windows.h>
- #include <cstdio>
- #include <Iphlpapi.h>
- #include <NtDDNdis.h>
- #include <string>
- #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
|