2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Network Provider for MPEG2 based networks
4 * FILE: dll/directx/msdvbnp/msdvbnp.cpp
5 * PURPOSE: COM Initialization
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
13 const GUID KSCATEGORY_BDA_NETWORK_PROVIDER
= {0x71985f4b, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
16 static INTERFACE_TABLE InterfaceTable
[] =
18 {&CLSID_DVBTNetworkProvider
, CNetworkProvider_fnConstructor
, L
"ReactOS DVBT Network Provider"},
32 case DLL_PROCESS_ATTACH
:
36 OutputDebugStringW(L
"MSDVBNP::DllMain()\n");
39 DisableThreadLibraryCalls(hInstDLL
);
53 DllUnregisterServer(void)
61 hr
= StringFromCLSID(KSCATEGORY_BDA_NETWORK_PROVIDER
, &pStr
);
65 if (RegOpenKeyExW(HKEY_CLASSES_ROOT
, L
"CLSID", 0, KEY_SET_VALUE
, &hClass
) != ERROR_SUCCESS
)
71 RegDeleteKeyW(hClass
, pStr
);
76 hr
= StringFromCLSID(*InterfaceTable
[Index
].riid
, &pStr
);
80 RegDeleteKeyW(hClass
, pStr
);
83 }while(InterfaceTable
[Index
].lpfnCI
!= 0);
92 LPCWSTR ComponentClsid
,
93 LPCWSTR ComponentName
)
97 // create network provider filter key
98 if (RegCreateKeyExW(hFilter
, ComponentClsid
, 0, NULL
, 0, KEY_WRITE
, NULL
, &hComp
, NULL
) == ERROR_SUCCESS
)
101 RegSetValueExW(hComp
, L
"CLSID", 0, REG_SZ
, (const BYTE
*)ComponentClsid
, (wcslen(ComponentClsid
)+1) * sizeof(WCHAR
));
102 RegSetValueExW(hComp
, L
"FriendlyName", 0, REG_SZ
, (const BYTE
*)ComponentName
, (wcslen(ComponentName
)+1) * sizeof(WCHAR
));
111 DllRegisterServer(void)
116 HKEY hClass
, hKey
, hSubKey
, hProvider
, hInstance
, hFilter
;
117 static LPCWSTR ModuleName
= L
"msdvbnp.ax";
118 static LPCWSTR ThreadingModel
= L
"Both";
120 hr
= StringFromCLSID(KSCATEGORY_BDA_NETWORK_PROVIDER
, &pStr
);
124 if (RegOpenKeyExW(HKEY_CLASSES_ROOT
, L
"CLSID", 0, KEY_WRITE
, &hClass
) != ERROR_SUCCESS
)
130 if (RegCreateKeyExW(hClass
, pStr
, 0, NULL
, 0, KEY_WRITE
, NULL
, &hProvider
, NULL
) != ERROR_SUCCESS
)
139 if (RegCreateKeyExW(hProvider
, L
"Instance", 0, NULL
, 0, KEY_WRITE
, NULL
, &hInstance
, NULL
) != ERROR_SUCCESS
)
144 RegCloseKey(hProvider
);
146 /* open active movie filter category key */
147 if (RegCreateKeyExW(hClass
, L
"{da4e3da0-d07d-11d0-bd50-00a0c911ce86}\\Instance", 0, NULL
, 0, KEY_WRITE
, NULL
, &hFilter
, NULL
) != ERROR_SUCCESS
)
150 RegCloseKey(hInstance
);
154 RegisterBDAComponent(hFilter
, L
"{71985F4A-1CA1-11d3-9CC8-00C04F7971E0}", L
"BDA Playback Filter");
155 RegisterBDAComponent(hFilter
, L
"{71985F4B-1CA1-11D3-9CC8-00C04F7971E0}", L
"BDA Network Providers");
156 RegisterBDAComponent(hFilter
, L
"{71985F48-1CA1-11d3-9CC8-00C04F7971E0}", L
"BDA Source Filter");
157 RegisterBDAComponent(hFilter
, L
"{A2E3074F-6C3D-11D3-B653-00C04F79498E}", L
"BDA Transport Information Renderers");
158 RegisterBDAComponent(hFilter
, L
"{FD0A5AF4-B41D-11d2-9C95-00C04F7971E0}", L
"BDA Receiver Component");
163 hr
= StringFromCLSID(*InterfaceTable
[Index
].riid
, &pStr
);
167 if (RegCreateKeyExW(hClass
, pStr
, 0, 0, 0, KEY_WRITE
, NULL
, &hKey
, 0) == ERROR_SUCCESS
)
169 if (RegCreateKeyExW(hKey
, L
"InprocServer32", 0, 0, 0, KEY_WRITE
, NULL
, &hSubKey
, 0) == ERROR_SUCCESS
)
171 RegSetValueExW(hSubKey
, 0, 0, REG_SZ
, (const BYTE
*)ModuleName
, (wcslen(ModuleName
) + 1) * sizeof(WCHAR
));
172 RegSetValueExW(hSubKey
, L
"ThreadingModel", 0, REG_SZ
, (const BYTE
*)ThreadingModel
, (wcslen(ThreadingModel
) + 1) * sizeof(WCHAR
));
173 RegCloseKey(hSubKey
);
178 if (RegCreateKeyExW(hInstance
, InterfaceTable
[Index
].ProviderName
, 0, 0, 0, KEY_WRITE
, NULL
, &hKey
, 0) == ERROR_SUCCESS
)
181 RegSetValueExW(hKey
, L
"FriendlyName", 0, REG_SZ
, (const BYTE
*)InterfaceTable
[Index
].ProviderName
, (wcslen(InterfaceTable
[Index
].ProviderName
) + 1) * sizeof(WCHAR
));
182 RegSetValueExW(hKey
, L
"CLSID", 0, REG_SZ
, (const BYTE
*)pStr
, (wcslen(pStr
)+1) * sizeof(WCHAR
));
191 }while(InterfaceTable
[Index
].lpfnCI
!= 0);
194 RegCloseKey(hInstance
);
207 HRESULT hres
= E_OUTOFMEMORY
;
208 IClassFactory
* pcf
= NULL
;
215 for (i
= 0; InterfaceTable
[i
].riid
; i
++)
217 if (IsEqualIID(*InterfaceTable
[i
].riid
, rclsid
))
219 pcf
= CClassFactory_fnConstructor(InterfaceTable
[i
].lpfnCI
, NULL
, NULL
);
226 return CLASS_E_CLASSNOTAVAILABLE
;
229 hres
= pcf
->QueryInterface(riid
, ppv
);
238 DllCanUnloadNow(void)