codverify.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:5k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #if defined( _WIN32 ) || defined( _WINDOWS )
  36. #include <hxtypes.h>
  37. #include <windows.h>
  38. #include <windowsx.h>
  39. #ifndef _WIN32
  40. #include <ver.h>
  41. #endif
  42. #endif
  43. #include <stdlib.h>
  44. #include <string.h>
  45. #if defined( _WIN32 ) || defined( _WINDOWS )
  46. #ifndef _WINCE
  47. #include <dos.h>
  48. #include "hxloader.h"
  49. #include <io.h>
  50. #endif
  51. #endif
  52. #include "hxassert.h"
  53. #include "safestring.h"
  54. #include "codverify.h"
  55. #include "hlxosstr.h"
  56. BOOL DoesCodecFileExist(const char * DecDllPath)
  57. {
  58. #if defined(_STATICALLY_LINKED)
  59.     return TRUE;
  60. #else
  61.     BOOL Exist = FALSE;
  62. #ifndef _WINCE
  63.     INT32 findhandle;
  64.     struct _finddata_t fileinfo;
  65.     if (-1 != (findhandle = _findfirst( (char*)DecDllPath, &fileinfo )))
  66. Exist = TRUE;
  67.     _findclose( findhandle );
  68. #else
  69.     
  70. if (GetFileAttributes(OS_STRING(DecDllPath)) != 0xffffffff)
  71.         Exist=TRUE;
  72. #endif
  73.     return Exist;
  74. #endif /* #if defined(_STATICALLY_LINKED) */
  75. }
  76. BOOL VerifyCodecFile(const char * DecDllPath)
  77. {
  78. #if defined(_STATICALLY_LINKED)
  79.     return TRUE;
  80. #else
  81. #if !defined(_WINCE)
  82. //
  83. // Can return:
  84. // Success- TRUE
  85. // Fail- FALSE  The file is NOT a codec, blow it off but no error occurs.
  86. //
  87.     LPCSTR lpstrVffInfo = NULL; // Pointer to block to hold resource
  88.     ULONG32 dwVerHnd;
  89.     ULONG32 dwVerInfoSize;
  90.     char* pLibType = NULL;
  91.     BOOL bIsCodec = FALSE;
  92.     dwVerInfoSize = GetFileVersionInfoSize( (char*) DecDllPath, &dwVerHnd );
  93.     if(dwVerInfoSize)
  94.     {
  95. lpstrVffInfo  = (LPCSTR)GlobalAllocPtr( GMEM_MOVEABLE, dwVerInfoSize );
  96. if (lpstrVffInfo)
  97. {
  98.     if(!GetFileVersionInfo( (char*) DecDllPath, dwVerHnd, dwVerInfoSize, (LPVOID)lpstrVffInfo ))
  99.         lpstrVffInfo = NULL;
  100. }
  101.     }
  102.     if (lpstrVffInfo)
  103.     {
  104. char    szGetName[_MAX_PATH]; /* Flawfinder: ignore */
  105. BOOL    bRetCode;
  106. LPSTR   lpVersion;
  107. ULONG32 dwVersionLen;
  108. SafeStrCpy( szGetName, "\VarFileInfo\Translation", _MAX_PATH);
  109. bRetCode = RAVerQueryValue( lpstrVffInfo, (LPSTR)szGetName,
  110.                       (void FAR* FAR*)&lpVersion, &dwVersionLen );
  111. char TransNumber[10];  /* Flawfinder: ignore */
  112. SafeSprintf(TransNumber, 10, "%8lx", *(INT32 *)lpVersion);
  113. char * pSpace = strchr(TransNumber, ' ');
  114. while(pSpace)
  115.     *pSpace = '0';
  116.     pSpace = strchr(TransNumber, ' ');
  117. }
  118. SafeStrCpy(szGetName, "\StringFileInfo\", _MAX_PATH);
  119. SafeStrCat(szGetName, TransNumber + 4, _MAX_PATH);
  120. TransNumber[4] = 0;               
  121. SafeStrCat(szGetName, TransNumber, _MAX_PATH);         
  122. SafeStrCat(szGetName, "\LibraryType", _MAX_PATH);
  123. //lstrcpy(szGetName, "\StringFileInfo\040904b0\LibraryType");
  124. bRetCode = RAVerQueryValue( lpstrVffInfo, (LPSTR)szGetName,
  125.                     (void FAR* FAR*)&lpVersion, &dwVersionLen );
  126. if (bRetCode && dwVersionLen && lpVersion)
  127. {
  128.     pLibType = new char[dwVersionLen + 1];
  129.     memcpy(pLibType, lpVersion, HX_SAFESIZE_T(dwVersionLen)); /* Flawfinder: ignore */
  130.     pLibType[ dwVersionLen ] = 0;
  131. }
  132. {
  133.     // The win32 case
  134.     GlobalFreePtr( lpstrVffInfo );
  135. }    
  136.     }
  137.     if(pLibType)
  138.     {
  139. if (strcmp(pLibType, "RACodecHelper") == 0)
  140.     bIsCodec = TRUE;
  141. delete [] pLibType;
  142.     }
  143.     return bIsCodec;
  144. #else /* #if !defined(_WINCE) */
  145.     return TRUE;
  146. #endif
  147. #endif /* #if defined(_STATICALLY_LINKED) */
  148. }