a
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user