#include "stdafx.h"
|
#include "Worker_UpdateLicense.h"
|
|
#ifdef _DEBUG
|
#pragma comment(lib,"setupapi.lib")
|
#pragma comment(lib,"l_mega64.lib")
|
#else
|
#pragma comment(lib,"setupapi.lib")
|
#pragma comment(lib,"l_mega64.lib")
|
#endif
|
|
// ¸Þ°¡¶ô ¶óÀ̺귯¸® ¿ÜºÎ ÇÔ¼ö ¼±¾ð ½ÃÀÛ
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
extern unsigned int lock_init_usb(unsigned int op1); // ¸Þ°¡¶ô Ž»ö
|
extern unsigned char lock_write(unsigned char op1, char op2);
|
extern unsigned char lock_read(unsigned char op1);
|
extern unsigned int lock_boot_cnt(void); // ºÎÆÃ Ƚ¼ö ¾ò±â
|
extern unsigned char lock_version(void);
|
extern unsigned char lock_sn(char); // ¸Þ°¡¶ô °íÀ¯¹øÈ£
|
extern unsigned char lock_check(void); // ¸Þ°¡¶ô Á¸Àç ¿©ºÎ¸¦ ºü¸£°í °£´ÜÈ÷ üũ
|
extern int lock_write_ex(int op1, int op2);
|
extern int lock_read_ex(int op1);
|
extern BOOL lock_receive(void);
|
|
// ÀÌÀü ¹öÀü°ú ȣȯ¼º À¯Áö¸¦ À§ÇÑ ÇÔ¼ö, ½Å±Ô¾÷üÀÎ °æ¿ì ¾Æ·¡ÀÇ ÇÔ¼ö´Â »ç¿ëÇÏÁö ¸¶¼¼¿ä.
|
extern unsigned char lock_auto(char op1);
|
extern unsigned char lock_func0(unsigned char op1, unsigned char op2);
|
extern unsigned char lock_func1(unsigned char op1, unsigned char op2);
|
extern unsigned char lock_func2(unsigned char op1, unsigned char op2);
|
extern unsigned char lock_func3(unsigned char op1, unsigned char op2);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
// ¸Þ°¡¶ô ¶óÀ̺귯¸® ¿ÜºÎ ÇÔ¼ö ¼±¾ð ³¡
|
|
CWorker_UpdateLicense::CWorker_UpdateLicense(int nIndex, IWorkerUpdateLicense2Parent *pIWUL2P, DWORD dwTick)
|
: m_nIndex(nIndex), m_pIWUL2P(pIWUL2P), m_dwTick(dwTick)
|
{
|
m_sStatus.Reset();
|
m_bUpdate = FALSE;
|
m_hThreadDone = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
}
|
|
CWorker_UpdateLicense::~CWorker_UpdateLicense()
|
{
|
CloseHandle(m_hThreadDone);
|
}
|
|
BOOL CWorker_UpdateLicense::StartThread()
|
{
|
if (m_bUpdate) return FALSE;
|
|
//Read ½º·¹µå »ý¼º
|
m_bUpdate = TRUE;
|
AfxBeginThread(CWorker_UpdateLicense::UpdateLicense,(LPVOID)(this));
|
|
return TRUE;
|
}
|
|
void CWorker_UpdateLicense::StopThread()
|
{
|
if (m_bUpdate)
|
{
|
m_bUpdate = FALSE;
|
}
|
}
|
|
UINT CWorker_UpdateLicense::UpdateLicense(LPVOID pParam)
|
{
|
CWorker_UpdateLicense* pThis = (CWorker_UpdateLicense*)pParam;
|
const UINT uiRetval = pThis->Update_License_Func();
|
if (uiRetval != 0)
|
{
|
SetEvent(pThis->m_hThreadDone);
|
}
|
|
return uiRetval;
|
}
|
|
UINT CWorker_UpdateLicense::Update_License_Func()
|
{
|
while (m_bUpdate)
|
{
|
Update_License();
|
|
::Sleep(m_dwTick);
|
};
|
|
SetEvent(m_hThreadDone);
|
return 0;
|
}
|
|
void CWorker_UpdateLicense::Update_License()
|
{
|
////////////////////// USB¿ë ¸Þ°¡¶ô °Ë»ç·çƾ ½ÃÀÛ
|
DWORD64 dwTick = GetTickCount64();
|
|
m_sStatus.Reset();
|
|
m_sStatus.nUsbID = 1;
|
m_sStatus.strSerialNo.Format(_T("No license"));
|
m_sStatus.nKeyStatus = LicenseKey_Activated;
|
CTime tmpTime(2099, 12, 31, 23, 59, 59);
|
m_sStatus.expTime = tmpTime;
|
return;
|
|
m_sStatus.nKeyStatus = LicenseKey_NotConnected; // ¿¬°á ¾ÈµÊ
|
m_sStatus.nUsbID = lock_init_usb(8); // ¿¬°á üũ
|
if (0 == m_sStatus.nUsbID)
|
{
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
m_sStatus.nKeyStatus = LicenseKey_NotCertified; // ÀÎÁõ ¾ÈµÊ
|
if (0 != lock_check()) // ÀÎÁõ üũ
|
{
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
CString szTemp = L"";
|
for (int i = 0; i < 4; i++)
|
{
|
unsigned int rData = lock_sn(i);
|
CString strCopy = szTemp;
|
szTemp.Format(_T("%s%02X"), strCopy, rData);
|
// szTemp.Format(_T("%s%02X"), szTemp, rData);
|
}
|
m_sStatus.strSerialNo = szTemp;
|
|
m_sStatus.nKeyStatus = LicenseKey_NotActivated; // Ȱ¼ºÈ ¾ÈµÊ
|
|
// TIME üũ
|
int pMemData[16] = { 0 };
|
CString strTemp;
|
for (int i = 0; i < 16; i++)
|
{
|
strTemp.Format(L"%02X", lock_read(i));
|
pMemData[i] = _ttoi(strTemp); // hex2dec(pChData);
|
}
|
|
int nYear = (pMemData[0] * 100) + pMemData[1];
|
if (nYear < 2000)
|
{
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
int nMonth = pMemData[2];
|
if (nMonth < 1 || nMonth > 12)
|
{
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
int nDay = pMemData[3];
|
if (nDay < 1 || nDay > 31)
|
{
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
int nHour = pMemData[4];
|
if (nHour < 0 || nHour > 24)
|
{
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
int nMinute = pMemData[5];
|
if (nMinute < 0 || nMinute > 60)
|
{
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
int nSec = pMemData[6];
|
if (nSec < 0 || nSec > 60)
|
{
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
// time check
|
CTime expTime(nYear, nMonth, nDay, nHour, nMinute, nSec);
|
CTime curTime = CTime::GetCurrentTime();
|
CTimeSpan spanTime = expTime - curTime;
|
|
m_sStatus.expTime = expTime;
|
|
if (spanTime.GetTotalSeconds() > 0)
|
{
|
m_sStatus.nKeyStatus = LicenseKey_Activated; // Ȱ¼ºÈµÊ
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
return;
|
}
|
|
dwTick = GetTickCount64() - dwTick;
|
m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
|
|
return;
|
}
|