This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
+394
View File
@@ -0,0 +1,394 @@
// GUCodeCreator.cpp: implementation of the CGUCodeCreator class.
//
//////////////////////////////////////////////////////////////////////
#include "geomative.h"
#include "GUCodeCreator.h"
#include "Constant.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGUCodeCreator::CGUCodeCreator()
{
int iIndex = (int)VAL_ZERO;
char cChar = '0';
/*
while (iIndex < 6)
{
m_aMacAddress[iIndex++] = (int)VAL_ZERO;
}
*/
memset(m_aMacAddress, 0, sizeof(m_aMacAddress));
iIndex = (int)VAL_ZERO;
while (iIndex < 10)
{
m_aMappingTable[iIndex++] = cChar++;
}
cChar = 'A';
while (iIndex < 32)
{
m_aMappingTable[iIndex++] = cChar++;
}
}
CGUCodeCreator::~CGUCodeCreator()
{
}
bool CGUCodeCreator::GetMacAddress(BYTE *pMacAddress)
{
PIP_ADAPTER_INFO pAdapterInfo;
DWORD dwAdapterInfoSize;
DWORD dwErr;
int iIndex = 0;
dwAdapterInfoSize = 0;
dwErr = GetAdaptersInfo(NULL, &dwAdapterInfoSize);
if ((dwErr != (int)VAL_ZERO) && (dwErr != ERROR_BUFFER_OVERFLOW))
{
return false;
}
pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, dwAdapterInfoSize);
if (pAdapterInfo == NULL)
{
return false;
}
PIP_ADAPTER_INFO pTemp = pAdapterInfo;
if (GetAdaptersInfo(pAdapterInfo, &dwAdapterInfoSize) != (int)VAL_ZERO)
{
GlobalFree(pAdapterInfo);
return false;
}
while (pAdapterInfo)
{
if (pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
{
for (iIndex = (int)VAL_ZERO; iIndex < 6; iIndex++)
{
*pMacAddress++ = pAdapterInfo->Address[iIndex];
}
break;
}
pAdapterInfo = pAdapterInfo->Next;
}
if (pTemp)
{
GlobalFree(pTemp);
}
return true;
}
DWORD CGUCodeCreator::GetTotalSecond()
{
int iYear = (int)YEAR_BASE;
int iCurYear = (int)VAL_ZERO;
int iCurDay = (int)VAL_ZERO;
int iCurHour = (int)VAL_ZERO;
int iCurMin = (int)VAL_ZERO;
int iCurSec = (int)VAL_ZERO;
DWORD dwSecond = (DWORD)VAL_ZERO;
time_t lTime = (time_t)VAL_ZERO;
struct tm *pTM = NULL;
Sleep(1000);
time(&lTime);
pTM = localtime(&lTime);
iCurYear = 1900 + pTM->tm_year;
iCurDay = pTM->tm_yday;
iCurHour = pTM->tm_hour;
iCurMin = pTM->tm_min;
iCurSec = pTM->tm_sec;
dwSecond = iCurDay*86400+((iCurHour*60+iCurMin)*60+iCurSec+1);
while (iYear < iCurYear)
{
if (((iYear % 4 == (int)VAL_ZERO) && (iYear % 100 != (int)VAL_ZERO)) || (iYear % 400 == (int)VAL_ZERO))
{
dwSecond += 31622400;
}
else
{
dwSecond += 31536000;
}
iYear++;
}
return dwSecond;
}
bool CGUCodeCreator::ChangeMacAddressToCode(char *pCode)
{
BYTE bTempVal = (BYTE)VAL_ZERO;
BYTE bHTempVal = (BYTE)VAL_ZERO, bMTempVal = (BYTE)VAL_ZERO, bLTempVal = (BYTE)VAL_ZERO;
int aTempVal[10] = {(int)VAL_ZERO};
int iIndex = (int)VAL_ZERO;
bLTempVal = this->m_aMacAddress[5];
bLTempVal &= 0x1F;
aTempVal[9] = (int)bLTempVal;
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = m_aMacAddress[5];
bLTempVal >>= 5;
bHTempVal = m_aMacAddress[4];
bHTempVal <<= 3;
bHTempVal &= 0x18;
aTempVal[8] = (int)(bHTempVal | bLTempVal);
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = m_aMacAddress[4];
bLTempVal >>= 2;
bLTempVal &= 0x1F;
aTempVal[7] = (int)bLTempVal;
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = m_aMacAddress[4];
bLTempVal >>= 7;
bHTempVal = m_aMacAddress[3];
bHTempVal <<= 1;
bHTempVal &= 0x1E;
aTempVal[6] = (int)(bHTempVal | bLTempVal);
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = m_aMacAddress[3];
bLTempVal >>= 4;
bHTempVal = m_aMacAddress[2];
bHTempVal <<= 4;
bHTempVal &= 0x10;
aTempVal[5] = (int)(bHTempVal | bLTempVal);
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = m_aMacAddress[2];
bLTempVal >>= 1;
bLTempVal &= 0x1F;
aTempVal[4] = (int)bLTempVal;
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = m_aMacAddress[2];
bLTempVal >>= 6;
bHTempVal = m_aMacAddress[1];
bHTempVal <<= 2;
bHTempVal &= 0x1C;
aTempVal[3] = (int)(bHTempVal | bLTempVal);
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = m_aMacAddress[1];
bLTempVal >>= 3;
aTempVal[2] = (int)bLTempVal;
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = m_aMacAddress[0];
bLTempVal &= 0x1F;
aTempVal[1] = (int)bLTempVal;
bLTempVal = (BYTE)VAL_ZERO;
bHTempVal = (BYTE)VAL_ZERO;
bLTempVal = this->m_aMacAddress[0];
bLTempVal >>= 5;
aTempVal[0] = (int)bLTempVal;
iIndex = 9;
while (iIndex >= (int)VAL_ZERO)
{
*(pCode+iIndex) = m_aMappingTable[(int)aTempVal[iIndex]];
iIndex--;
}
return true;
}
bool CGUCodeCreator::ChangeTotalSecToCode(char *pCode)
{
int aTempVal[GUC_LENGTH-11] = {(int)VAL_ZERO};
int iIndex = (int)VAL_ZERO;
DWORD dwSec = (DWORD)VAL_ZERO;
dwSec = m_dwCurTotalSec;
for (iIndex = (GUC_LENGTH-12); iIndex >= (int)VAL_ZERO; iIndex--)
{
aTempVal[iIndex] = dwSec & 0x0000001F;
dwSec >>= 5;
}
for (iIndex = (GUC_LENGTH-12); iIndex >= (int)VAL_ZERO; iIndex--)
{
*(pCode+iIndex) = m_aMappingTable[(int)aTempVal[iIndex]];
}
return true;
}
CString CGUCodeCreator::GenerateGUCode()
{
int iIndex = (int)VAL_ZERO;
char aGUCode[GUC_LENGTH] = {0};
CString szGUCode;
while (iIndex < GUC_LENGTH)
{
aGUCode[iIndex++] = (int)VAL_ZERO;
}
memset(m_aMacAddress, 0, sizeof(m_aMacAddress));
GetMacAddress((BYTE*)m_aMacAddress);
m_dwCurTotalSec = GetTotalSecond();
ChangeMacAddressToCode((char*)aGUCode);
ChangeTotalSecToCode((char*)(aGUCode+10));
szGUCode.Empty();
szGUCode = (LPCTSTR)aGUCode;
return szGUCode;
}
CString CGUCodeCreator::GenerateGUIDCode()
{
CString szGUID = _T("");
GUID guid;
::CoInitialize(NULL);
if(S_OK == ::CoCreateGuid(&guid))
{
szGUID.Empty();
szGUID.Format("%08X%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X",
guid.Data1,
guid.Data2,
guid.Data3,
guid.Data4[0], guid.Data4[1],
guid.Data4[2], guid.Data4[3],
guid.Data4[4], guid.Data4[5],
guid.Data4[6], guid.Data4[7]);
}
::CoUninitialize();
return szGUID;
}
CString CGUCodeCreator::GenerateMacAddress(void)
{
CString szMacAddress = _T("");
memset(m_aMacAddress, 0, sizeof(m_aMacAddress));
GetMacAddress((BYTE*)m_aMacAddress);
//////////////////////////////add by lsq 20160402////////////////////////////////////////////
//在这里由于去除注册功能的需要,因此将所有机器的MAC地址用
//统一的一个MAC地址来代替
memset(m_aMacAddress, 0, sizeof(m_aMacAddress));
m_aMacAddress[0] = 0x00;
m_aMacAddress[1] = 0x00;
m_aMacAddress[2] = 0x00;
m_aMacAddress[3] = 0xFF;
m_aMacAddress[4] = 0xFF;
m_aMacAddress[5] = 0xFF;
/////////////////////////////////end/////////////////////////////////////////
szMacAddress.Empty();
szMacAddress.Format(_T("%02X%02X%02X%02X%02X%02X"),
m_aMacAddress[0],
m_aMacAddress[1],
m_aMacAddress[2],
m_aMacAddress[3],
m_aMacAddress[4],
m_aMacAddress[5]);
return szMacAddress;
}
void CGUCodeCreator::GetMacList(CStringArray *f_macArray)
{
//added by lsq 20160406
//由于上下微机统一使用一个MAC地址,所以这里直接用这个MAC地址返回,之前的代码就不用了
f_macArray->Add(_T("000000FFFFFF"));
return;
/////////////////////////////end/////////////////////////////////////////////
PIP_ADAPTER_INFO pAdapterInfo;
DWORD dwAdapterInfoSize;
DWORD dwErr;
int iIndex = 0;
BYTE bMac[16];
memset(bMac, 0, 16);
CString szTmp = _T("");
dwAdapterInfoSize = 0;
dwErr = GetAdaptersInfo(NULL, &dwAdapterInfoSize);
if ((dwErr != (int)VAL_ZERO) && (dwErr != ERROR_BUFFER_OVERFLOW))
{
f_macArray->Add("000000000000");
return;
}
pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, dwAdapterInfoSize);
if (pAdapterInfo == NULL)
{
f_macArray->Add("000000000000");
return;
}
if (GetAdaptersInfo(pAdapterInfo, &dwAdapterInfoSize) != (int)VAL_ZERO)
{
GlobalFree(pAdapterInfo);
return;
}
while (pAdapterInfo)
{
if (pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
{
for (iIndex = (int)VAL_ZERO; iIndex < 6; iIndex++)
{
bMac[iIndex] = pAdapterInfo->Address[iIndex];
}
szTmp.Format(_T("%02X%02X%02X%02X%02X%02X"),
bMac[0],
bMac[1],
bMac[2],
bMac[3],
bMac[4],
bMac[5]);
f_macArray->Add(szTmp);
}
pAdapterInfo = pAdapterInfo->Next;
}
if (f_macArray->GetSize() == 0)
{
f_macArray->Add("000000000000");
}
GlobalFree(pAdapterInfo);
}