694b0b5ea4d7483b294d7ae3454fb2b44f87b57a
1 ////////////////////////////////////////////////////////////////////
2 // Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
4 // This file was released under the GPLv2 on June 2015.
5 ////////////////////////////////////////////////////////////////////
7 //#define EVALUATION_TIME_LIMIT
9 #ifdef EVALUATION_TIME_LIMIT
11 #define VAR_SAVED(preff, n) Var##preff##n##Saved
13 #define KEY(preff, n) preff##n##Key
14 #define VAL(preff, n) preff##n##Val
16 #define CheckAndSave(preff, n, val, type) \
17 if (!VAR_SAVED(##preff, ##n)) { \
19 RegisterDword(KEY(##preff,##n),VAL(##preff,##n),##val ^ XOR_VAR(##preff, ##n) ); \
22 sprintf(szTemp,"0x%08x", ##val ^ XOR_VAR(##preff, ##n)); \
23 RegisterString(KEY(##preff,##n),VAL(##preff,##n), &szTemp[0], FALSE, 0); \
25 VAR_SAVED(##preff, ##n) = TRUE; \
28 #define RegisterTrialEnd() \
29 CheckAndSave(TrialEnd, 0, 1, 1); \
30 CheckAndSave(TrialEnd, 1, 1, 1);
32 #define ClearTrialEnd() \
33 CheckAndSave(TrialEnd, 0, 0, 1); \
34 CheckAndSave(TrialEnd, 1, 0, 1);
36 #define RegisterDate() \
37 CheckAndSave(Date, 0, dwDaysSince2003, 0); \
38 CheckAndSave(Date, 1, dwDaysSince2003, 0);
40 #define RegisterVersion() \
41 CheckAndSave(Version, 0, UDF_CURRENT_BUILD, 0); \
42 CheckAndSave(Version, 1, UDF_CURRENT_BUILD, 1);
44 #define PATH_VAR_DECL(preff, n) \
45 CHAR KEY(preff, n)[256], VAL(preff, n)[64]; \
46 BOOL VAR_SAVED(preff, n) = FALSE;
49 #define GET_KEY_DATE(n) GET_DATE_REG_KEY_NAME(Date##n##Key, ##n)
50 #define GET_VAL_DATE(n) GET_DATE_REG_VAL_NAME(Date##n##Val, ##n)
52 #define GET_KEY_VERSION(n) GET_VERSION_REG_KEY_NAME(Version##n##Key, ##n)
53 #define GET_VAL_VERSION(n) GET_VERSION_REG_VAL_NAME(Version##n##Val, ##n)
55 #define GET_KEY_TRIAL(n) GET_TRIAL_REG_KEY_NAME(TrialEnd##n##Key, ##n)
56 #define GET_VAL_TRIAL(n) GET_TRIAL_REG_VAL_NAME(TrialEnd##n##Val, ##n)
59 ULONG dwDaysSince2003
, dwDaysSince2003fromReg0
= 0, dwDaysSince2003fromReg1
= 0;
60 ULONG TrialEnd0
, TrialEnd1
;
61 ULONG Version0
= 0, Version1
= 0;
62 SYSTEMTIME SystemTime
, SystemTime2003
;
63 FILETIME FileTime
, FileTime2003
;
64 ULARGE_INTEGER Time
, Time2003
;
67 #define INCLUDE_XOR_DECL_ONLY
69 #undef INCLUDE_XOR_DECL_ONLY
71 PATH_VAR_DECL(Date
, 0);
72 PATH_VAR_DECL(Date
, 1);
73 PATH_VAR_DECL(Version
, 0);
74 PATH_VAR_DECL(Version
, 1);
75 PATH_VAR_DECL(TrialEnd
, 0);
76 PATH_VAR_DECL(TrialEnd
, 1);
81 #ifndef NO_KEY_PRESENCE_CHECK
83 if (GetRegString(UDF_SERVICE_PATH
,UDF_LICENSE_KEY_USER
,Key
, sizeof(Key
))) {
84 goto LicenseKeyPresent
;
86 #endif // NO_KEY_PRESENCE_CHECK
88 GetSystemTime(&SystemTime
);
89 SystemTimeToFileTime(&SystemTime
, &FileTime
);
90 memset(&SystemTime2003
, 0, sizeof(SystemTime2003
));
91 SystemTime2003
.wYear
= 2003;
97 SystemTime2003
.wMonth
= 1;
98 SystemTime2003
.wDay
= 1;
102 SystemTimeToFileTime(&SystemTime2003
, &FileTime2003
);
104 memcpy(&Time
, &FileTime
, sizeof(ULARGE_INTEGER
));
105 memcpy(&Time2003
, &FileTime2003
, sizeof(ULARGE_INTEGER
));
106 Time
.QuadPart
-= Time2003
.QuadPart
;
111 dwDaysSince2003
= (ULONG
)(Time
.QuadPart
/10000000I64
/3600/24);
117 if (GetRegString(KEY(Version
, 0), VAL(Version
, 0),&szTemp
[0], sizeof(szTemp
))) {
118 sscanf(szTemp
,"0x%08x", &Version0
);
119 Version0
^= XOR_VAR(Version
,0);
124 if (GetRegUlong(KEY(Version
, 1), VAL(Version
, 1),&Version1
)) {
125 Version1
^= XOR_VAR(Version
,1);
128 if (Version0
< UDF_CURRENT_BUILD
&& Version1
< UDF_CURRENT_BUILD
) {
135 if ((LONGLONG
)(Time
.QuadPart
) < 0 ||
136 GetRegUlong(KEY(TrialEnd
, 0), VAL(TrialEnd
, 0),&TrialEnd0
) && (TrialEnd0
^ XOR_VAR(TrialEnd
, 0)) != 0 ||
137 GetRegUlong(KEY(TrialEnd
, 1), VAL(TrialEnd
, 1),&TrialEnd1
) && (TrialEnd1
^ XOR_VAR(TrialEnd
, 1)) != 0) {
139 #ifndef NO_MESSAGE_BOXES
140 if (MyMessageBox(hInst
,
142 MAKEINTRESOURCE(IDS_EXPIRED_TEXT
),
143 MAKEINTRESOURCE(IDS_EXPIRED
), MB_YESNO
| MB_ICONQUESTION
) == IDYES
) goto EnterRegistration
;
145 #endif // NO_MESSAGE_BOXES
149 if (GetRegString(KEY(Date
, 0), VAL(Date
, 0),&szTemp
[0], sizeof(szTemp
))) {
150 sscanf(szTemp
,"0x%08x", &dwDaysSince2003fromReg0
);
151 dwDaysSince2003fromReg0
^= XOR_VAR(Date
,0);
154 if (GetRegString(KEY(Date
, 1), VAL(Date
, 1),&szTemp
[0], sizeof(szTemp
))) {
155 sscanf(szTemp
,"0x%08x", &dwDaysSince2003fromReg1
);
156 dwDaysSince2003fromReg1
^= XOR_VAR(Date
,1);
159 if (dwDaysSince2003fromReg1
> dwDaysSince2003fromReg0
) dwDaysSince2003fromReg0
= dwDaysSince2003fromReg1
;
161 if (!dwDaysSince2003fromReg0
&& !dwDaysSince2003fromReg1
) {
163 dwDaysSince2003fromReg0
= dwDaysSince2003
;
164 } else if (!dwDaysSince2003fromReg0
) {
165 CheckAndSave(Date
, 0, dwDaysSince2003fromReg1
, 0);
166 dwDaysSince2003fromReg0
= dwDaysSince2003fromReg1
;
167 } else if (!dwDaysSince2003fromReg1
) {
168 CheckAndSave(Date
, 1, dwDaysSince2003fromReg0
, 0);
171 if(dwDaysSince2003
- dwDaysSince2003fromReg0
> EVALUATION_TERM
|| dwDaysSince2003
< dwDaysSince2003fromReg0
||
172 dwDaysSince2003
> UDF_MAX_DATE
||
173 dwDaysSince2003
< UDF_MIN_DATE
) {
175 #ifndef NO_MESSAGE_BOXES
176 if (MyMessageBox(hInst
,
178 MAKEINTRESOURCE(IDS_EXPIRED_TEXT
),
179 MAKEINTRESOURCE(IDS_EXPIRED
), MB_YESNO
| MB_ICONQUESTION
) == IDYES
) goto EnterRegistration
;
181 #endif // NO_MESSAGE_BOXES
185 #endif EVALUATION_TIME_LIMIT