Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

439 lines
14 KiB

/*++
Copyright (c) 2002 Microsoft Corporation
Module Name:
EncDec.cpp
Abstract:
This module contains Encrypter/Decrypter filter
registration data and entry points
Author:
John Bradstreet (johnbrad)
Revision History:
07-Mar-2002 created
--*/
#define INITGUID_FOR_ENCDEC // cause CLSIDs to get linked in...
#include "EncDecAll.h"
#include "ETFilter.h" // encrypter-tagger filter
#include "ETFiltProps.h" // encrypter-tagger property pages
#include "DTFilter.h" // decrypter-tagger filter
#include "DTFiltProps.h" // decrypter-tagger property pages
#include "XDSCodec.h" // XDS Codec filter
#include "XDSCodecProps.h" // XDS Codec property pages
#include "RegKey.h" // add in the Registry code
#include "uuids.h" // CLSID_ActiveMovieCategories
//#include "TvRatings_i.c" // CLSID_XDSToRat and IID_IXDSToRat (TODO: remove when move)
//#include "EncDec_i.c" // CLSID_XDSCodec, ETFilter, DTFilter, and IID's of same
#include "DRMSecure.h" // to get SID_DRM... defined into the EncDec.dll
#ifdef EHOME_WMI_INSTRUMENTATION
#include <dxmperf.h>
#endif
// I'm not sure where tehse end up bing displayed
#define CLSID_CPCAFiltersCategory_NAME L"BDA CP/CA Filters"
#define ETFILTER_DISPLAY_NAME L"Encrypt/Tag"
#define ETFILTER_ENC_PROPPAGE_NAME L"Encrypt"
#define ETFILTER_TAG_PROPPAGE_NAME L"Tags"
#define DTFILTER_DISPLAY_NAME L"Decrypt/Tag"
#define DTFILTER_DEC_PROPPAGE_NAME L"Decrypt"
#define DTFILTER_TAG_PROPPAGE_NAME L"Tags"
#define XDSCODEC_DISPLAY_NAME L"XDS Codec"
#define XDSCODEC_PROPPAGE_NAME L"Properties"
#define XDSCODEC_TAG_PROPPAGE_NAME L"Tags"
// -----------------------------
// registration templates (DShow's version of CoClasses)
static WCHAR g_wszCategory[] = CLSID_CPCAFiltersCategory_NAME;
#define USE_CATEGORIES
CFactoryTemplate
g_Templates[] = {
// ========================================================================
// Encypter-Tagger Filter
// code in ..\ETFilter
{ ETFILTER_DISPLAY_NAME, // display name
& CLSID_ETFilter, // CLSID
CETFilter::CreateInstance, // called for each filter created
CETFilter::InitInstance, // called once on DLL created
& g_sudETFilter
},
// Encrypter-Tagger property page
{
ETFILTER_ENC_PROPPAGE_NAME, // display name
& CLSID_ETFilterEncProperties, // CLSID
CETFilterEncProperties::CreateInstance,
NULL, //
NULL // not dshow related
},
// Encrypter-Tagger property page
{
ETFILTER_TAG_PROPPAGE_NAME, // display name
& CLSID_ETFilterTagProperties, // CLSID
CETFilterTagProperties::CreateInstance,
NULL, //
NULL // not dshow related
},
// ========================================================================
// Decypter-Tagger Filter
// code in ..\DTFilter
{ DTFILTER_DISPLAY_NAME, // display name
& CLSID_DTFilter, // CLSID
CDTFilter::CreateInstance, // CreateInstance method
CDTFilter::InitInstance, // called once on DLL created
& g_sudDTFilter
},
// Decrypter-Tagger property page
{
DTFILTER_DEC_PROPPAGE_NAME, // display name
& CLSID_DTFilterEncProperties, // CLSID
CDTFilterEncProperties::CreateInstance,
NULL, //
NULL // not dshow related
},
// Decrypter-Tagger property page
{
DTFILTER_TAG_PROPPAGE_NAME, // display name
& CLSID_DTFilterTagProperties, // CLSID
CDTFilterTagProperties::CreateInstance,
NULL, //
NULL // not dshow related
},
// ========================================================================
// XDS Codec Filter
// code in ..\XDSCodec
{ XDSCODEC_DISPLAY_NAME, // display name
& CLSID_XDSCodec, // CLSID
CXDSCodec::CreateInstance, // CreateInstance method
NULL,
& g_sudXDSCodec
},
// Decrypter-Tagger property page
{
XDSCODEC_PROPPAGE_NAME, // display name
& CLSID_XDSCodecProperties, // CLSID
CXDSCodecProperties::CreateInstance,
NULL, //
NULL // not dshow related
},
// Decrypter-Tagger property page
{
XDSCODEC_TAG_PROPPAGE_NAME, // display name
& CLSID_XDSCodecTagProperties, // CLSID
CXDSCodecTagProperties::CreateInstance,
NULL, //
NULL // not dshow related
}
}; // end of g_Templates
int g_cTemplates = NUMELMS(g_Templates);
REGFILTER2 rf2CACPins =
{
1, // version
MERIT_DO_NOT_USE, // merit
0, // number of pins
NULL
};
// -------------------------------------------------------------------
// Utility Methods
BOOL
IsXPe (
)
{
OSVERSIONINFOEX Version ;
BOOL r ;
Version.dwOSVersionInfoSize = sizeof OSVERSIONINFOEX ;
::GetVersionEx (reinterpret_cast <LPOSVERSIONINFO> (& Version)) ;
r = ((Version.wSuiteMask & VER_SUITE_EMBEDDEDNT) ? TRUE : FALSE) ;
return r ;
}
BOOL
CheckOS ()
{
BOOL r ;
#ifdef XPE_ONLY
#pragma message("XPe bits only")
r = ::IsXPe () ;
#else
r = TRUE ;
#endif
return r ;
}
// -------------------------------------------------------------------
//
// DllRegisterSever
//
// Handle the registration of this filter
//
STDAPI DllRegisterServer()
{
HRESULT hr = S_OK;
CComPtr<IFilterMapper2> spFm2;
if (!::CheckOS ()) {
return E_UNEXPECTED ;
}
hr = AMovieDllRegisterServer2 (TRUE);
if(FAILED(hr))
return hr;
#ifdef USE_CATEGORIES
hr = CoCreateInstance( CLSID_FilterMapper2,
NULL,
CLSCTX_INPROC_SERVER,
IID_IFilterMapper2,
(void **)&spFm2
);
if(FAILED(hr))
return hr;
hr = spFm2->CreateCategory(CLSID_CPCAFiltersCategory,
MERIT_NORMAL,
g_wszCategory
);
if( FAILED(hr) )
return hr;
hr = spFm2->RegisterFilter(
CLSID_ETFilter,
ETFILTER_DISPLAY_NAME, // name shown to the user
0, // device moniker
&CLSID_CPCAFiltersCategory,
ETFILTER_DISPLAY_NAME, // unique instance name
&rf2CACPins
);
if( FAILED(hr) )
return hr;
hr = spFm2->RegisterFilter(
CLSID_DTFilter,
DTFILTER_DISPLAY_NAME, // name shown to the user
0, // device moniker
&CLSID_CPCAFiltersCategory,
DTFILTER_DISPLAY_NAME, // unique instance name
&rf2CACPins
);
if( FAILED(hr) )
return hr;
hr = spFm2->RegisterFilter(
CLSID_XDSCodec,
XDSCODEC_DISPLAY_NAME, // name shown to the user
0, // device moniker
&CLSID_CPCAFiltersCategory,
XDSCODEC_DISPLAY_NAME, // unique instance name
&rf2CACPins
);
if( FAILED(hr) )
return hr;
// now remove them from the DSHOW category
hr = spFm2->UnregisterFilter(
&CLSID_LegacyAmFilterCategory,
NULL, //ETFILTER_DISPLAY_NAME, // name shown to the user
CLSID_ETFilter
);
hr = spFm2->UnregisterFilter(
&CLSID_LegacyAmFilterCategory,
NULL, //DTFILTER_DISPLAY_NAME, // name shown to the user
CLSID_DTFilter
);
hr = spFm2->UnregisterFilter(
&CLSID_LegacyAmFilterCategory,
NULL, //XDSCODEC_DISPLAY_NAME, // name shown to the user
CLSID_XDSCodec
);
// ignore errors in above Unregister calls (is this wise?)
hr = S_OK;
#endif
DWORD dwCSFlags = DEF_CSFLAGS_INITVAL;
#ifdef SUPPORT_REGISTRY_KEY_TO_TURN_OFF_CS
#ifdef REGISTRY_KEY_DEFAULT_IS_CS_OFF
dwCSFlags = DEF_CS_DEBUG_DOGFOOD_ENC_VAL; // 0x0
#else
dwCSFlags = DEF_CS_DEBUG_DRM_ENC_VAL; // 0x1
#endif
#ifdef DREGISTRY_KEY_DEFAULT_IS_TRUST_ANY_SERVER
dwCSFlags |= DEF_CS_DONT_AUTHENTICATE_SERVER; // 0x00
#else
dwCSFlags |= DEF_CS_DO_AUTHENTICATE_SERVER; // 0x10
#endif
#endif
DWORD dwRatFlag = DEF_CSFLAGS_INITVAL; // INITVAL means don't write the flags
#ifdef SUPPORT_REGISTRY_KEY_TO_TURN_OFF_RATINGS
#ifdef REGISTRY_KEY_DEFAULT_IS_RATINGS_OFF
dwRatFlag = DEF_DONT_DO_RATINGS_BLOCK; // 0
#else
dwRatFlag = DEF_DO_RATINGS_BLOCK; // 1
#endif
#endif
// what's currently out there...
DWORD dwCSFlags_Curr = DEF_CSFLAGS_INITVAL;
DWORD dwRatFlag_Curr = DEF_CSFLAGS_INITVAL;
hr = Get_EncDec_RegEntries(NULL, 0, NULL, &dwCSFlags_Curr, &dwRatFlag_Curr);
// if not the default values, then overwrite them...
if(dwCSFlags_Curr == DEF_CSFLAGS_INITVAL &&
dwCSFlags != DEF_CSFLAGS_INITVAL)
Set_EncDec_RegEntries(NULL, 0, NULL, dwCSFlags, DEF_CSFLAGS_INITVAL);
if(dwRatFlag_Curr == DEF_CSFLAGS_INITVAL &&
dwRatFlag != DEF_CSFLAGS_INITVAL)
Set_EncDec_RegEntries(NULL, 0, NULL, DEF_CSFLAGS_INITVAL, dwRatFlag);
return hr;
}
//
// DllUnregsiterServer
//
STDAPI DllUnregisterServer()
{
HRESULT hr = S_OK;
if (!::CheckOS ()) {
return E_UNEXPECTED ;
}
#ifdef USE_CATEGORIES
CComPtr<IFilterMapper2> spFm2;
hr = CoCreateInstance( CLSID_FilterMapper2,
NULL,
CLSCTX_INPROC_SERVER,
IID_IFilterMapper2,
(void **)&spFm2
);
if(FAILED(hr))
return hr;
hr = spFm2->UnregisterFilter(
&CLSID_CPCAFiltersCategory,
ETFILTER_DISPLAY_NAME, // name shown to the user
CLSID_ETFilter
);
hr = spFm2->UnregisterFilter(
&CLSID_CPCAFiltersCategory,
DTFILTER_DISPLAY_NAME, // name shown to the user
CLSID_DTFilter
);
hr = spFm2->UnregisterFilter(
&CLSID_CPCAFiltersCategory,
XDSCODEC_DISPLAY_NAME, // name shown to the user
CLSID_XDSCodec
);
// ignore the return value here.. don't care if it fails or not (I think!)
#endif
Remove_EncDec_RegEntries(); // do I really want to remove the KID?
return AMovieDllRegisterServer2 (FALSE);
}
// ============================================================================
// perf-related follows (largely stolen from quartz.cpp)
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, ULONG ulReason, LPVOID pv);
BOOL
WINAPI
DllMain (
HINSTANCE hInstance,
ULONG ulReason,
LPVOID pv
)
{
switch (ulReason)
{
case DLL_PROCESS_ATTACH :
// EncDecPerfInit () ;
#ifdef EHOME_WMI_INSTRUMENTATION
PERFLOG_LOGGING_PARAMS Params;
Params.ControlGuid = GUID_DSHOW_CTL;
Params.OnStateChanged = NULL;
Params.NumberOfTraceGuids = 1;
Params.TraceGuids[0].Guid = &GUID_STREAMTRACE;
PerflogInitIfEnabled( hInstance, &Params );
#endif
break;
case DLL_PROCESS_DETACH:
// EncDecPerfUninit () ;
#ifdef EHOME_WMI_INSTRUMENTATION
PerflogShutdown();
#endif
break;
}
return DllEntryPoint (
hInstance,
ulReason,
pv
) ;
}