diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild index 80401c1db46..58a65efc7bc 100644 --- a/reactos/baseaddress.rbuild +++ b/reactos/baseaddress.rbuild @@ -24,6 +24,7 @@ + @@ -32,6 +33,7 @@ + diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index a58e5c1c6c2..f16a96ed4ce 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -151,6 +151,7 @@ dll\cpl\timedate\timedate.cpl 1 ;dll\cpl\usrmgr\usrmgr.cpl 1 dll\directx\amstream\amstream.dll 1 +dll\directx\bdaplgin\bdaplgin.ax 1 dll\directx\dinput\dinput.dll 1 dll\directx\dinput8\dinput8.dll 1 dll\directx\dmusic\dmusic.dll 1 @@ -164,6 +165,8 @@ dll\directx\devenum\devenum.dll 1 dll\directx\ksproxy\ksproxy.ax 1 dll\directx\ksuser\ksuser.dll 1 dll\directx\msdmo\msdmo.dll 1 +dll\directx\msdvbnp\msdvbnp.ax 1 +dll\directx\msvidctl\msvidctl.dll 1 dll\directx\quartz\quartz.dll 1 dll\directx\qedit\qedit.dll 1 dll\directx\wine\d3d8\d3d8.dll 1 diff --git a/reactos/dll/directx/bdaplgin/bdaplgin.cpp b/reactos/dll/directx/bdaplgin/bdaplgin.cpp index 39ddb8a2ccb..bc15f3110e9 100644 --- a/reactos/dll/directx/bdaplgin/bdaplgin.cpp +++ b/reactos/dll/directx/bdaplgin/bdaplgin.cpp @@ -52,7 +52,27 @@ HRESULT WINAPI DllUnregisterServer(void) { - return S_OK; + ULONG Index = 0; + LPOLESTR pStr; + HRESULT hr = S_OK; + HKEY hClass; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS) + return E_FAIL; + + do + { + hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr); + if (FAILED(hr)) + break; + + RegDeleteKeyW(hClass, pStr); + CoTaskMemFree(pStr); + Index++; + }while(InterfaceTable[Index].lpfnCI != 0); + + RegCloseKey(hClass); + return hr; } extern "C" @@ -61,7 +81,39 @@ HRESULT WINAPI DllRegisterServer(void) { - return S_OK; + ULONG Index = 0; + LPOLESTR pStr; + HRESULT hr = S_OK; + HKEY hClass, hKey, hSubKey; + static LPCWSTR ModuleName = L"bdaplgin.ax"; + static LPCWSTR ThreadingModel = L"Both"; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS) + return E_FAIL; + + do + { + hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr); + if (FAILED(hr)) + break; + + if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS) + { + if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS) + { + RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR)); + RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR)); + RegCloseKey(hSubKey); + } + RegCloseKey(hKey); + } + + CoTaskMemFree(pStr); + Index++; + }while(InterfaceTable[Index].lpfnCI != 0); + + RegCloseKey(hClass); + return hr; } KSDDKAPI diff --git a/reactos/dll/directx/directx.rbuild b/reactos/dll/directx/directx.rbuild index 78508ecc99f..d953456790b 100644 --- a/reactos/dll/directx/directx.rbuild +++ b/reactos/dll/directx/directx.rbuild @@ -43,6 +43,12 @@ + + + + + + diff --git a/reactos/dll/directx/ksproxy/ksproxy.cpp b/reactos/dll/directx/ksproxy/ksproxy.cpp index f1e17c96922..7baa7e30496 100644 --- a/reactos/dll/directx/ksproxy/ksproxy.cpp +++ b/reactos/dll/directx/ksproxy/ksproxy.cpp @@ -343,7 +343,27 @@ HRESULT WINAPI DllUnregisterServer(void) { - return S_OK; + ULONG Index = 0; + LPOLESTR pStr; + HRESULT hr = S_OK; + HKEY hClass; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS) + return E_FAIL; + + do + { + hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr); + if (FAILED(hr)) + break; + + RegDeleteKeyW(hClass, pStr); + CoTaskMemFree(pStr); + Index++; + }while(InterfaceTable[Index].lpfnCI != 0); + + RegCloseKey(hClass); + return hr; } extern "C" @@ -352,7 +372,39 @@ HRESULT WINAPI DllRegisterServer(void) { - return S_OK; + ULONG Index = 0; + LPOLESTR pStr; + HRESULT hr = S_OK; + HKEY hClass, hKey, hSubKey; + static LPCWSTR ModuleName = L"ksproxy.ax"; + static LPCWSTR ThreadingModel = L"Both"; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS) + return E_FAIL; + + do + { + hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr); + if (FAILED(hr)) + break; + + if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS) + { + if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS) + { + RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR)); + RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR)); + RegCloseKey(hSubKey); + } + RegCloseKey(hKey); + } + + CoTaskMemFree(pStr); + Index++; + }while(InterfaceTable[Index].lpfnCI != 0); + + RegCloseKey(hClass); + return hr; } KSDDKAPI diff --git a/reactos/dll/directx/msdvbnp/msdvbnp.cpp b/reactos/dll/directx/msdvbnp/msdvbnp.cpp index 2b80a7717bc..2da8108bdcf 100644 --- a/reactos/dll/directx/msdvbnp/msdvbnp.cpp +++ b/reactos/dll/directx/msdvbnp/msdvbnp.cpp @@ -48,7 +48,27 @@ HRESULT WINAPI DllUnregisterServer(void) { - return S_OK; + ULONG Index = 0; + LPOLESTR pStr; + HRESULT hr = S_OK; + HKEY hClass; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS) + return E_FAIL; + + do + { + hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr); + if (FAILED(hr)) + break; + + RegDeleteKeyW(hClass, pStr); + CoTaskMemFree(pStr); + Index++; + }while(InterfaceTable[Index].lpfnCI != 0); + + RegCloseKey(hClass); + return hr; } extern "C" @@ -57,7 +77,39 @@ HRESULT WINAPI DllRegisterServer(void) { - return S_OK; + ULONG Index = 0; + LPOLESTR pStr; + HRESULT hr = S_OK; + HKEY hClass, hKey, hSubKey; + static LPCWSTR ModuleName = L"msdvbnp.ax"; + static LPCWSTR ThreadingModel = L"Both"; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS) + return E_FAIL; + + do + { + hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr); + if (FAILED(hr)) + break; + + if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS) + { + if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS) + { + RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR)); + RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR)); + RegCloseKey(hSubKey); + } + RegCloseKey(hKey); + } + + CoTaskMemFree(pStr); + Index++; + }while(InterfaceTable[Index].lpfnCI != 0); + + RegCloseKey(hClass); + return hr; } KSDDKAPI diff --git a/reactos/dll/directx/msdvbnp/scanningtuner.cpp b/reactos/dll/directx/msdvbnp/scanningtuner.cpp index 76665f66a28..8c2d90ef1c4 100644 --- a/reactos/dll/directx/msdvbnp/scanningtuner.cpp +++ b/reactos/dll/directx/msdvbnp/scanningtuner.cpp @@ -287,7 +287,7 @@ CScanningTunner::performDVBTTune( IDVBTuneRequest * pDVBTRequest, IDVBTLocator *pDVBTLocator) { - HRESULT hr; + HRESULT hr = S_OK; ULONG Index; IBDA_Topology *pTopo; IUnknown *pNode; diff --git a/reactos/dll/directx/msvidctl/msvidctl.cpp b/reactos/dll/directx/msvidctl/msvidctl.cpp index b086e59d580..57d6ada3882 100644 --- a/reactos/dll/directx/msvidctl/msvidctl.cpp +++ b/reactos/dll/directx/msvidctl/msvidctl.cpp @@ -48,7 +48,27 @@ HRESULT WINAPI DllUnregisterServer(void) { - return S_OK; + ULONG Index = 0; + LPOLESTR pStr; + HRESULT hr = S_OK; + HKEY hClass; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS) + return E_FAIL; + + do + { + hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr); + if (FAILED(hr)) + break; + + RegDeleteKeyW(hClass, pStr); + CoTaskMemFree(pStr); + Index++; + }while(InterfaceTable[Index].lpfnCI != 0); + + RegCloseKey(hClass); + return hr; } extern "C" @@ -57,7 +77,39 @@ HRESULT WINAPI DllRegisterServer(void) { - return S_OK; + ULONG Index = 0; + LPOLESTR pStr; + HRESULT hr = S_OK; + HKEY hClass, hKey, hSubKey; + static LPCWSTR ModuleName = L"msvidctl.ax"; + static LPCWSTR ThreadingModel = L"Both"; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS) + return E_FAIL; + + do + { + hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr); + if (FAILED(hr)) + break; + + if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS) + { + if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS) + { + RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR)); + RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR)); + RegCloseKey(hSubKey); + } + RegCloseKey(hKey); + } + + CoTaskMemFree(pStr); + Index++; + }while(InterfaceTable[Index].lpfnCI != 0); + + RegCloseKey(hClass); + return hr; } KSDDKAPI