valami.cpp
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:8k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. #include "......DSUtilDSUtil.h"
  22. static TCHAR str1[][256] = 
  23. /*
  24. {
  25. _T("CLSID\{083863F1-70DE-11d0-BD40-00A0C911CE86}\Instance\{9D2935C7-3D8B-4EF6-B0D1-C14064698794}"), // divxg400
  26. _T("CLSID\{083863F1-70DE-11d0-BD40-00A0C911CE86}\Instance\{8CE3343E-2289-4BAE-AE57-5106A40AF552}"), // divxg400force
  27. _T("CLSID\{083863F1-70DE-11d0-BD40-00A0C911CE86}\Instance\{00A95963-3BE5-48C0-AD9F-3356D67EA09D}"), // ogg sub mixer
  28. _T("CLSID\{083863F1-70DE-11d0-BD40-00A0C911CE86}\Instance\{70E102B0-5556-11CE-97C0-00AA0055595A}"), // video renderer (old)
  29. _T("CLSID\{083863F1-70DE-11d0-BD40-00A0C911CE86}\Instance\{6BC1CFFA-8FC1-4261-AC22-CFB4CC38DB50}"), // video renderer (vmr)
  30. };
  31. */
  32. {
  33. {
  34. 0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22, 
  35. 0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f, 
  36. 0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76, 
  37. 0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22, 
  38. 0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51, 
  39. 0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61, 
  40. 0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x2b, 
  41. 0x56, 0x20, 0x2b, 0x21, 0x27, 0x51, 0x25, 0x3f, 
  42. 0x21, 0x56, 0x2a, 0x50, 0x3f, 0x26, 0x57, 0x54, 
  43. 0x24, 0x3f, 0x50, 0x22, 0x56, 0x23, 0x3f, 0x51, 
  44. 0x23, 0x26, 0x22, 0x24, 0x26, 0x24, 0x2b, 0x2a, 
  45. 0x25, 0x2b, 0x26, 0x6f, 0x12
  46. },
  47. {
  48. 0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22, 
  49. 0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f, 
  50. 0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76, 
  51. 0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22, 
  52. 0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51, 
  53. 0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61, 
  54. 0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x2a, 
  55. 0x51, 0x57, 0x21, 0x21, 0x26, 0x21, 0x57, 0x3f, 
  56. 0x20, 0x20, 0x2a, 0x2b, 0x3f, 0x26, 0x50, 0x53, 
  57. 0x57, 0x3f, 0x53, 0x57, 0x27, 0x25, 0x3f, 0x27, 
  58. 0x23, 0x22, 0x24, 0x53, 0x26, 0x22, 0x53, 0x54, 
  59. 0x27, 0x27, 0x20, 0x6f, 0x12
  60. },
  61. {
  62. 0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22, 
  63. 0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f, 
  64. 0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76, 
  65. 0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22, 
  66. 0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51, 
  67. 0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61, 
  68. 0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x22, 
  69. 0x22, 0x53, 0x2b, 0x27, 0x2b, 0x24, 0x21, 0x3f, 
  70. 0x21, 0x50, 0x57, 0x27, 0x3f, 0x26, 0x2a, 0x51, 
  71. 0x22, 0x3f, 0x53, 0x56, 0x2b, 0x54, 0x3f, 0x21, 
  72. 0x21, 0x27, 0x24, 0x56, 0x24, 0x25, 0x57, 0x53, 
  73. 0x22, 0x2b, 0x56, 0x6f, 0x12
  74. },
  75. {
  76. 0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22, 
  77. 0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f, 
  78. 0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76, 
  79. 0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22, 
  80. 0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51, 
  81. 0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61, 
  82. 0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x25, 
  83. 0x22, 0x57, 0x23, 0x22, 0x20, 0x50, 0x22, 0x3f, 
  84. 0x27, 0x27, 0x27, 0x24, 0x3f, 0x23, 0x23, 0x51, 
  85. 0x57, 0x3f, 0x2b, 0x25, 0x51, 0x22, 0x3f, 0x22, 
  86. 0x22, 0x53, 0x53, 0x22, 0x22, 0x27, 0x27, 0x27, 
  87. 0x2b, 0x27, 0x53, 0x6f, 0x12
  88. },
  89. {
  90. 0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22, 
  91. 0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f, 
  92. 0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76, 
  93. 0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22, 
  94. 0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51, 
  95. 0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61, 
  96. 0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x24, 
  97. 0x50, 0x51, 0x23, 0x51, 0x54, 0x54, 0x53, 0x3f, 
  98. 0x2a, 0x54, 0x51, 0x23, 0x3f, 0x26, 0x20, 0x24, 
  99. 0x23, 0x3f, 0x53, 0x51, 0x20, 0x20, 0x3f, 0x51, 
  100. 0x54, 0x50, 0x26, 0x51, 0x51, 0x21, 0x2a, 0x56, 
  101. 0x50, 0x27, 0x22, 0x6f, 0x12
  102. },
  103. };
  104. static TCHAR str2[] = // _T("FilterData");
  105. {
  106. 0x72, 0x5d, 0x58, 0x40, 0x51, 0x46, 0x70, 0x55, 
  107. 0x40, 0x55, 0x34, 
  108. };
  109. static TCHAR str3[] = // _T("FriendlyName");
  110. {
  111. 0x10, 0x24, 0x3f, 0x33, 0x38, 0x32, 0x3a, 0x2f, 
  112. 0x18, 0x37, 0x3b, 0x33, 0x56, 
  113. };
  114. #define LEN1 (countof(str1))
  115. #define LEN11 (countof(str1[0]))
  116. #define LEN2 (countof(str2))
  117. #define LEN3 (countof(str3))
  118. static void dencode()
  119. {
  120. int i, j;
  121. for(i = 0; i < LEN1; i++) for(j = 0; j < LEN11; j++) str1[i][j] ^= 0x12;
  122. for(i = 0; i < LEN2; i++) str2[i] ^= 0x34;
  123. for(i = 0; i < LEN3; i++) str3[i] ^= 0x56;
  124. }
  125. extern /*const*/ AMOVIESETUP_FILTER sudFilter[2];
  126. void JajDeGonoszVagyok()
  127. {
  128. dencode();
  129. DWORD mymerit = sudFilter[1].dwMerit;
  130. for(int i = 0; i < LEN1; i++)
  131. {
  132. HKEY hKey;
  133. if(RegOpenKeyEx(HKEY_CLASSES_ROOT, str1[i], 0, KEY_READ, &hKey) == ERROR_SUCCESS)
  134. {
  135. BYTE* pData = NULL;
  136. DWORD size = 0;
  137. if(RegQueryValueEx(hKey, str2, 0, NULL, NULL, &size) == ERROR_SUCCESS)
  138. {
  139. pData = new BYTE[size];
  140. if(pData && RegQueryValueEx(hKey, str2, 0, NULL, pData, &size) == ERROR_SUCCESS)
  141. {
  142. DWORD merit = *((DWORD*)(pData+4));
  143. if(merit < 0xffffffff) merit++;
  144. if(mymerit < merit) 
  145. mymerit = merit;
  146. }
  147. if(pData) delete [] pData;
  148. }
  149. RegCloseKey(hKey);
  150. }
  151. }
  152. if(mymerit > sudFilter[1].dwMerit)
  153. {
  154. /*
  155. CString myguid = _T("CLSID\{083863F1-70DE-11d0-BD40-00A0C911CE86}\Instance\{9852A670-F845-491b-9BE6-EBD841B8A613}");
  156. HKEY hKey;
  157. if(RegOpenKeyEx(HKEY_CLASSES_ROOT, myguid, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
  158. {
  159. BYTE* pData = NULL;
  160. DWORD size = 0;
  161. if(RegQueryValueEx(hKey, str2, 0, NULL, NULL, &size) == ERROR_SUCCESS)
  162. {
  163. pData = new BYTE[size];
  164. if(pData && RegQueryValueEx(hKey, str2, 0, NULL, pData, &size) == ERROR_SUCCESS)
  165. {
  166. *((DWORD*)(pData+4)) = mymerit;
  167. if(RegSetValueEx(hKey, str2, 0, REG_BINARY, pData, size) != ERROR_SUCCESS)
  168. {
  169. int i = 0;
  170. }
  171. }
  172. if(pData) delete [] pData;
  173. }
  174. RegCloseKey(hKey);
  175. }
  176. */
  177. sudFilter[1].dwMerit = mymerit;
  178. }
  179. dencode();
  180. }
  181. bool HmGyanusVagyTeNekem(IPin* pPin)
  182. {
  183. dencode();
  184. pPin->AddRef();
  185. bool fFail = false;
  186. for(int i = 0; i < 3 && !fFail; i++)
  187. {
  188. BYTE* pData = NULL;
  189. DWORD size = 0;
  190. HKEY hKey;
  191. if(RegOpenKeyEx(HKEY_CLASSES_ROOT, str1[i], 0, KEY_READ, &hKey) == ERROR_SUCCESS)
  192. {
  193. if(RegQueryValueEx(hKey, str3, 0, NULL, NULL, &size) == ERROR_SUCCESS)
  194. {
  195. pData = new BYTE[size];
  196. if(pData)
  197. {
  198. if(RegQueryValueEx(hKey, str3, 0, NULL, pData, &size) != ERROR_SUCCESS)
  199. {
  200. delete [] pData;
  201. pData = NULL;
  202. }
  203. }
  204. }
  205. RegCloseKey(hKey);
  206. }
  207. if(pData)
  208. {
  209. CPinInfo pi;
  210. if(SUCCEEDED(pPin->QueryPinInfo(&pi)) && pi.pFilter)
  211. {
  212. CFilterInfo fi;
  213. if(SUCCEEDED(pi.pFilter->QueryFilterInfo(&fi))
  214. && !wcsncmp((WCHAR*)pData, fi.achName, wcslen((WCHAR*)pData)))
  215. fFail = true;
  216. }
  217. delete [] pData;
  218. }
  219. }
  220. pPin->Release();
  221. dencode();
  222. return(fFail);
  223. }