mrDarker
2025-07-16 1dbe46cd9d0f181d08d5a69f72d8548628a13b9d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#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;
}