Global.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:10k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  FileName    :   Global.cpp
  4. //  Version     :   1.0
  5. //  Creater     :   Cheng Bitao
  6. //  Date        :   2001-12-28 15:55:54
  7. //  Comment     :   
  8. //
  9. //////////////////////////////////////////////////////////////////////////////////////
  10. #include "stdafx.h"
  11. //#include "htmlhelp.h"
  12. #include "CRC32.h"
  13. #include "KAVStrTranslate.h"
  14. #include "APLIB.h"
  15. #include "AtlBase.h"
  16. #include "Global.h"
  17. #include "PublicFun.h"
  18. KPATH_TABLE g_PathTable;
  19. ///////////////////////////////////////////////////////////////////////////////
  20. // Init paths  System, Windows, update destination path, temp, current, Module path
  21. int InitPaths()
  22. {
  23.     int Result = false;
  24.     int ErrorFlag = false;
  25.     unsigned uRetCode = 0;
  26.     char *pszOffset = NULL;
  27.     
  28.     uRetCode = ::GetWindowsDirectory(g_PathTable.szWindowsPath, MAX_PATH);
  29.     ASSERT(uRetCode);
  30.     if (!uRetCode) ErrorFlag = true;    
  31.     AddPathChar(g_PathTable.szWindowsPath);
  32.     uRetCode = (unsigned)::GetSystemDirectory(g_PathTable.szSystemPath, MAX_PATH);
  33.     ASSERT(uRetCode);
  34.     if (!uRetCode) ErrorFlag = true;
  35.     AddPathChar(g_PathTable.szSystemPath);
  36.     uRetCode = ::GetCurrentDirectory(MAX_PATH, g_PathTable.szCurrentPath);
  37.     ASSERT(uRetCode);
  38.     if (!uRetCode) ErrorFlag = true;
  39.     AddPathChar(g_PathTable.szCurrentPath);
  40.     uRetCode = ::GetModuleFileName(NULL, g_PathTable.szModulePath, (MAX_PATH + 1));
  41.     ASSERT(uRetCode);
  42.     if (!uRetCode) ErrorFlag = true;
  43.     pszOffset = strrchr(g_PathTable.szModulePath, '\');
  44.     ASSERT(pszOffset);
  45.     pszOffset[1] = '';  
  46.     uRetCode = ::GetTempPath(MAX_PATH, g_PathTable.szTempPath);
  47.     ASSERT(uRetCode);    
  48.     if (!uRetCode)
  49.     {
  50.         MkDirEx("C:\Temp");    
  51.         strcpy(g_PathTable.szTempPath, "C:\Temp\");
  52.     }
  53.     else
  54.         AddPathChar(g_PathTable.szTempPath);   
  55.     // Initialize the download destination directory
  56.     strcpy(g_PathTable.szDownloadDestPath, g_PathTable.szModulePath);    
  57.     strcat(g_PathTable.szDownloadDestPath, defUPDATE_DIRECTORY);
  58.     
  59.     // INitialize the Update destionation directory
  60.     strcpy(g_PathTable.szUpdateDestPath, g_PathTable.szModulePath);
  61.     
  62. //Exit0:
  63.     if (ErrorFlag)
  64.         Result = false;
  65.     else
  66.         Result = true;
  67.     return Result;
  68. }
  69. int inline _GetDateFromString(char szString[], int *pnLen)
  70. {
  71.     int i       = 0;
  72.     int nResult = 0;
  73.     *pnLen = 0;
  74.     while (*(szString + i) != '')
  75.     {
  76.         if (*(szString + i) == '.') 
  77.         {
  78.             *(szString + i) = '';
  79.             break;
  80.         }
  81.         i++;
  82.     }
  83.     *pnLen = i;
  84.     nResult = _StrToInt(szString);
  85.     return nResult;
  86. }
  87. // return 0 : not need update
  88. // return 1 : need update
  89. int CheckFileDate(const char cszFileName[], const char cszFileDate[])
  90. {
  91.     char        *pszFileDate    = NULL;
  92.     int         nResult         = false;
  93.     int         nYear           = 0;
  94.     int         nMonth          = 0;
  95.     int         nDay            = 0;
  96.     int         nLen            = 0;
  97.     char        *pszStr         = NULL;
  98. CFileStatus status;
  99. int         nModifyYear     = 0;
  100. int         nModifyMonth    = 0;
  101. int         nModifyDay      = 0;
  102.     pszFileDate = new char[strlen(cszFileDate) + 1];
  103.     KAV_PROCESS_ERROR(pszFileDate);
  104.     strcpy(pszFileDate, cszFileDate);
  105.     pszStr = pszFileDate;
  106.     
  107.     nYear   = _GetDateFromString(pszStr, &nLen);
  108.     pszStr  += nLen + 1;
  109.     nMonth  = _GetDateFromString(pszStr, &nLen);
  110.     pszStr  += nLen + 1;
  111.     nDay    = _GetDateFromString(pszStr, &nLen);
  112. if (!CFile::GetStatus(cszFileName, status))
  113. {
  114. nResult = true;
  115. goto Exit0;
  116. }
  117. nModifyYear     = status.m_mtime.GetYear();
  118. nModifyMonth    = status.m_mtime.GetMonth();
  119. nModifyDay      = status.m_mtime.GetDay();
  120. KAV_PROCESS_ERROR(nYear >= nModifyYear);
  121.     KAV_PROCESS_ERROR_RET_CODE(nYear <= nModifyYear, true);
  122. KAV_PROCESS_ERROR(nMonth >= nModifyMonth);
  123. KAV_PROCESS_ERROR_RET_CODE(nMonth <= nModifyMonth, true);
  124. KAV_PROCESS_ERROR(nDay > nModifyDay);
  125.     nResult = true;
  126. Exit0:
  127.     KAV_DELETE_ARRAY(pszFileDate);
  128.     return nResult;
  129. }
  130. ///////////////////////////////////////////////////////////
  131. // CRC32
  132. unsigned GetFileCRC(const char cszFileName[])
  133. {
  134.     CFile File;
  135.     CString szCRC;
  136.     char *pvBuffer = NULL;
  137.     int nRetCode   = 0;
  138.     unsigned uResult    = 0;
  139.     
  140.     if (File.Open(cszFileName, CFile::modeRead | CFile::shareDenyNone, NULL))
  141.     {
  142.         int nLen = File.GetLength();
  143.         
  144.         if (nLen > 0)
  145.         {
  146.             pvBuffer = new char[nLen + 1];
  147.             if (pvBuffer != NULL)
  148.             {
  149.                 nRetCode = File.Read(pvBuffer, nLen);
  150.                 if (nRetCode == nLen)
  151.                     uResult = CRC32(0, pvBuffer, nLen);
  152.             }
  153.         }
  154.         
  155.         File.Close();
  156.     }
  157.     
  158.     KAV_DELETE_ARRAY(pvBuffer);
  159.     
  160.     return uResult;
  161. }
  162. // Return true if the CRC matching, otherwise return false
  163. int CheckFileCRC(unsigned uCRC32, const char szFullFileName[])
  164. {
  165.     unsigned uRetCode   = 0;
  166.     int nResult     = false;
  167.     
  168.     uRetCode = GetFileCRC(szFullFileName);
  169.     if (uRetCode == uCRC32)
  170.         nResult = true;
  171.     return nResult;
  172. }
  173. /////////////////////////////////////////////////////////////////////////////////
  174. // UnCompress file whitch compress by CompressDLL
  175. /////////////////////////////////////////////////////////////////////////////////
  176. int UnCompressFile(const char cszSourceFileName[], const char cszDestFileName[])
  177. {
  178.     int nResult                     = false;
  179.     int nSourceFileSize             = 0;
  180.     int nDestFileSize               = 0;
  181.     unsigned char *pbySourceData    = NULL;
  182.     unsigned char *pbyDestData      = NULL;
  183.     unsigned char *pbySourceDataPos = NULL;
  184.     HANDLE hSourceFile              = INVALID_HANDLE_VALUE;
  185.     HANDLE hDestFile                = INVALID_HANDLE_VALUE;
  186.     int nReadSize                   = 0;
  187.     int nWrittenSize                = 0;
  188.     int nRetCode                    = 0;
  189.     // Read source data
  190.     hSourceFile = ::CreateFile(cszSourceFileName, GENERIC_READ, 
  191.         FILE_SHARE_READ, NULL, 
  192.         OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 
  193.         NULL
  194.     );
  195.     KAV_PROCESS_ERROR(INVALID_HANDLE_VALUE != hSourceFile);
  196.     nSourceFileSize = ::GetFileSize(hSourceFile, NULL);
  197.     KAV_PROCESS_ERROR(INVALID_FILE_SIZE != nSourceFileSize);
  198.     pbySourceData = (unsigned char *)new char[nSourceFileSize];
  199.     KAV_PROCESS_ERROR(pbySourceData);
  200.     nRetCode = ::ReadFile(hSourceFile, pbySourceData, nSourceFileSize, (unsigned long*)&nReadSize, NULL);
  201.     if ((nRetCode == 0) || (nReadSize != nSourceFileSize))
  202.         goto Exit0;
  203.     ::CloseHandle(hSourceFile);
  204.     hSourceFile = INVALID_HANDLE_VALUE;
  205.     // Uncompress
  206.     nDestFileSize = PKAVEngineFileHeader(pbySourceData)->dwOrignLength;
  207.     pbyDestData = (unsigned char *)new char[nDestFileSize];
  208.     KAV_PROCESS_ERROR(pbyDestData);
  209.     
  210.     pbySourceDataPos = pbySourceData + PKAVEngineFileHeader(pbySourceData)->dwSizeOfHeader;
  211.     nRetCode = aP_depack_asm_fast(pbySourceDataPos, pbyDestData);
  212.     KAV_DELETE_ARRAY(pbySourceData);
  213.     // Create the destination
  214.     hDestFile = ::CreateFile(cszDestFileName, GENERIC_WRITE, 
  215.         FILE_SHARE_READ, NULL, 
  216.         CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 
  217.         NULL
  218.     );
  219.     KAV_PROCESS_ERROR(INVALID_HANDLE_VALUE != hDestFile);
  220.     nRetCode = ::WriteFile(hDestFile, pbyDestData, nDestFileSize, (unsigned long *)&nWrittenSize, NULL);
  221.     if ((nRetCode == 0) || (nWrittenSize != nDestFileSize))
  222.         goto Exit0;
  223.     ::CloseHandle(hDestFile);
  224.     hDestFile = INVALID_HANDLE_VALUE;    
  225.     nResult = true;
  226. Exit0:   
  227.     
  228.     KAV_DELETE_ARRAY(pbySourceData);
  229.     KAV_DELETE_ARRAY(pbyDestData);
  230.     if (hSourceFile != INVALID_HANDLE_VALUE)
  231.     {
  232.         ::CloseHandle(hSourceFile);
  233.         hSourceFile = INVALID_HANDLE_VALUE;
  234.     }
  235.     if (hDestFile != INVALID_HANDLE_VALUE)
  236.     {
  237.         ::CloseHandle(hDestFile);
  238.         hDestFile = INVALID_HANDLE_VALUE;
  239.     }
  240.     return nResult;
  241. }
  242. //////////////////////////////////////////////////////////////////////////////////////
  243. //  
  244. //  WinUI routines
  245. //  
  246. //    int  KRSMessageBox
  247. //  
  248. //////////////////////////////////////////////////////////////////////////////////////
  249. int KRSMessageBox(HWND hParent, const CString strMessage, const CString strTitle, int nMsgFlag)
  250. {
  251.     int nResult = false;
  252.     //CString strMessage, strTitle;
  253.     
  254.     //VERIFY(strMessage.LoadString(nMsgResID));
  255.     //VERIFY(strTitle.LoadString(nTitleResID));
  256.     
  257.     nResult = MessageBox(hParent, strMessage, strTitle, (UINT)nMsgFlag);
  258.     
  259.     return nResult;
  260. }
  261. ///////////////////////////////////////////////////////////////////////////////////////
  262. //  
  263. //      Check if the cszKeyName exist in HKEY_LOACL_MACHINE or HKEY_CURRNET_USER
  264. //
  265. ///////////////////////////////////////////////////////////////////////////////////////
  266. int ExistRegKey(const char cszKeyName[])
  267. {
  268.     CRegKey regkey;
  269.     LONG lRetCode = 0;
  270.     
  271.     
  272.     if (regkey.Open(HKEY_LOCAL_MACHINE, cszKeyName) == ERROR_SUCCESS)
  273.     {
  274.         regkey.Close();
  275.         return true;
  276.     }
  277.     else if (regkey.Open(HKEY_CURRENT_USER, cszKeyName) == ERROR_SUCCESS) 
  278.     {
  279.         regkey.Close();
  280.         return true;
  281.     }
  282.     
  283.     return false;
  284. }
  285. BOOL IsInternetConnection()
  286. {
  287.     int nRetCode = 0;
  288.     nRetCode = ::GetSystemMetrics(SM_NETWORK);
  289.     if (nRetCode & 0x01)
  290.         return true;
  291.     return false;
  292. }