Encryptlock.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. #ifndef JEFF_ENCRYPTLOCK_HAEDER_20150708
  2. #define JEFF_ENCRYPTLOCK_HAEDER_20150708
  3. #include "my32.h"
  4. #pragma comment (lib,"my32.lib")
  5. #include "CharacterConvert.h"
  6. #pragma once
  7. namespace Encryptlockkernel
  8. {
  9. //////////////////////////////////////////////////////////////////////////
  10. // 宏定义;
  11. #define TIMELEN 10
  12. #define ENCRYPT_BLOCK_LEN 33 // 包含结束符'\0';
  13. //////////////////////////////////////////////////////////////////////////
  14. // 枚举定义;
  15. enum EncryptType
  16. {
  17. EN_OCHILD = 0, // 儿童全能版;
  18. EN_LCHILD = 1, // 儿童座席版;
  19. EN_ECHILD = 2, // 儿童企业版;
  20. EN_OWDDING = 3, // 婚纱全能版;
  21. EN_LWDDING = 4, // 婚纱座席版;
  22. EN_EWDDING = 5, // 婚纱企业版;
  23. };
  24. enum Ver1ModifyType
  25. {
  26. VER1_ADDCCOUNT = 0,
  27. VER1_MINUSCCOUNT,
  28. VER1_HOSPITAL,
  29. VER1_ADDTIME,
  30. VER1_MINUSTIME,
  31. };
  32. //////////////////////////////////////////////////////////////////////////
  33. // 结构体定义;
  34. typedef struct _YT_ERROR_
  35. {
  36. INT nErrorCode;
  37. TCHAR* pErrorDescription;
  38. }YtError,*pYtError;
  39. typedef struct _ENCRYPT_LOCKINFO_
  40. {
  41. INT nSoftVer;
  42. INT nCCount;
  43. BOOL bHospital;
  44. BOOL bAdddate;
  45. CHAR szRunyears[TIMELEN];
  46. CHAR szRunmonths[TIMELEN];
  47. CHAR szRundays[TIMELEN];
  48. CHAR szRunhours[TIMELEN];
  49. CHAR szRunminutes[TIMELEN];
  50. _ENCRYPT_LOCKINFO_()
  51. {
  52. nSoftVer = 0;
  53. nCCount = 0;
  54. bHospital = FALSE;
  55. bAdddate = FALSE;
  56. memset(szRunyears, 0, TIMELEN);
  57. memset(szRunmonths, 0, TIMELEN);
  58. memset(szRundays, 0, TIMELEN);
  59. memset(szRunhours, 0, TIMELEN);
  60. memset(szRunminutes, 0, TIMELEN);
  61. }
  62. }EncryptlockInfo, *pEncryptlockInfo;
  63. typedef struct _YT_INFO_VER1_
  64. {
  65. INT nSoftVer;
  66. CHAR szHospital[MAX_PATH];
  67. CHAR szCCount[MAX_PATH];
  68. CHAR szBranchId[MAX_PATH];
  69. // 已运行时间;
  70. CHAR szHasRunyears[TIMELEN];
  71. CHAR szHasRunmonths[TIMELEN];
  72. CHAR szHasRundays[TIMELEN];
  73. CHAR szHasRunhours[TIMELEN];
  74. CHAR szHasRunminutes[TIMELEN];
  75. CHAR szHasRunseconds[TIMELEN];
  76. // 可运行时间;
  77. CHAR szCanRunyears[TIMELEN];
  78. CHAR szCanRunmonths[TIMELEN];
  79. CHAR szCanRundays[TIMELEN];
  80. CHAR szCanRunhours[TIMELEN];
  81. CHAR szCanRunminutes[TIMELEN];
  82. _YT_INFO_VER1_()
  83. {
  84. nSoftVer = 0;
  85. memset(szHospital, 0, MAX_PATH*sizeof(CHAR));
  86. memset(szCCount, 0, MAX_PATH*sizeof(CHAR));
  87. memset(szBranchId, 0, MAX_PATH*sizeof(CHAR));
  88. memset(szHasRunyears, 0, TIMELEN*sizeof(CHAR));
  89. memset(szHasRunmonths, 0, TIMELEN*sizeof(CHAR));
  90. memset(szHasRundays, 0, TIMELEN*sizeof(CHAR));
  91. memset(szHasRunhours, 0, TIMELEN*sizeof(CHAR));
  92. memset(szHasRunminutes, 0, TIMELEN*sizeof(CHAR));
  93. memset(szHasRunseconds, 0, TIMELEN*sizeof(CHAR));
  94. memset(szCanRunyears, 0, TIMELEN*sizeof(CHAR));
  95. memset(szCanRunmonths, 0, TIMELEN*sizeof(CHAR));
  96. memset(szCanRundays, 0, TIMELEN*sizeof(CHAR));
  97. memset(szCanRunhours, 0, TIMELEN*sizeof(CHAR));
  98. memset(szCanRunminutes, 0, TIMELEN*sizeof(CHAR));
  99. }
  100. }YtInfoVer1,*pYtInfoVer1;
  101. //////////////////////////////////////////////////////////////////////////
  102. // 全局变量定义;
  103. extern CHAR *g_pHReadPassWord;
  104. extern CHAR *g_pLReadPassWord;
  105. extern CHAR *g_pHWritePassWord;
  106. extern CHAR *g_pLWritePassWord;
  107. extern BOOL g_bUSE_NEWPASSWORD;
  108. extern CHAR *g_szEncKey[][4];
  109. extern CHAR *g_szRom[];
  110. extern CHAR *g_szPassword[][2];
  111. extern CHAR *g_szUserKey;
  112. extern BYTE g_byShotVersion[][10];
  113. extern CONST BYTE g_byCalExVersion[][114];
  114. extern CHAR g_szKeyPath[MAX_PATH];
  115. extern CONST YtError g_YtError[];
  116. //////////////////////////////////////////////////////////////////////////
  117. // 全局函数定义;
  118. //
  119. // 初始化密码;
  120. extern void ReSetPassWord();
  121. // 返回错误码;
  122. extern CONST TCHAR* GetYtUSBKey32ErrInfo(IN const long lError);
  123. // 读取加密锁信息;
  124. extern BOOL ReadYtInfoVer1(IN CONST INT &nUSBStartPos, OUT YtInfoVer1 &Infover1, OUT INT &nUSBPort , OUT CHAR* pszKeyPath , IN CONST INT &nKeypath );
  125. // 修改加密狗版本1信息;
  126. extern BOOL ModifyYtVer1Info(IN CHAR* pszKeypath, IN YtInfoVer1 &Infover1, IN CONST INT &nModifyType);
  127. // 清除加密锁信息;
  128. extern BOOL ClearEncryptlockInfo(IN const int &nStartUSBPort = 0);
  129. // 生成指定软件版本的加密锁;
  130. extern BOOL CreateEncryptlockInfo(IN CONST INT &nStartPort,IN EncryptlockInfo &linfo,OUT LPTSTR lpHasRundate,IN CONST size_t &sizeOfhasrundate,OUT LPTSTR lpCouldRundate,IN CONST size_t &sizeOfcouldrundate, IN BOOL bfixedId = FALSE );
  131. // 查找锁,并返回锁短ID,锁版本号,锁物理位置;
  132. extern BOOL FindYtUSB(OUT DWORD &dwShortKey, OUT INT &nVersion, OUT CHAR *pszKeyPath, IN CONST INT &nStartPort = 0);
  133. // 返回计算机上第一个找到的加密锁;
  134. extern BOOL GetFirstYtUSBSoftVer(IN INT &nSoftVer, IN CHAR *pBranchIdBuffer, IN size_t sizeOfBranchIdBuffer, IN CONST INT &nUSBStartPos );
  135. // 获取第一个找到的加密锁;
  136. template<size_t size>
  137. BOOL GetFirstYtUSBSoftVer(IN INT &nSoftVer, IN CHAR(&szBranchId)[size], IN CONST INT &nUSBStartPos )
  138. {
  139. INT nRetval = 0;
  140. INT nVal[8] = { 0 };
  141. DOUBLE fVal[8] = { 0.0 };
  142. CHAR s0[50] = "", s1[50] = "", s2[50] = "", s3[50] = "", s4[50] = "", s5[50] = "", s6[50] = "", s7[50] = "";
  143. BOOL bFind = FALSE;
  144. CHAR szKeyPath[MAX_PATH] = "";
  145. for (INT nIndex = nUSBStartPos; nIndex < 256; nIndex++)
  146. {
  147. memset(szKeyPath, 0, sizeof(szKeyPath));
  148. nRetval = FindPort(nIndex, szKeyPath);
  149. if (nRetval != 0 && nIndex == 0) continue;
  150. if (nRetval != 0) continue;
  151. for (int i = 0; i < 6; i++)
  152. {
  153. // 使用该设备路径锁进行运算;
  154. nRetval = CalEx(g_byShotVersion[i], 10,
  155. &nVal[0], &nVal[1], &nVal[2], &nVal[3], &nVal[4], &nVal[5], &nVal[6], &nVal[7],
  156. &fVal[0], &fVal[1], &fVal[2], &fVal[3], &fVal[4], &fVal[5], &fVal[6], &fVal[7],
  157. s0, s1, s2, s3, s4, s5, s6, s7, szKeyPath, 20000);
  158. //如果正确,则返回该设备路径供以后使用;
  159. if (nRetval == -63) continue;
  160. if ((nRetval == 0) && (nVal[0] == 123))
  161. {
  162. bFind = TRUE;
  163. nSoftVer = i;
  164. if ( (nRetval = YtReadString(szBranchId, 297, ENCRYPT_BLOCK_LEN, g_pHReadPassWord, g_pLReadPassWord, szKeyPath)) != 0 )
  165. {
  166. GetYtUSBKey32ErrInfo(nRetval);
  167. }
  168. break;
  169. }
  170. }
  171. if (bFind) break;
  172. }
  173. return bFind;
  174. }
  175. template<size_t tlen>
  176. BOOL ReadYtInfoVer1(IN CONST INT &nUSBStartPos, OUT YtInfoVer1 &Infover1, OUT INT &nUSBPort, OUT CHAR (&pszKeyPath)[tlen])
  177. {
  178. INT nRetval = 0;
  179. INT nVal[8] = { 0 };
  180. DOUBLE fVal[8] = { 0.0 };
  181. CHAR s0[50] = "", s1[50] = "", s2[50] = "", s3[50] = "", s4[50] = "", s5[50] = "", s6[50] = "", s7[50] = "";
  182. BOOL bFind = FALSE;
  183. CHAR szKeyPath[MAX_PATH] = "";
  184. for (INT nIndex = nUSBStartPos; nIndex < 256; nIndex++)
  185. {
  186. memset(szKeyPath, 0, sizeof(szKeyPath));
  187. nRetval = FindPort(nIndex, szKeyPath);
  188. if (nRetval != 0 && nIndex == 0) continue;
  189. if (nRetval != 0) continue;
  190. for (int i = 0; i < 6; i++)
  191. {
  192. // 使用该设备路径锁进行运算;
  193. nRetval = CalEx(g_byShotVersion[i], 10,
  194. &nVal[0], &nVal[1], &nVal[2], &nVal[3], &nVal[4], &nVal[5], &nVal[6], &nVal[7],
  195. &fVal[0], &fVal[1], &fVal[2], &fVal[3], &fVal[4], &fVal[5], &fVal[6], &fVal[7],
  196. s0, s1, s2, s3, s4, s5, s6, s7, szKeyPath, 20000);
  197. //如果正确,则返回该设备路径供以后使用;
  198. if (nRetval == -63) continue;
  199. if ((nRetval == 0) && (nVal[0] == 123))
  200. {
  201. nUSBPort = nIndex;
  202. if (pszKeyPath)
  203. sprintf_s(pszKeyPath, "%s",szKeyPath);
  204. bFind = TRUE;
  205. Infover1.nSoftVer = i;
  206. // 获取加密锁座席数量;
  207. if ( (nRetval = YtReadString(Infover1.szCCount, 264, ENCRYPT_BLOCK_LEN, g_pHReadPassWord, g_pLReadPassWord, szKeyPath)) != 0 )
  208. GetYtUSBKey32ErrInfo(nRetval);
  209. // 获取加密锁域名值;
  210. if ( (nRetval = YtReadString(Infover1.szBranchId, 297, ENCRYPT_BLOCK_LEN, g_pHReadPassWord, g_pLReadPassWord, szKeyPath)) != 0)
  211. GetYtUSBKey32ErrInfo(nRetval);
  212. // 获取医院跟踪系统;
  213. if ( (nRetval = YtReadString(Infover1.szHospital, 330, ENCRYPT_BLOCK_LEN, g_pHReadPassWord, g_pLReadPassWord, szKeyPath)) != 0)
  214. GetYtUSBKey32ErrInfo(nRetval);
  215. // 返回加密锁已运行时间;
  216. if ( (nRetval = GetRunTimer(Infover1.szHasRunyears, Infover1.szHasRunmonths, Infover1.szHasRundays, Infover1.szHasRunhours, Infover1.szHasRunminutes, Infover1.szHasRunseconds, szKeyPath)) != 0)
  217. GetYtUSBKey32ErrInfo(nRetval);
  218. // 返回加密锁可运行时间;
  219. DWORD dwShortID = 0; // 锁短ID;
  220. CHAR szOutString[100] = {0};
  221. CHAR HKey[50] = {0}, LKey[50] = {0};
  222. // 30000以后的储存空间为公共区域;
  223. if ( (nRetval = ReadTimeAuthFromEprom(HKey, LKey, szOutString, &dwShortID, 30128, "FFFFFFFF", "FFFFFFFF", szKeyPath)) != 0)
  224. GetYtUSBKey32ErrInfo(nRetval);
  225. std::string str = szOutString;
  226. int nStrPos = str.find("年");
  227. if ( nStrPos != std::string::npos )
  228. {
  229. sprintf_s(Infover1.szCanRunyears, "%s", str.substr(0,nStrPos).c_str());
  230. str = str.substr(nStrPos + strlen("年"));
  231. nStrPos = str.find("月");
  232. sprintf_s(Infover1.szCanRunmonths, "%s", str.substr(0,nStrPos).c_str());
  233. str = str.substr(nStrPos + strlen("月"));
  234. nStrPos = str.find("日");
  235. sprintf_s(Infover1.szCanRundays, "%s", str.substr(0,nStrPos).c_str());
  236. str = str.substr(nStrPos + strlen("日"));
  237. nStrPos = str.find("小时");
  238. sprintf_s(Infover1.szCanRunhours, "%s", str.substr(0,nStrPos).c_str());
  239. str = str.substr(nStrPos + strlen("小时"));
  240. nStrPos = str.find("分钟");
  241. sprintf_s(Infover1.szCanRunminutes, "%s", str.substr(0,nStrPos).c_str());
  242. //str = str.substr(nStrPos + strlen("分钟"));
  243. }
  244. break;
  245. }
  246. }
  247. if (bFind) break;
  248. }
  249. return bFind;
  250. }
  251. // 生成指定软件版本的加密锁;
  252. template< size_t sizeOfhasrundate, size_t sizeofCouldrundate >
  253. BOOL CreateEncryptlockInfo(IN CONST INT &nStartPort, IN EncryptlockInfo &linfo, OUT TCHAR (&szHasRundate)[sizeOfhasrundate], OUT TCHAR (&szCouldRundate)[sizeofCouldrundate], IN BOOL bfixedId = FALSE );
  254. template< size_t sizeOfhasrundate, size_t sizeofCouldrundate >
  255. BOOL CreateEncryptlockInfo(IN CONST INT &nStartPort, IN EncryptlockInfo &linfo, OUT TCHAR (&szHasRundate)[sizeOfhasrundate], OUT TCHAR (&szCouldRundate)[sizeofCouldrundate], IN BOOL bfixedId /*= FALSE*/)
  256. {
  257. int nRet = -1;
  258. DWORD dwShortKey = 0;
  259. int nVersion = -1;
  260. CHAR szKeyPath[MAX_PATH] = { 0 };
  261. if (!FindYtUSB(dwShortKey, nVersion, szKeyPath, nStartPort))
  262. return FALSE;
  263. if (dwShortKey == -1)
  264. {
  265. // 不是域天智能锁;
  266. return FALSE;
  267. }
  268. nRet = SetReadPassword("FFFFFFFF", "FFFFFFFF", g_pHReadPassWord, g_pLReadPassWord, szKeyPath);
  269. if (nRet != 0) {
  270. GetYtUSBKey32ErrInfo(nRet);
  271. AfxMessageBox(_T("设置读密码失败"));
  272. }
  273. nRet = SetWritePassword("FFFFFFFF", "FFFFFFFF", g_pHWritePassWord, g_pLWritePassWord, szKeyPath);
  274. if (nRet != 0) {
  275. GetYtUSBKey32ErrInfo(nRet);
  276. AfxMessageBox(_T("设置写密码失败"));
  277. }
  278. // 从地址0~231+32,是所有加密锁共同内容;
  279. for (int i = 0; i < 8; i++)
  280. {
  281. if ((nRet = YtWriteString(g_szRom[i], i * 33, g_pHWritePassWord, g_pLWritePassWord, szKeyPath)) <= 0 )
  282. {
  283. // 写区域错误;
  284. GetYtUSBKey32ErrInfo(nRet);
  285. }
  286. }
  287. // 264是座席数量;
  288. if (linfo.nCCount != 0)
  289. {
  290. CHAR szCCount[ENCRYPT_BLOCK_LEN] = { 0 }; // 包含结束符;
  291. sprintf_s(szCCount, "%d", linfo.nCCount);
  292. if ( (nRet = YtWriteString(szCCount, 264, g_pHWritePassWord, g_pLWritePassWord, szKeyPath)) <= 0 )
  293. {
  294. // 设置座席数失败;
  295. GetYtUSBKey32ErrInfo(nRet);
  296. return FALSE;
  297. }
  298. }
  299. // 297是域名值;
  300. // 生成域名串 = 日期 + 短ID;
  301. CHAR szDomain[ENCRYPT_BLOCK_LEN] = { 0 }; // 包含结束符;
  302. if ( bfixedId )
  303. {
  304. sprintf_s(szDomain, "20151208000000%d.ly.com", dwShortKey);
  305. }
  306. else
  307. {
  308. CTime tt = CTime::GetCurrentTime();
  309. sprintf_s(szDomain, "%04d%02d%02d%02d%02d%02d%d.ly.com", tt.GetYear(), tt.GetMonth(), tt.GetDay(), tt.GetHour(), tt.GetMinute(), tt.GetSecond(), dwShortKey);
  310. }
  311. if ( (nRet = YtWriteString(szDomain, 297, g_pHWritePassWord, g_pLWritePassWord, szKeyPath) ) <= 0)
  312. {
  313. // 生成域名错误;
  314. GetYtUSBKey32ErrInfo(nRet);
  315. return FALSE;
  316. }
  317. // 330是医院跟踪系统;
  318. if (linfo.bHospital)
  319. {
  320. CHAR szHospital[ENCRYPT_BLOCK_LEN] = { 0 }; // 包含结束符;
  321. sprintf_s(szHospital, "%d", linfo.bHospital);
  322. if (( nRet = YtWriteString(szHospital, 330, g_pHWritePassWord, g_pLWritePassWord, szKeyPath)) <= 0 )
  323. {
  324. // 设置医院跟踪系统失败;
  325. GetYtUSBKey32ErrInfo(nRet);
  326. return FALSE;
  327. }
  328. }
  329. // 生成指定软件版本加密解密密钥;
  330. switch (linfo.nSoftVer)
  331. {
  332. case EN_OCHILD:
  333. nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_OCHILD][0], g_szEncKey[EN_OCHILD][1], g_szEncKey[EN_OCHILD][2], g_szEncKey[EN_OCHILD][3], szKeyPath);
  334. break;
  335. case EN_LCHILD:
  336. nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_LCHILD][0], g_szEncKey[EN_LCHILD][1], g_szEncKey[EN_LCHILD][2], g_szEncKey[EN_LCHILD][3], szKeyPath);
  337. break;
  338. case EN_ECHILD:
  339. nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_ECHILD][0], g_szEncKey[EN_ECHILD][1], g_szEncKey[EN_ECHILD][2], g_szEncKey[EN_ECHILD][3], szKeyPath);
  340. break;
  341. case EN_OWDDING:
  342. nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_OWDDING][0], g_szEncKey[EN_OWDDING][1], g_szEncKey[EN_OWDDING][2], g_szEncKey[EN_OWDDING][3], szKeyPath);
  343. break;
  344. case EN_LWDDING:
  345. nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_LWDDING][0], g_szEncKey[EN_LWDDING][1], g_szEncKey[EN_LWDDING][2], g_szEncKey[EN_LWDDING][3], szKeyPath);
  346. break;
  347. case EN_EWDDING:
  348. nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_EWDDING][0], g_szEncKey[EN_EWDDING][1], g_szEncKey[EN_EWDDING][2], g_szEncKey[EN_EWDDING][3], szKeyPath);
  349. break;
  350. }
  351. if (nRet != 0)
  352. {
  353. // 生成密钥失败;
  354. GetYtUSBKey32ErrInfo(nRet);
  355. return FALSE;
  356. }
  357. //////////////////////////////////////////////////////////////////////////
  358. // 授权时间码;
  359. CHAR szyear[10] = { 0 }, szmonth[10] = { 0 }, szday[10] = { 0 }, szhour[10] = { 0 }, szminute[10] = { 0 }, szsecond[10] = { 0 };
  360. if ( ( nRet = GetRunTimer(szyear, szmonth, szday, szhour, szminute, szsecond, szKeyPath)) != 0 )
  361. {
  362. // 获取运行时间失败;
  363. GetYtUSBKey32ErrInfo(nRet);
  364. return FALSE;
  365. }
  366. _stprintf_s(szHasRundate, _T("已运行 %d年%d月%d天%d时%d分"), atoi(szyear), atoi(szmonth), atoi(szday), atoi(szhour), atoi(szminute));
  367. if (linfo.bAdddate) // 追加时间;
  368. {
  369. sprintf_s(szyear, "%d", atoi(linfo.szRunyears) + atoi(szyear));
  370. sprintf_s(szmonth, "%d", atoi(linfo.szRunmonths) + atoi(szmonth));
  371. sprintf_s(szday, "%d", atoi(linfo.szRundays) + atoi(szday));
  372. sprintf_s(szhour, "%d", atoi(linfo.szRunhours) + atoi(szhour));
  373. sprintf_s(szminute, "%d", atoi(linfo.szRunminutes) + atoi(szminute));
  374. }
  375. else
  376. {
  377. sprintf_s(szyear, "%s", linfo.szRunyears);
  378. sprintf_s(szmonth, "%s", linfo.szRunmonths);
  379. sprintf_s(szday, "%s", linfo.szRundays);
  380. sprintf_s(szhour, "%s", linfo.szRunhours);
  381. sprintf_s(szminute, "%s", linfo.szRunminutes);
  382. }
  383. // 生成时间授权码;
  384. CHAR szOutString[100] = { 0 }; // 返回的时间授权码;
  385. if (( nRet = MakeTimerAuth(g_szUserKey, dwShortKey, szyear, szmonth, szday, szhour, szminute, szOutString, szKeyPath)) != 0 )
  386. {
  387. // 生成时间授权码失败;
  388. GetYtUSBKey32ErrInfo(nRet);
  389. return FALSE;
  390. }
  391. CHAR HKey[9] = "FFFFFFFF", LKey[9] = "FFFFFFFF";
  392. CHAR WHKey[41] = "0", WLKey[41] = "0";
  393. memcpy(WHKey, szOutString, 40);
  394. memcpy(WLKey, &szOutString[40], 40);
  395. // 写授权时间到加密锁中;
  396. if (( nRet = WriteTimeAuthToEprom(30128, HKey, LKey, WHKey, WLKey, dwShortKey, szyear, szmonth, szday, szhour, szminute, szKeyPath)) != 0 )
  397. {
  398. // 写授权时间失败;
  399. GetYtUSBKey32ErrInfo(nRet);
  400. return FALSE;
  401. }
  402. DWORD dwID;
  403. // 30000以后的储存空间为公共区域;
  404. if ( ( nRet = ReadTimeAuthFromEprom(WHKey, WLKey, szOutString, &dwID, 30128, "FFFFFFFF", "FFFFFFFF", szKeyPath)) == 0 )
  405. {
  406. #ifdef UNICODE
  407. WCHAR *pOutString = ascii2unicode(szOutString);
  408. _stprintf_s(szCouldRundate, _T("%s"), pOutString);
  409. delete pOutString;
  410. pOutString = NULL;
  411. #else
  412. _stprintf_s(szCouldRundate, _T("%s"), szOutString);
  413. #endif
  414. }
  415. else
  416. {
  417. GetYtUSBKey32ErrInfo(nRet);
  418. }
  419. return TRUE;
  420. }
  421. };
  422. #endif