ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

msdvbnp.cpp
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS Network Provider for MPEG2 based networks
00004  * FILE:            dll/directx/msdvbnp/msdvbnp.cpp
00005  * PURPOSE:         COM Initialization
00006  *
00007  * PROGRAMMERS:     Johannes Anderwald (janderwald@reactos.org)
00008  */
00009 
00010 #include "precomp.h"
00011 
00012 #ifndef _MSC_VER
00013 const GUID KSCATEGORY_BDA_NETWORK_PROVIDER = {0x71985f4b, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
00014 #endif
00015 
00016 static INTERFACE_TABLE InterfaceTable[] =
00017 {
00018     {&CLSID_DVBTNetworkProvider, CNetworkProvider_fnConstructor, L"ReactOS DVBT Network Provider"},
00019     {NULL, NULL, NULL}
00020 };
00021 
00022 extern "C"
00023 BOOL
00024 WINAPI
00025 DllMain(
00026     HINSTANCE hInstDLL,
00027     DWORD fdwReason,
00028     LPVOID lpvReserved)
00029 {
00030     switch (fdwReason)
00031     {
00032         case DLL_PROCESS_ATTACH:
00033             CoInitialize(NULL);
00034 
00035 #ifdef MSDVBNP_TRACE
00036             OutputDebugStringW(L"MSDVBNP::DllMain()\n");
00037 #endif
00038 
00039             DisableThreadLibraryCalls(hInstDLL);
00040             break;
00041     default:
00042         break;
00043     }
00044 
00045     return TRUE;
00046 }
00047 
00048 
00049 extern "C"
00050 KSDDKAPI
00051 HRESULT
00052 WINAPI
00053 DllUnregisterServer(void)
00054 {
00055     ULONG Index = 0;
00056     LPOLESTR pStr;
00057     HRESULT hr = S_OK;
00058     HKEY hClass;
00059 
00060 
00061     hr = StringFromCLSID(KSCATEGORY_BDA_NETWORK_PROVIDER, &pStr);
00062     if (FAILED(hr))
00063         return hr;
00064 
00065     if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS)
00066     {
00067         CoTaskMemFree(pStr);
00068         return E_FAIL;
00069     }
00070 
00071     RegDeleteKeyW(hClass, pStr);
00072     CoTaskMemFree(pStr);
00073 
00074     do
00075     {
00076         hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
00077         if (FAILED(hr))
00078             break;
00079 
00080         RegDeleteKeyW(hClass, pStr);
00081         CoTaskMemFree(pStr);
00082         Index++;
00083     }while(InterfaceTable[Index].lpfnCI != 0);
00084 
00085     RegCloseKey(hClass);
00086     return hr;
00087 }
00088 
00089 VOID
00090 RegisterBDAComponent(
00091     HKEY hFilter,
00092     LPCWSTR ComponentClsid,
00093     LPCWSTR ComponentName)
00094 {
00095     HKEY hComp;
00096 
00097     // create network provider filter key
00098     if (RegCreateKeyExW(hFilter, ComponentClsid, 0, NULL, 0, KEY_WRITE, NULL, &hComp, NULL) == ERROR_SUCCESS)
00099     {
00100         // store class id
00101         RegSetValueExW(hComp, L"CLSID", 0, REG_SZ, (const BYTE*)ComponentClsid, (wcslen(ComponentClsid)+1) * sizeof(WCHAR));
00102         RegSetValueExW(hComp, L"FriendlyName", 0, REG_SZ, (const BYTE*)ComponentName, (wcslen(ComponentName)+1) * sizeof(WCHAR));
00103         RegCloseKey(hComp);
00104     }
00105 }
00106 
00107 extern "C"
00108 KSDDKAPI
00109 HRESULT
00110 WINAPI
00111 DllRegisterServer(void)
00112 {
00113     ULONG Index = 0;
00114     LPOLESTR pStr;
00115     HRESULT hr = S_OK;
00116     HKEY hClass, hKey, hSubKey, hProvider, hInstance, hFilter;
00117     static LPCWSTR ModuleName = L"msdvbnp.ax";
00118     static LPCWSTR ThreadingModel = L"Both";
00119 
00120     hr = StringFromCLSID(KSCATEGORY_BDA_NETWORK_PROVIDER, &pStr);
00121     if (FAILED(hr))
00122         return hr;
00123 
00124     if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS)
00125     {
00126         CoTaskMemFree(pStr);
00127         return E_FAIL;
00128     }
00129 
00130     if (RegCreateKeyExW(hClass, pStr, 0, NULL, 0, KEY_WRITE, NULL, &hProvider, NULL) != ERROR_SUCCESS)
00131     {
00132         RegCloseKey(hClass);
00133         CoTaskMemFree(pStr);
00134         return E_FAIL;
00135     }
00136 
00137     CoTaskMemFree(pStr);
00138 
00139     if (RegCreateKeyExW(hProvider, L"Instance", 0, NULL, 0, KEY_WRITE, NULL, &hInstance, NULL) != ERROR_SUCCESS)
00140     {
00141         RegCloseKey(hClass);
00142         return E_FAIL;
00143     }
00144     RegCloseKey(hProvider);
00145 
00146     /* open active movie filter category key */
00147     if (RegCreateKeyExW(hClass, L"{da4e3da0-d07d-11d0-bd50-00a0c911ce86}\\Instance", 0, NULL, 0, KEY_WRITE, NULL, &hFilter, NULL) != ERROR_SUCCESS)
00148     {
00149         RegCloseKey(hClass);
00150         RegCloseKey(hInstance);
00151         return E_FAIL;
00152     }
00153 
00154     RegisterBDAComponent(hFilter, L"{71985F4A-1CA1-11d3-9CC8-00C04F7971E0}", L"BDA Playback Filter");
00155     RegisterBDAComponent(hFilter, L"{71985F4B-1CA1-11D3-9CC8-00C04F7971E0}", L"BDA Network Providers");
00156     RegisterBDAComponent(hFilter, L"{71985F48-1CA1-11d3-9CC8-00C04F7971E0}", L"BDA Source Filter");
00157     RegisterBDAComponent(hFilter, L"{A2E3074F-6C3D-11D3-B653-00C04F79498E}", L"BDA Transport Information Renderers");
00158     RegisterBDAComponent(hFilter, L"{FD0A5AF4-B41D-11d2-9C95-00C04F7971E0}", L"BDA Receiver Component");
00159     RegCloseKey(hKey);
00160 
00161     do
00162     {
00163         hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
00164         if (FAILED(hr))
00165             break;
00166 
00167         if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS)
00168         {
00169             if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS)
00170             {
00171                 RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR));
00172                 RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR));
00173                 RegCloseKey(hSubKey);
00174             }
00175             RegCloseKey(hKey);
00176         }
00177 
00178         if (RegCreateKeyExW(hInstance, InterfaceTable[Index].ProviderName, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS)
00179         {
00180             //FIXME filterdata
00181             RegSetValueExW(hKey, L"FriendlyName", 0, REG_SZ, (const BYTE*)InterfaceTable[Index].ProviderName, (wcslen(InterfaceTable[Index].ProviderName) + 1) * sizeof(WCHAR));
00182             RegSetValueExW(hKey, L"CLSID", 0, REG_SZ, (const BYTE*)pStr, (wcslen(pStr)+1) * sizeof(WCHAR));
00183             RegCloseKey(hKey);
00184         }
00185 
00186 
00187 
00188 
00189         CoTaskMemFree(pStr);
00190         Index++;
00191     }while(InterfaceTable[Index].lpfnCI != 0);
00192 
00193     RegCloseKey(hClass);
00194     RegCloseKey(hInstance);
00195     return hr;
00196 }
00197 
00198 KSDDKAPI
00199 HRESULT
00200 WINAPI
00201 DllGetClassObject(
00202     REFCLSID rclsid,
00203     REFIID riid,
00204     LPVOID *ppv)
00205 {
00206     UINT i;
00207     HRESULT hres = E_OUTOFMEMORY;
00208     IClassFactory * pcf = NULL;
00209 
00210     if (!ppv)
00211         return E_INVALIDARG;
00212 
00213     *ppv = NULL;
00214 
00215     for (i = 0; InterfaceTable[i].riid; i++) 
00216     {
00217         if (IsEqualIID(*InterfaceTable[i].riid, rclsid)) 
00218         {
00219             pcf = CClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL);
00220             break;
00221         }
00222     }
00223 
00224     if (!pcf)
00225     {
00226         return CLASS_E_CLASSNOTAVAILABLE;
00227     }
00228 
00229     hres = pcf->QueryInterface(riid, ppv);
00230     pcf->Release();
00231 
00232     return hres;
00233 }
00234 
00235 KSDDKAPI
00236 HRESULT
00237 WINAPI
00238 DllCanUnloadNow(void)
00239 {
00240     return S_OK;
00241 }

Generated on Sun May 27 2012 04:21:53 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.