forked from mia/Aegisub
262 lines
7.3 KiB
C++
262 lines
7.3 KiB
C++
|
/*
|
||
|
* Copyright (C) 2003-2006 Gabest
|
||
|
* http://www.gabest.org
|
||
|
*
|
||
|
* This Program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2, or (at your option)
|
||
|
* any later version.
|
||
|
*
|
||
|
* This Program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with GNU Make; see the file COPYING. If not, write to
|
||
|
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
|
* http://www.gnu.org/copyleft/gpl.html
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "DSUtil/DSUtil.h"
|
||
|
|
||
|
static TCHAR str1[][256] =
|
||
|
/*
|
||
|
{
|
||
|
_T("CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance\\{9D2935C7-3D8B-4EF6-B0D1-C14064698794}"), // divxg400
|
||
|
_T("CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance\\{8CE3343E-2289-4BAE-AE57-5106A40AF552}"), // divxg400force
|
||
|
_T("CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance\\{00A95963-3BE5-48C0-AD9F-3356D67EA09D}"), // ogg sub mixer
|
||
|
_T("CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance\\{70E102B0-5556-11CE-97C0-00AA0055595A}"), // video renderer (old)
|
||
|
_T("CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance\\{6BC1CFFA-8FC1-4261-AC22-CFB4CC38DB50}"), // video renderer (vmr)
|
||
|
};
|
||
|
*/
|
||
|
{
|
||
|
{
|
||
|
0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22,
|
||
|
0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f,
|
||
|
0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76,
|
||
|
0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22,
|
||
|
0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51,
|
||
|
0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61,
|
||
|
0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x2b,
|
||
|
0x56, 0x20, 0x2b, 0x21, 0x27, 0x51, 0x25, 0x3f,
|
||
|
0x21, 0x56, 0x2a, 0x50, 0x3f, 0x26, 0x57, 0x54,
|
||
|
0x24, 0x3f, 0x50, 0x22, 0x56, 0x23, 0x3f, 0x51,
|
||
|
0x23, 0x26, 0x22, 0x24, 0x26, 0x24, 0x2b, 0x2a,
|
||
|
0x25, 0x2b, 0x26, 0x6f, 0x12
|
||
|
},
|
||
|
{
|
||
|
0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22,
|
||
|
0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f,
|
||
|
0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76,
|
||
|
0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22,
|
||
|
0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51,
|
||
|
0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61,
|
||
|
0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x2a,
|
||
|
0x51, 0x57, 0x21, 0x21, 0x26, 0x21, 0x57, 0x3f,
|
||
|
0x20, 0x20, 0x2a, 0x2b, 0x3f, 0x26, 0x50, 0x53,
|
||
|
0x57, 0x3f, 0x53, 0x57, 0x27, 0x25, 0x3f, 0x27,
|
||
|
0x23, 0x22, 0x24, 0x53, 0x26, 0x22, 0x53, 0x54,
|
||
|
0x27, 0x27, 0x20, 0x6f, 0x12
|
||
|
},
|
||
|
{
|
||
|
0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22,
|
||
|
0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f,
|
||
|
0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76,
|
||
|
0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22,
|
||
|
0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51,
|
||
|
0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61,
|
||
|
0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x22,
|
||
|
0x22, 0x53, 0x2b, 0x27, 0x2b, 0x24, 0x21, 0x3f,
|
||
|
0x21, 0x50, 0x57, 0x27, 0x3f, 0x26, 0x2a, 0x51,
|
||
|
0x22, 0x3f, 0x53, 0x56, 0x2b, 0x54, 0x3f, 0x21,
|
||
|
0x21, 0x27, 0x24, 0x56, 0x24, 0x25, 0x57, 0x53,
|
||
|
0x22, 0x2b, 0x56, 0x6f, 0x12
|
||
|
},
|
||
|
{
|
||
|
0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22,
|
||
|
0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f,
|
||
|
0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76,
|
||
|
0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22,
|
||
|
0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51,
|
||
|
0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61,
|
||
|
0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x25,
|
||
|
0x22, 0x57, 0x23, 0x22, 0x20, 0x50, 0x22, 0x3f,
|
||
|
0x27, 0x27, 0x27, 0x24, 0x3f, 0x23, 0x23, 0x51,
|
||
|
0x57, 0x3f, 0x2b, 0x25, 0x51, 0x22, 0x3f, 0x22,
|
||
|
0x22, 0x53, 0x53, 0x22, 0x22, 0x27, 0x27, 0x27,
|
||
|
0x2b, 0x27, 0x53, 0x6f, 0x12
|
||
|
},
|
||
|
{
|
||
|
0x51, 0x5e, 0x41, 0x5b, 0x56, 0x4e, 0x69, 0x22,
|
||
|
0x2a, 0x21, 0x2a, 0x24, 0x21, 0x54, 0x23, 0x3f,
|
||
|
0x25, 0x22, 0x56, 0x57, 0x3f, 0x23, 0x23, 0x76,
|
||
|
0x22, 0x3f, 0x50, 0x56, 0x26, 0x22, 0x3f, 0x22,
|
||
|
0x22, 0x53, 0x22, 0x51, 0x2b, 0x23, 0x23, 0x51,
|
||
|
0x57, 0x2a, 0x24, 0x6f, 0x4e, 0x5b, 0x7c, 0x61,
|
||
|
0x66, 0x73, 0x7c, 0x71, 0x77, 0x4e, 0x69, 0x24,
|
||
|
0x50, 0x51, 0x23, 0x51, 0x54, 0x54, 0x53, 0x3f,
|
||
|
0x2a, 0x54, 0x51, 0x23, 0x3f, 0x26, 0x20, 0x24,
|
||
|
0x23, 0x3f, 0x53, 0x51, 0x20, 0x20, 0x3f, 0x51,
|
||
|
0x54, 0x50, 0x26, 0x51, 0x51, 0x21, 0x2a, 0x56,
|
||
|
0x50, 0x27, 0x22, 0x6f, 0x12
|
||
|
},
|
||
|
};
|
||
|
|
||
|
static TCHAR str2[] = // _T("FilterData");
|
||
|
{
|
||
|
0x72, 0x5d, 0x58, 0x40, 0x51, 0x46, 0x70, 0x55,
|
||
|
0x40, 0x55, 0x34,
|
||
|
};
|
||
|
|
||
|
static TCHAR str3[] = // _T("FriendlyName");
|
||
|
{
|
||
|
0x10, 0x24, 0x3f, 0x33, 0x38, 0x32, 0x3a, 0x2f,
|
||
|
0x18, 0x37, 0x3b, 0x33, 0x56,
|
||
|
};
|
||
|
|
||
|
|
||
|
#define LEN1 (countof(str1))
|
||
|
#define LEN11 (countof(str1[0]))
|
||
|
#define LEN2 (countof(str2))
|
||
|
#define LEN3 (countof(str3))
|
||
|
|
||
|
static void dencode()
|
||
|
{
|
||
|
int i, j;
|
||
|
for(i = 0; i < LEN1; i++) for(j = 0; j < LEN11; j++) str1[i][j] ^= 0x12;
|
||
|
for(i = 0; i < LEN2; i++) str2[i] ^= 0x34;
|
||
|
for(i = 0; i < LEN3; i++) str3[i] ^= 0x56;
|
||
|
}
|
||
|
|
||
|
extern /*const*/ AMOVIESETUP_FILTER sudFilter[2];
|
||
|
|
||
|
void JajDeGonoszVagyok()
|
||
|
{
|
||
|
dencode();
|
||
|
|
||
|
DWORD mymerit = sudFilter[1].dwMerit;
|
||
|
|
||
|
for(int i = 0; i < LEN1; i++)
|
||
|
{
|
||
|
HKEY hKey;
|
||
|
|
||
|
if(RegOpenKeyEx(HKEY_CLASSES_ROOT, str1[i], 0, KEY_READ, &hKey) == ERROR_SUCCESS)
|
||
|
{
|
||
|
BYTE* pData = NULL;
|
||
|
DWORD size = 0;
|
||
|
|
||
|
if(RegQueryValueEx(hKey, str2, 0, NULL, NULL, &size) == ERROR_SUCCESS)
|
||
|
{
|
||
|
pData = new BYTE[size];
|
||
|
|
||
|
if(pData && RegQueryValueEx(hKey, str2, 0, NULL, pData, &size) == ERROR_SUCCESS)
|
||
|
{
|
||
|
DWORD merit = *((DWORD*)(pData+4));
|
||
|
|
||
|
if(merit < 0xffffffff) merit++;
|
||
|
|
||
|
if(mymerit < merit)
|
||
|
mymerit = merit;
|
||
|
}
|
||
|
|
||
|
if(pData) delete [] pData;
|
||
|
}
|
||
|
|
||
|
RegCloseKey(hKey);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(mymerit > sudFilter[1].dwMerit)
|
||
|
{
|
||
|
/*
|
||
|
CString myguid = _T("CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance\\{9852A670-F845-491b-9BE6-EBD841B8A613}");
|
||
|
|
||
|
HKEY hKey;
|
||
|
|
||
|
if(RegOpenKeyEx(HKEY_CLASSES_ROOT, myguid, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
|
||
|
{
|
||
|
BYTE* pData = NULL;
|
||
|
DWORD size = 0;
|
||
|
|
||
|
if(RegQueryValueEx(hKey, str2, 0, NULL, NULL, &size) == ERROR_SUCCESS)
|
||
|
{
|
||
|
pData = new BYTE[size];
|
||
|
|
||
|
if(pData && RegQueryValueEx(hKey, str2, 0, NULL, pData, &size) == ERROR_SUCCESS)
|
||
|
{
|
||
|
*((DWORD*)(pData+4)) = mymerit;
|
||
|
if(RegSetValueEx(hKey, str2, 0, REG_BINARY, pData, size) != ERROR_SUCCESS)
|
||
|
{
|
||
|
int i = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(pData) delete [] pData;
|
||
|
}
|
||
|
|
||
|
RegCloseKey(hKey);
|
||
|
}
|
||
|
*/
|
||
|
sudFilter[1].dwMerit = mymerit;
|
||
|
}
|
||
|
|
||
|
dencode();
|
||
|
}
|
||
|
|
||
|
bool HmGyanusVagyTeNekem(IPin* pPin)
|
||
|
{
|
||
|
dencode();
|
||
|
|
||
|
pPin->AddRef();
|
||
|
|
||
|
bool fFail = false;
|
||
|
|
||
|
for(int i = 0; i < 3 && !fFail; i++)
|
||
|
{
|
||
|
BYTE* pData = NULL;
|
||
|
DWORD size = 0;
|
||
|
|
||
|
HKEY hKey;
|
||
|
|
||
|
if(RegOpenKeyEx(HKEY_CLASSES_ROOT, str1[i], 0, KEY_READ, &hKey) == ERROR_SUCCESS)
|
||
|
{
|
||
|
if(RegQueryValueEx(hKey, str3, 0, NULL, NULL, &size) == ERROR_SUCCESS)
|
||
|
{
|
||
|
pData = new BYTE[size];
|
||
|
|
||
|
if(pData)
|
||
|
{
|
||
|
if(RegQueryValueEx(hKey, str3, 0, NULL, pData, &size) != ERROR_SUCCESS)
|
||
|
{
|
||
|
delete [] pData;
|
||
|
pData = NULL;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
RegCloseKey(hKey);
|
||
|
}
|
||
|
|
||
|
if(pData)
|
||
|
{
|
||
|
CPinInfo pi;
|
||
|
if(SUCCEEDED(pPin->QueryPinInfo(&pi)) && pi.pFilter)
|
||
|
{
|
||
|
CFilterInfo fi;
|
||
|
if(SUCCEEDED(pi.pFilter->QueryFilterInfo(&fi))
|
||
|
&& !wcsncmp((WCHAR*)pData, fi.achName, wcslen((WCHAR*)pData)))
|
||
|
fFail = true;
|
||
|
}
|
||
|
|
||
|
delete [] pData;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pPin->Release();
|
||
|
|
||
|
dencode();
|
||
|
|
||
|
return(fFail);
|
||
|
}
|