//--------------------------------------------------------------------------- #pragma hdrstop #include "TrialLock.h" //--------------------------------------------------------------------------- #include #include #include "define.h" //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- __fastcall TTrialLock::TTrialLock(TApplication *App, WORD wAProg) { // »ý¼ºÀÚ Char *pFileName = NULL; wPT = wAProg; strDFD = ""; strDFN = ""; strKFD = ""; strKFN = ""; pFileName = new Char[MAX_PATH]; memset(pFileName, 0, MAX_PATH); nState = 0; GetSystemDirectory(pFileName, MAX_PATH); strDFD = ExtractFileDir(Application->ExeName); strDFN = "Trial.dat"; strKFD = String(pFileName); // TexPro¿Ü¿¡ ³ª¸ÓÁö´Â ¿¹¾à switch (wPT) { case (TRL_TEXTILE | TRL_WEAVE | TRL_KNIT): strKFN = "YWTP.Key"; // TexPro break; case TRL_TEXTILE: strKFN = "YWTE.Key"; break; case TRL_WEAVE: strKFN = "YWWV.Key"; break; case TRL_KNIT: strKFN = "YWKT.Key"; break; case (TRL_TEX3D | TRL_TEX3EDITOR): strKFN = "YW3F.Key"; // Tex3D Full Set break; case TRL_TEX3D: strKFN = "YW3D.Key"; break; case TRL_TEX3DVIEWER: strKFN = "YW3V.Key"; break; case TRL_TEX3EDITOR: strKFN = "YW3E.Key"; break; case TRL_TEXKNIT: strKFN = "YWTK.Key"; break; case TRL_TEXPRINT: strKFN = "YWTPR.Key"; // TexPrint break; case TRL_TEXSTYLIST: strKFN = "YWTS.Key"; break; case TRL_TEXTRICOT: strKFN = "YWTT.Key"; break; case TRL_TEXWEAVE: strKFN = "YWTWV.Key"; break; case TRL_TEXWORK: strKFN = "YWTW.Key"; break; } if (pFileName) { delete []pFileName; pFileName = NULL; } } //--------------------------------------------------------------------------- __fastcall TTrialLock::~TTrialLock() { // ¼Ò¸êÀÚ strDFD = ""; strDFN = ""; strKFD = ""; strKFN = ""; nState = 0; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::GF(String strF, bool bD) { // ÆÄÀÏ ½Ã°£À» ¾òÀ½ bool bReturn = true; HANDLE hFile = NULL; WIN32_FIND_DATA wfdFD; // File Data if (FileExists(strF)) { hFile = FindFirstFile(strF.c_str(), &wfdFD); if (hFile) { if (bD) { ftDC = wfdFD.ftCreationTime; ftDW = wfdFD.ftLastWriteTime; } else { ftKC = wfdFD.ftCreationTime; ftKW = wfdFD.ftLastWriteTime; } FindClose(hFile); hFile = NULL; } else { bReturn = false; } } else { bReturn = false; } return bReturn; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::SF(String strF, bool bD) { // ÆÄÀÏ ½Ã°£À» ¼³Á¤ bool bReturn = true; HANDLE hFile = NULL; if (FileExists(strF)) { hFile = CreateFile(strF.c_str(), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING , FILE_ATTRIBUTE_HIDDEN, NULL); if (hFile) { if (bD) { SetFileTime(hFile, &ftDC, NULL, &ftDW); } else { SetFileTime(hFile, &ftKC, NULL, &ftKW); } CloseHandle(hFile); hFile = NULL; } else { bReturn; } } else { bReturn = false; } return bReturn; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::MKF() { bool bReturn = true; HANDLE hFile = NULL; String strTF = strKFD+"\\"+strKFN; // Key FileÀ» »ý¼º hFile = CreateFile(strTF.c_str(), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS , FILE_ATTRIBUTE_HIDDEN, NULL); if (hFile) { CloseHandle(hFile); hFile = NULL; } else { bReturn = false; } return bReturn; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::LFKF() { // Key FileÀ» Àд´٠HANDLE hFile = NULL; DWORD dwRead = 0; float dV = 0.0, dV_C = -1.0; // Version String strTF = strKFD+"\\"+strKFN; TryStrToFloat(TexStylistVersion, dV_C); if (!FileExists(strTF)) goto fail; if ((hFile = CreateFile(strTF.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING , FILE_ATTRIBUTE_HIDDEN, NULL)) == INVALID_HANDLE_VALUE) goto fail; if (!ReadFile(hFile, &dV, sizeof(float), &dwRead, NULL)) goto fail; if (dV != dV_C) goto fail; if (!ReadFile(hFile, &wPT_C, sizeof(WORD), &dwRead, NULL)) goto fail; if (wPT != wPT_C) goto fail; if (!ReadFile(hFile, &ftDC_C, sizeof(FILETIME), &dwRead, NULL)) goto fail; if (!ReadFile(hFile, &ftDW_C, sizeof(FILETIME), &dwRead, NULL)) goto fail; if (!ReadFile(hFile, &ftKC_C, sizeof(FILETIME), &dwRead, NULL)) goto fail; if (!ReadFile(hFile, &ftKW_C, sizeof(FILETIME), &dwRead, NULL)) goto fail; if (!ReadFile(hFile, &stPX, sizeof(SYSTEMTIME), &dwRead, NULL)) goto fail; if (hFile) CloseHandle(hFile); hFile = NULL; return true; fail: if (hFile) CloseHandle(hFile); hFile = NULL; return false; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::STKF() { // Key FileÀ» ÀúÀåÇÑ´Ù HANDLE hFile = NULL; DWORD dwWrite = 0; float dV = 0.0; // Version String strTF = strKFD+"\\"+strKFN; TryStrToFloat(TexStylistVersion, dV); if (!FileExists(strTF)) goto fail; if ((hFile = CreateFile(strTF.c_str(), GENERIC_WRITE, 0, NULL, OPEN_EXISTING , FILE_ATTRIBUTE_HIDDEN, NULL)) == INVALID_HANDLE_VALUE) goto fail; if (!WriteFile(hFile, &dV, sizeof(float), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, &wPT, sizeof(WORD), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, &ftDC_C, sizeof(FILETIME), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, &ftDW_C, sizeof(FILETIME), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, &ftKC_C, sizeof(FILETIME), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, &ftKW_C, sizeof(FILETIME), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, &stPX, sizeof(SYSTEMTIME), &dwWrite, NULL)) goto fail; if (hFile) CloseHandle(hFile); hFile = NULL; return true; fail: if (hFile) CloseHandle(hFile); hFile = NULL; return false; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::RFR() { // Registry Á¤º¸¸¦ Àд´٠TRegIniFile *rgR = NULL; String strR; char *pBin = NULL; String strV; // Version int nPP = 0; // Pointer Position rgR = new TRegIniFile(""); if (rgR) { rgR->RootKey = HKEY_LOCAL_MACHINE; if (!rgR->OpenKey(RegFilename, false)) goto fail; pBin = new char[(sizeof(FILETIME)*4)+(sizeof(SYSTEMTIME)*1)]; strV = rgR->ReadString("Trial", "V", ""); if (strV != TexStylistVersion) goto fail; wPT_C = rgR->ReadInteger("Trial", "PT", 0); if (wPT != wPT_C) goto fail; rgR->ReadBinaryData("D", pBin, sizeof(char)*((sizeof(FILETIME)*4)+(sizeof(SYSTEMTIME)*1))); memcpy(&ftDC_C, pBin, sizeof(FILETIME)); nPP += sizeof(FILETIME); memcpy(&ftDW_C, pBin+nPP, sizeof(FILETIME)); nPP += sizeof(FILETIME); memcpy(&ftKC_C, pBin+nPP, sizeof(FILETIME)); nPP += sizeof(FILETIME); memcpy(&ftKW_C, pBin+nPP, sizeof(FILETIME)); nPP += sizeof(FILETIME); memcpy(&stPX, pBin+nPP, sizeof(SYSTEMTIME)); delete rgR; } else { goto fail; } rgR = NULL; return true; fail: if (rgR) delete rgR; rgR = NULL; return false; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::WTR() { // Registry Á¤º¸¸¦ ÀúÀåÇÑ´Ù TRegIniFile *rgR = NULL; String strR; char *pBin = NULL; int nPP = 0; // Pointer Position rgR = new TRegIniFile(""); if (rgR) { rgR->RootKey = HKEY_LOCAL_MACHINE; if (!rgR->OpenKey(RegFilename, true)) goto fail; pBin = new char[(sizeof(FILETIME)*4)+(sizeof(SYSTEMTIME)*1)]; memcpy(pBin, &ftDC_C, sizeof(FILETIME)); nPP += sizeof(FILETIME); memcpy(pBin+nPP, &ftDW_C, sizeof(FILETIME)); nPP += sizeof(FILETIME); memcpy(pBin+nPP, &ftKC_C, sizeof(FILETIME)); nPP += sizeof(FILETIME); memcpy(pBin+nPP, &ftKW_C, sizeof(FILETIME)); nPP += sizeof(FILETIME); memcpy(pBin+nPP, &stPX, sizeof(SYSTEMTIME)); rgR->WriteString("Trial", "V", TexStylistVersion); rgR->WriteInteger("Trial", "PT", wPT); rgR->WriteBinaryData("D", pBin, sizeof(char)*((sizeof(FILETIME)*4)+(sizeof(SYSTEMTIME)*1))); delete rgR; } else { goto fail; } rgR = NULL; return true; fail: if (rgR) delete rgR; rgR = NULL; return false; } //--------------------------------------------------------------------------- SYSTEMTIME __fastcall TTrialLock::GED(SYSTEMTIME stC) { SYSTEMTIME stL; // LocalTime SystemTimeToTzSpecificLocalTime(NULL, &stC, &stL); // 6°³¿ù µÚ if (stC.wMonth <= TRL_MONTH_TERM) stC.wMonth += TRL_MONTH_TERM; else { stC.wYear += 1; stC.wMonth -= TRL_MONTH_TERM; } stC.wHour = 23 - (stL.wHour - stC.wHour); // ¸¸·áÀÏÀ» UTC·Î ÀúÀå stC.wMinute = 59; stC.wSecond = 59; return stC; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::CompareSystemTime(SYSTEMTIME st1, SYSTEMTIME st2) { // System Time ºñ±³ if (st1.wYear != st2.wYear || st1.wMonth != st2.wMonth || st1.wDay != st2.wDay || st1.wMinute != st2.wMinute || st1.wSecond != st2.wSecond || st1.wMilliseconds != st2.wMilliseconds) return true; else return false; // ¾Æ·¡ Äڵ尡 ¹®Á¦°¡ À־ À§ÀÇ ÄÚµå·Î ´ëü /* FILETIME ft1, ft2; SystemTimeToFileTime(&st1, &ft1); SystemTimeToFileTime(&st2, &ft2); return CompareFileTime(&ft1, &ft2); */ } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::CHK() { // ¸ðµç Á¤º¸ üũ ÇÁ·Î¼¼½º // °¡Á¤ : InstallShield ¼³Ä¡ ½Ã "Trial.dat"ÀÇ »ý¼º ½Ã°£°ú ¼öÁ¤ ½Ã°£Àº Àý´ë °°À» ¼ö ¾ø´Ù. // ½ÇÁ¦ ¹èÆ÷µÇ´Â ÆÄÀÏÀÇ °æ¿ìµµ ½Ã°£ÀÌ ´Ù¸£°í, // ¸¸¾à ½Ã°£ÀÌ °°´Ù¸é ¸¸µê°ú µ¿½Ã¿¡ ±â·ÏµÈ °ÍÀ̱⠋š¹®ÀÌ´Ù. ÀÌ´Â ºÒ°¡´ÉÇϸç Å©·¢À¸·Î °£ÁÖÇÑ´Ù. // // A. "Trial.dat" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤µÈ ½Ã°£À» üũÇÏ¿© ¼öÁ¤µÈ ½Ã°£ÀÌ »ý¼ºµÈ ½Ã°£º¸´Ù // ¸ÕÀú¶ó¸é óÀ½ ½ÇÇàÇÏ´Â ÄÚµå·Î À̵¿ // 1. C:\Windows\System32 ¿¡ "YWTP.key" ÆÄÀÏÀ» ¼û±è ÆÄÀÏ·Î »ý¼ºÇÑ´Ù. (TexPro ±âÁØ) // 2. ÇöÀç ½Ã°£À» ±¸ÇÑ´Ù. // 3. ¸¸·á±â°£À» ±¸ÇÑ´Ù. // 4. ÃֽŠ»ý¼º, ¼öÁ¤ ÆÄÀÏ¿¡ ±â°£ °Ë»öµÇÁö ¾Êµµ·Ï "YWTP.key" ÆÄÀÏÀÇ // »ý¼º, ¼öÁ¤ ½Ã°£À» 1³â ÀüÀ¸·Î µ¹¸°´Ù. // 5. "Trial.data" ÆÄÀÏÀÇ ¼öÁ¤ ½Ã°£À» ÇöÀç ½Ã°£À¸·Î º¯°æÇÑ´Ù. // 6. ·¹Áö½ºÆ®¸®¸¦ ÀúÀåÇÑ´Ù. // 7. "YWTP.key" ÆÄÀÏÀ» ÀúÀåÇÑ´Ù. // 8. "Trial.data" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£À» ±â·ÏÇÑ´Ù. // 9. "YWTP.key" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£À» ±â·ÏÇÑ´Ù. // B. "Trial.dat" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤µÈ ½Ã°£À» üũÇÏ¿© ¼öÁ¤µÈ ½Ã°£ÀÌ »ý¼ºµÈ ½Ã°£º¸´Ù // ³ªÁßÀ̶ó¸é üũÇÏ´Â ÄÚµå·Î À̵¿ // 1. "YWTP.key" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£À» º¯¼ö¿¡ ÀúÀåÇÑ´Ù. // 2. "YWTP.key" ÆÄÀÏÀÇ ³»¿ë°ú "Trial.dat" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£°ú µ¿ÀÏÇÑÁö üũÇÑ´Ù. // 3. ÇöÀç ½Ã°£°ú ÆÄÀÏ ³»¿ë Áß '¸¸·áÀÏ' üũÇÑ´Ù. // 4. ·¹Áö½ºÆ®¸®ÀÇ ³»¿ë°ú "Trial.dat" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£°ú µ¿ÀÏÇÑÁö üũÇÑ´Ù. // 5. ÇöÀç ½Ã°£°ú ·¹Áö½ºÆ®¸® ³»¿ë Áß '¸¸·áÀÏ' üũÇÑ´Ù. // 6. ½Ã°£ Á¶ÀÛÀÌ ÀÖ¾ú´ÂÁö üũÇÑ´Ù. (ÄÄÇ»ÅÍ ½Ã°£ÀÌ ÇöÀç ½Ã°£º¸´Ù ÀÌÀüÀÎÁö) // 7. ÇöÀç ½Ã°£À» "Trial.dat" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£À¸·Î º¯°æÇÑ´Ù. // 8. "YWTP.key" ÆÄÀÏÀÇ "Trial.dat" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£ ³»¿ëÀ» ±â·ÏÇÑ´Ù. // 9. ·¹Áö½ºÆ®¸®¿¡ "Trial.dat" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£ ³»¿ëÀ» ±â·ÏÇÑ´Ù. // 10. "YTWP.key" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£À» ÀÌÀü »ý¼º, ¼öÁ¤ ½Ã°£À¸·Î º¯°æÇÑ´Ù. (µÇµ¹¸²) // stC: Current datetime SYSTEMTIME stC; FILETIME ftC, ftPS_T, ftPE_T, ftPX_T; nState = 0; String strDF = strDFD+"\\"+strDFN; String strKF = strKFD+"\\"+strKFN; if (!GF(strDF, true)) goto fail; // Data ÆÄÀÏ ½Ã°£ ÀÐÀ½ if (CompareFileTime(&ftDC, &ftDW) > 0) nState = 0; // »ý¼º½Ã°£ÀÌ ¼öÁ¤ ½Ã°£º¸´Ù ´Ê´Â °æ¿ì (óÀ½¼³Ä¡, ¶Ç´Â À缳ġ) else nState = 2; // ±â°£ À¯È¿ if (nState == 0) { if (FileExists(strKF) == false && RFR() == false) MKF(); // óÀ½¼³Ä¡, Key File »ý¼º else if (RFR() == false) nState = 1; // Registry¸¸ ¾ø´Ù¸é À缳ġµÈ °ÍÀÓ. } if (nState == 0) { // óÀ½ ½ÇÇà // Data File GetSystemTime(&stC); // ÇöÀç ½Ã°£À» ±¸ÇÑ ÈÄ SystemTimeToFileTime(&stC, &ftDW); // Data ÆÄÀÏÀÇ ¼öÁ¤ ½Ã°£À» ÇöÀç ½Ã°£À¸·Î µ¹¸² // Expire date stPX = GED(stC); // ¸¸·á±â°£ ¼³Á¤ // Key File stC.wYear -= 1; // 1³â ÀüÀ¸·Î º¯°æ ÈÄ SystemTimeToFileTime(&stC, &ftKC); // Key FileÀÇ »ý¼º ½Ã°£À» µ¹¸°´Ù (ÃֽŠ»ý¼º ÆÄÀÏ¿¡ °Ë»öµÇÁö ¾Êµµ·Ï) SystemTimeToFileTime(&stC, &ftKW); // Key FileÀÇ ¼öÁ¤ ½Ã°£À» µ¹¸°´Ù (ÃֽмöÁ¤ ÆÄÀÏ¿¡ °Ë»öµÇÁö ¾Êµµ·Ï) // ÀúÀåÇÒ ½Ã°£ º¹»ç ftDC_C = ftDC; ftDW_C = ftDW; ftKC_C = ftKC; ftKW_C = ftKW; WTR(); // ·¹Áö½ºÆ®¸® ±â·Ï STKF(); // Key ÆÄÀÏ ÀúÀå SF(strDF, true); // Data FileÀÇ ½Ã°£À» º¯°æ SF(strKF, false); // Key FileÀÇ ½Ã°£À» º¯°æ } else { // ½Ã°£ üũ if (!GF(strKF, false)) goto fail; // Key File ½Ã°£ ÀÐÀ½ // ½Ã°£ Á¶ÀÛÀÌ ÀÖ¾ú´ÂÁö üũ GetSystemTime(&stC); // ÇöÀç ½Ã°£À» ±¸ÇÑ ÈÄ SystemTimeToFileTime(&stC, &ftC); // ÆÄÀÏ ½Ã°£À¸·Î º¯È¯ // Key File if (!LFKF()) goto fail; // Key File ³»¿ë ÀÐÀ½ if (nState != 1) { // À缳ġÀÏ °æ¿ì Key File°ú »ý¼º ³¯Â¥¸¦ ºñ±³ÇÏÁö ¾ÊÀ½. ¸¸·áÀϸ¸ üũ. if (CompareFileTime(&ftDC, &ftDC_C) != 0 || CompareFileTime(&ftDW, &ftDW_C) != 0 || CompareFileTime(&ftKC, &ftKC_C) != 0 || CompareFileTime(&ftKW, &ftKW_C) != 0) goto fail; // ³¯Â¥°¡ Çϳª¶óµµ °°Áö ¾ÊÀ¸¸é ½ÇÆÐ } // ¸¸·áÀÏ Ã¼Å© SystemTimeToFileTime(&stPX, &ftPX_T); if (CompareFileTime(&ftC, &ftPX_T) > 0) goto exp; if (nState != 1) { // À缳ġÀÏ °æ¿ì ·¹Áö½ºÆ®¸®¿Í »ý¼º ³¯Â¥¸¦ ºñ±³ÇÏÁö ¾ÊÀ½. // Registry if (!RFR()) goto fail; // Registry ³»¿ë ÀÐÀ½ if (CompareFileTime(&ftDC, &ftDC_C) != 0 || CompareFileTime(&ftDW, &ftDW_C) != 0 || CompareFileTime(&ftKC, &ftKC_C) != 0 || CompareFileTime(&ftKW, &ftKW_C) != 0) goto fail; // ³¯Â¥°¡ Çϳª¶óµµ °°Áö ¾ÊÀ¸¸é ½ÇÆÐ // ¸¸·áÀÏ Ã¼Å© SystemTimeToFileTime(&stPX, &ftPX_T); if (CompareFileTime(&ftC, &ftPX_T) > 0) goto exp; } // ½Ã°£ Á¶ÀÛÀÌ ÀÖ¾ú´ÂÁö üũ if (CompareFileTime(&ftC, &ftDC) < 0 || CompareFileTime(&ftC, &ftDW) < 0 || CompareFileTime(&ftC, &ftKC) < 0 || CompareFileTime(&ftC, &ftKW) < 0) goto fail; // ³¯Â¥°¡ Çϳª¶óµµ ÀÛÀ¸¸é ½ÇÆÐ // ÇÁ·Î±×·¥ ½ÃÀÛ ½Ã°£À» Data ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£¿¡ ±â·Ï ÈÄ ÀúÀå ftDC = ftC; ftDW = ftC; ftDC_C = ftC; ftDW_C = ftC; SF(strDF, true); // ÆÄÀÏ WTR(); // ·¹Áö½ºÆ®¸® ±â·Ï STKF(); // Key ÆÄÀÏ ÀúÀå SF(strKF, false); // Key FileÀÇ ½Ã°£À» º¯°æ } return true; exp: MessageDlg("The date expired.", mtError , TMsgDlgButtons() << mbOK, 0); return false; fail: MessageDlg("Abnomal termination. (a cause: clock setting, virus, crack..)" , mtError , TMsgDlgButtons() << mbOK, 0); return false; } //--------------------------------------------------------------------------- bool __fastcall TTrialLock::SV() { // Á¾·á Á÷Àü Á¾·á ½Ã°£ ±â·Ï // 1. ÇöÀç ½Ã°£À» ±¸ÇÑ´Ù. // 2. "YWTP.key" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£À» º¯¼ö¿¡ ÀúÀåÇÑ´Ù. // 3. "YWTP.key" ÆÄÀÏÀÇ ³»¿ëÀ» ÀÐÀº ÈÄ, ÆÄÀÏÀÇ ¼öÁ¤ ½Ã°£ ³»¿ëÀ» ÇöÀç ½Ã°£À¸·Î ±â·ÏÇÑ ÈÄ ÀúÀåÇÑ´Ù. // 4. ·¹Áö½ºÆ®¸® ³»¿ëÀ» ÀÐÀº ÈÄ, ÆÄÀÏÀÇ ¼öÁ¤ ½Ã°£ ³»¿ëÀ» ÇöÀç ½Ã°£À¸·Î ±â·ÏÇÑ ÈÄ ÀúÀåÇÑ´Ù. // 5. "Trial.dat" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£À» º¯¼ö¿¡ ÀúÀåÇÑ´Ù. // 6. "Trial.dat" ÆÄÀÏÀÇ ¼öÁ¤ ½Ã°£À» ÇöÀç ½Ã°£À¸·Î º¯°æ ÈÄ ÀúÀåÇÑ´Ù. // 7. "YTWP.key" ÆÄÀÏÀÇ »ý¼º, ¼öÁ¤ ½Ã°£À» ÀÌÀü »ý¼º, ¼öÁ¤ ½Ã°£À¸·Î º¯°æ (µÇµ¹¸²) SYSTEMTIME stC; FILETIME ftC; String strDF = strDFD+"\\"+strDFN; String strKF = strKFD+"\\"+strKFN; GetSystemTime(&stC); // ÇöÀç ½Ã°£À» ±¸ÇÑ ÈÄ SystemTimeToFileTime(&stC, &ftC); // ÆÄÀÏ ½Ã°£À¸·Î º¯È¯ // Key File if (!GF(strKF, false)) goto fail; // ÆÄÀÏ ½Ã°£À» ¾òÀ½ // Key File if (!LFKF()) goto fail; // Key FileÀ» Àд´٠ftDW_C = ftC; // ÆÄÀÏ ¼öÁ¤ ½Ã°£À» ÇöÀç ½Ã°£À¸·Î if (!STKF()) goto fail; // Key FileÀ» ÀúÀåÇÑ´Ù // Registry if (!RFR()) goto fail; // Registry Á¤º¸¸¦ Àд´٠ftDW_C = ftC; // ÆÄÀÏ ¼öÁ¤ ½Ã°£À» ÇöÀç ½Ã°£À¸·Î if (!WTR()) goto fail; // Registry Á¤º¸¸¦ ÀúÀåÇÑ´Ù // ÀúÀåÇÒ ½Ã°£ º¹»ç ftDW = ftC; // Data File if (!GF(strDF, true)) goto fail; // ÆÄÀÏ ½Ã°£À» ¾òÀ½ ftDW = ftC; // ÆÄÀÏ ¼öÁ¤ ½Ã°£À» ÇöÀç ½Ã°£À¸·Î if (!SF(strDF, true)) goto fail; // Key FileÀÇ ½Ã°£À» º¯°æ // Key File if (!SF(strKF, false)) goto fail; // Key FileÀÇ ½Ã°£À» ¿ø·¡ ½Ã°£À¸·Î º¯°æ return true; fail: return false; } //---------------------------------------------------------------------------