Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/regsvr.c | 236 ------------------------------------------- 1 file changed, 236 deletions(-)
diff --git a/dlls/quartz/regsvr.c b/dlls/quartz/regsvr.c index 196e0649d8..e5b3f2f329 100644 --- a/dlls/quartz/regsvr.c +++ b/dlls/quartz/regsvr.c @@ -61,21 +61,6 @@ struct regsvr_interface static HRESULT register_interfaces(struct regsvr_interface const *list); static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass -{ - CLSID const *clsid; /* NULL for end of list */ - LPCSTR name; /* can be NULL to omit */ - LPCSTR ips; /* can be NULL to omit */ - LPCSTR ips32; /* can be NULL to omit */ - LPCSTR ips32_tmodel; /* can be NULL to omit */ - LPCSTR progid; /* can be NULL to omit */ - LPCSTR viprogid; /* can be NULL to omit */ - LPCSTR progid_extra; /* can be NULL to omit */ -}; - -static HRESULT register_coclasses(struct regsvr_coclass const *list); -static HRESULT unregister_coclasses(struct regsvr_coclass const *list); - struct regsvr_mediatype_parsing { CLSID const *majortype; /* NULL for end of list */ @@ -137,23 +122,6 @@ static const WCHAR ps_clsid_keyname[] = { static const WCHAR ps_clsid32_keyname[] = { 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', 'i', 'd', '3', '2', 0 }; -static const WCHAR clsid_keyname[] = { - 'C', 'L', 'S', 'I', 'D', 0 }; -static const WCHAR curver_keyname[] = { - 'C', 'u', 'r', 'V', 'e', 'r', 0 }; -static const WCHAR ips_keyname[] = { - 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r', - 0 }; -static const WCHAR ips32_keyname[] = { - 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r', - '3', '2', 0 }; -static const WCHAR progid_keyname[] = { - 'P', 'r', 'o', 'g', 'I', 'D', 0 }; -static const WCHAR viprogid_keyname[] = { - 'V', 'e', 'r', 's', 'i', 'o', 'n', 'I', 'n', 'd', 'e', 'p', - 'e', 'n', 'd', 'e', 'n', 't', 'P', 'r', 'o', 'g', 'I', 'D', - 0 }; -static const char tmodel_valuename[] = "ThreadingModel"; static const WCHAR mediatype_name[] = { 'M', 'e', 'd', 'i', 'a', ' ', 'T', 'y', 'p', 'e', 0 }; static const WCHAR subtype_valuename[] = { @@ -169,11 +137,6 @@ static const WCHAR extensions_keyname[] = { static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid); static LONG register_key_defvalueW(HKEY base, WCHAR const *name, WCHAR const *value); -static LONG register_key_defvalueA(HKEY base, WCHAR const *name, - char const *value); -static LONG register_progid(WCHAR const *clsid, - char const *progid, char const *curver_progid, - char const *name, char const *extra);
/*********************************************************************** * register_interfaces @@ -269,126 +232,6 @@ error_return: return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; }
-/*********************************************************************** - * register_coclasses - */ -static HRESULT register_coclasses(struct regsvr_coclass const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY coclass_key; - - res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL); - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->clsid; ++list) { - WCHAR buf[39]; - HKEY clsid_key; - - StringFromGUID2(list->clsid, buf, 39); - res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_coclass_key; - - if (list->name) { - res = RegSetValueExA(clsid_key, NULL, 0, REG_SZ, (const BYTE*)list->name, - strlen(list->name) + 1); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - if (list->ips) { - res = register_key_defvalueA(clsid_key, ips_keyname, list->ips); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - if (list->ips32) { - HKEY ips32_key; - - res = RegCreateKeyExW(clsid_key, ips32_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, - &ips32_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - - res = RegSetValueExA(ips32_key, NULL, 0, REG_SZ, (const BYTE*)list->ips32, - lstrlenA(list->ips32) + 1); - if (res == ERROR_SUCCESS && list->ips32_tmodel) - res = RegSetValueExA(ips32_key, tmodel_valuename, 0, REG_SZ, - (const BYTE*)list->ips32_tmodel, - strlen(list->ips32_tmodel) + 1); - RegCloseKey(ips32_key); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - if (list->progid) { - res = register_key_defvalueA(clsid_key, progid_keyname, - list->progid); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - - res = register_progid(buf, list->progid, NULL, - list->name, list->progid_extra); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - if (list->viprogid) { - res = register_key_defvalueA(clsid_key, viprogid_keyname, - list->viprogid); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - - res = register_progid(buf, list->viprogid, list->progid, - list->name, list->progid_extra); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - error_close_clsid_key: - RegCloseKey(clsid_key); - } - -error_close_coclass_key: - RegCloseKey(coclass_key); -error_return: - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * unregister_coclasses - */ -static HRESULT unregister_coclasses(struct regsvr_coclass const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY coclass_key; - - res = RegOpenKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, - KEY_READ | KEY_WRITE, &coclass_key); - if (res == ERROR_FILE_NOT_FOUND) return S_OK; - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->clsid; ++list) { - WCHAR buf[39]; - - StringFromGUID2(list->clsid, buf, 39); - res = RegDeleteTreeW(coclass_key, buf); - if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; - if (res != ERROR_SUCCESS) goto error_close_coclass_key; - - if (list->progid) { - res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->progid); - if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; - if (res != ERROR_SUCCESS) goto error_close_coclass_key; - } - - if (list->viprogid) { - res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->viprogid); - if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; - if (res != ERROR_SUCCESS) goto error_close_coclass_key; - } - } - -error_close_coclass_key: - RegCloseKey(coclass_key); -error_return: - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - /*********************************************************************** * register_mediatypes_parsing */ @@ -704,81 +547,6 @@ static LONG register_key_defvalueW( return res; }
-/*********************************************************************** - * regsvr_key_defvalueA - */ -static LONG register_key_defvalueA( - HKEY base, - WCHAR const *name, - char const *value) -{ - LONG res; - HKEY key; - - res = RegCreateKeyExW(base, name, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &key, NULL); - if (res != ERROR_SUCCESS) return res; - res = RegSetValueExA(key, NULL, 0, REG_SZ, (const BYTE*)value, lstrlenA(value) + 1); - RegCloseKey(key); - return res; -} - -/*********************************************************************** - * regsvr_progid - */ -static LONG register_progid( - WCHAR const *clsid, - char const *progid, - char const *curver_progid, - char const *name, - char const *extra) -{ - LONG res; - HKEY progid_key; - - res = RegCreateKeyExA(HKEY_CLASSES_ROOT, progid, 0, - NULL, 0, KEY_READ | KEY_WRITE, NULL, - &progid_key, NULL); - if (res != ERROR_SUCCESS) return res; - - if (name) { - res = RegSetValueExA(progid_key, NULL, 0, REG_SZ, (const BYTE*)name, strlen(name) + 1); - if (res != ERROR_SUCCESS) goto error_close_progid_key; - } - - if (clsid) { - res = register_key_defvalueW(progid_key, clsid_keyname, clsid); - if (res != ERROR_SUCCESS) goto error_close_progid_key; - } - - if (curver_progid) { - res = register_key_defvalueA(progid_key, curver_keyname, - curver_progid); - if (res != ERROR_SUCCESS) goto error_close_progid_key; - } - - if (extra) { - HKEY extra_key; - - res = RegCreateKeyExA(progid_key, extra, 0, - NULL, 0, KEY_READ | KEY_WRITE, NULL, - &extra_key, NULL); - if (res == ERROR_SUCCESS) - RegCloseKey(extra_key); - } - -error_close_progid_key: - RegCloseKey(progid_key); - return res; -} - -/*********************************************************************** - * coclass list - */ -static struct regsvr_coclass const coclass_list[] = { - { NULL } /* list terminator */ -}; - /*********************************************************************** * interface list */ @@ -1088,8 +856,6 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n");
hr = QUARTZ_DllRegisterServer(); - if (SUCCEEDED(hr)) - hr = register_coclasses(coclass_list); if (SUCCEEDED(hr)) hr = register_interfaces(interface_list); if (SUCCEEDED(hr)) @@ -1111,8 +877,6 @@ HRESULT WINAPI DllUnregisterServer(void) TRACE("\n");
hr = unregister_filters(filter_list); - if (SUCCEEDED(hr)) - hr = unregister_coclasses(coclass_list); if (SUCCEEDED(hr)) hr = unregister_interfaces(interface_list); if (SUCCEEDED(hr))
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/regsvr.c | 173 ------------------------------------------- 1 file changed, 173 deletions(-)
diff --git a/dlls/quartz/regsvr.c b/dlls/quartz/regsvr.c index e5b3f2f329..839af311a6 100644 --- a/dlls/quartz/regsvr.c +++ b/dlls/quartz/regsvr.c @@ -45,22 +45,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(quartz); * DllUnregisterServer, which make all this worthwhile. */
-/*********************************************************************** - * interface for self-registering - */ -struct regsvr_interface -{ - IID const *iid; /* NULL for end of list */ - LPCSTR name; /* can be NULL to omit */ - IID const *base_iid; /* can be NULL to omit */ - int num_methods; /* can be <0 to omit */ - CLSID const *ps_clsid; /* can be NULL to omit */ - CLSID const *ps_clsid32; /* can be NULL to omit */ -}; - -static HRESULT register_interfaces(struct regsvr_interface const *list); -static HRESULT unregister_interfaces(struct regsvr_interface const *list); - struct regsvr_mediatype_parsing { CLSID const *majortype; /* NULL for end of list */ @@ -109,19 +93,6 @@ static HRESULT unregister_filters(struct regsvr_filter const *list); /*********************************************************************** * static string constants */ -static const WCHAR interface_keyname[] = { - 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e', 0 }; -static const WCHAR base_ifa_keyname[] = { - 'B', 'a', 's', 'e', 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', - 'e', 0 }; -static const WCHAR num_methods_keyname[] = { - 'N', 'u', 'm', 'M', 'e', 't', 'h', 'o', 'd', 's', 0 }; -static const WCHAR ps_clsid_keyname[] = { - 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', - 'i', 'd', 0 }; -static const WCHAR ps_clsid32_keyname[] = { - 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', - 'i', 'd', '3', '2', 0 }; static const WCHAR mediatype_name[] = { 'M', 'e', 'd', 'i', 'a', ' ', 'T', 'y', 'p', 'e', 0 }; static const WCHAR subtype_valuename[] = { @@ -131,107 +102,6 @@ static const WCHAR sourcefilter_valuename[] = { static const WCHAR extensions_keyname[] = { 'E', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', 0 };
-/*********************************************************************** - * static helper functions - */ -static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid); -static LONG register_key_defvalueW(HKEY base, WCHAR const *name, - WCHAR const *value); - -/*********************************************************************** - * register_interfaces - */ -static HRESULT register_interfaces(struct regsvr_interface const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY interface_key; - - res = RegCreateKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &interface_key, NULL); - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->iid; ++list) { - WCHAR buf[39]; - HKEY iid_key; - - StringFromGUID2(list->iid, buf, 39); - res = RegCreateKeyExW(interface_key, buf, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &iid_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_interface_key; - - if (list->name) { - res = RegSetValueExA(iid_key, NULL, 0, REG_SZ, (const BYTE*)list->name, - strlen(list->name) + 1); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - if (list->base_iid) { - res = register_key_guid(iid_key, base_ifa_keyname, list->base_iid); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - if (0 <= list->num_methods) { - static const WCHAR fmt[] = { '%', 'd', 0 }; - HKEY key; - - res = RegCreateKeyExW(iid_key, num_methods_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &key, NULL); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - - sprintfW(buf, fmt, list->num_methods); - res = RegSetValueExW(key, NULL, 0, REG_SZ, (const BYTE*)buf, - (lstrlenW(buf) + 1) * sizeof(WCHAR)); - RegCloseKey(key); - - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - if (list->ps_clsid) { - res = register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - if (list->ps_clsid32) { - res = register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - error_close_iid_key: - RegCloseKey(iid_key); - } - -error_close_interface_key: - RegCloseKey(interface_key); -error_return: - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * unregister_interfaces - */ -static HRESULT unregister_interfaces(struct regsvr_interface const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY interface_key; - - res = RegOpenKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, - KEY_READ | KEY_WRITE, &interface_key); - if (res == ERROR_FILE_NOT_FOUND) return S_OK; - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->iid; ++list) { - WCHAR buf[39]; - - StringFromGUID2(list->iid, buf, 39); - res = RegDeleteTreeW(interface_key, buf); - if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; - } - - RegCloseKey(interface_key); -error_return: - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - /*********************************************************************** * register_mediatypes_parsing */ @@ -516,45 +386,6 @@ static HRESULT unregister_filters(struct regsvr_filter const *list) return hr; }
-/*********************************************************************** - * regsvr_key_guid - */ -static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) -{ - WCHAR buf[39]; - - StringFromGUID2(guid, buf, 39); - return register_key_defvalueW(base, name, buf); -} - -/*********************************************************************** - * regsvr_key_defvalueW - */ -static LONG register_key_defvalueW( - HKEY base, - WCHAR const *name, - WCHAR const *value) -{ - LONG res; - HKEY key; - - res = RegCreateKeyExW(base, name, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &key, NULL); - if (res != ERROR_SUCCESS) return res; - res = RegSetValueExW(key, NULL, 0, REG_SZ, (const BYTE*)value, - (lstrlenW(value) + 1) * sizeof(WCHAR)); - RegCloseKey(key); - return res; -} - -/*********************************************************************** - * interface list - */ - -static struct regsvr_interface const interface_list[] = { - { NULL } /* list terminator */ -}; - /*********************************************************************** * mediatype list */ @@ -856,8 +687,6 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n");
hr = QUARTZ_DllRegisterServer(); - if (SUCCEEDED(hr)) - hr = register_interfaces(interface_list); if (SUCCEEDED(hr)) hr = register_mediatypes_parsing(mediatype_parsing_list); if (SUCCEEDED(hr)) @@ -877,8 +706,6 @@ HRESULT WINAPI DllUnregisterServer(void) TRACE("\n");
hr = unregister_filters(filter_list); - if (SUCCEEDED(hr)) - hr = unregister_interfaces(interface_list); if (SUCCEEDED(hr)) hr = unregister_mediatypes_parsing(mediatype_parsing_list); if (SUCCEEDED(hr))
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/main.c | 74 ++-------------------------- dlls/winegstreamer/rsrc.rc | 4 +- dlls/winegstreamer/winegstreamer.inf | 12 ----- dlls/winegstreamer/winegstreamer.rgs | 14 ++++++ 4 files changed, 21 insertions(+), 83 deletions(-) delete mode 100644 dlls/winegstreamer/winegstreamer.inf create mode 100644 dlls/winegstreamer/winegstreamer.rgs
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index 2a5dbd1455..fa0b7e6bd8 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -24,16 +24,11 @@
#include <gst/gst.h>
-#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "winreg.h" -#include "winerror.h" -#include "advpub.h" +#include "gst_private.h" +#include "rpcproxy.h" #include "wine/debug.h" - #include "wine/unicode.h" -#include "gst_private.h" + #include "initguid.h" #include "gst_guids.h"
@@ -308,65 +303,6 @@ BOOL init_gstreamer(void) return status; }
-#define INF_SET_ID(id) \ - do \ - { \ - static CHAR name[] = #id; \ - \ - pse[i].pszName = name; \ - clsids[i++] = &id; \ - } while (0) - -#define INF_SET_CLSID(clsid) INF_SET_ID(CLSID_ ## clsid) - -static HRESULT register_server(BOOL do_register) -{ - HRESULT hres; - HMODULE hAdvpack; - HRESULT (WINAPI *pRegInstall)(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable); - STRTABLEA strtable; - STRENTRYA pse[3]; - static CLSID const *clsids[3]; - unsigned int i = 0; - - static const WCHAR wszAdvpack[] = {'a','d','v','p','a','c','k','.','d','l','l',0}; - - TRACE("(%x)\n", do_register); - - INF_SET_CLSID(AsyncReader); - INF_SET_ID(MEDIATYPE_Stream); - INF_SET_ID(WINESUBTYPE_Gstreamer); - - for(i = 0; i < ARRAY_SIZE(pse); i++) { - pse[i].pszValue = HeapAlloc(GetProcessHeap(),0,39); - sprintf(pse[i].pszValue, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - clsids[i]->Data1, clsids[i]->Data2, clsids[i]->Data3, clsids[i]->Data4[0], - clsids[i]->Data4[1], clsids[i]->Data4[2], clsids[i]->Data4[3], clsids[i]->Data4[4], - clsids[i]->Data4[5], clsids[i]->Data4[6], clsids[i]->Data4[7]); - } - - strtable.cEntries = ARRAY_SIZE(pse); - strtable.pse = pse; - - hAdvpack = LoadLibraryW(wszAdvpack); - pRegInstall = (void *)GetProcAddress(hAdvpack, "RegInstall"); - - hres = pRegInstall(hInst, do_register ? "RegisterDll" : "UnregisterDll", &strtable); - - for(i = 0; i < ARRAY_SIZE(pse); i++) - HeapFree(GetProcessHeap(),0,pse[i].pszValue); - - if(FAILED(hres)) { - ERR("RegInstall failed: %08x\n", hres); - return hres; - } - - return hres; -} - -#undef INF_SET_CLSID -#undef INF_SET_ID - /*********************************************************************** * DllRegisterServer */ @@ -378,7 +314,7 @@ HRESULT WINAPI DllRegisterServer(void)
hr = AMovieDllRegisterServer2(TRUE); if (SUCCEEDED(hr)) - hr = register_server(TRUE); + hr = __wine_register_resources(hInst); return hr; }
@@ -393,6 +329,6 @@ HRESULT WINAPI DllUnregisterServer(void)
hr = AMovieDllRegisterServer2(FALSE); if (SUCCEEDED(hr)) - hr = register_server(FALSE); + hr = __wine_unregister_resources(hInst); return hr; } diff --git a/dlls/winegstreamer/rsrc.rc b/dlls/winegstreamer/rsrc.rc index e12ba77bf8..592bcb0113 100644 --- a/dlls/winegstreamer/rsrc.rc +++ b/dlls/winegstreamer/rsrc.rc @@ -24,5 +24,5 @@
#include "wine/wine_common_ver.rc"
-/* @makedep: winegstreamer.inf */ -REGINST REGINST winegstreamer.inf +/* @makedep: winegstreamer.rgs */ +1 WINE_REGISTRY winegstreamer.rgs diff --git a/dlls/winegstreamer/winegstreamer.inf b/dlls/winegstreamer/winegstreamer.inf deleted file mode 100644 index 64777553b7..0000000000 --- a/dlls/winegstreamer/winegstreamer.inf +++ /dev/null @@ -1,12 +0,0 @@ -[version] -Signature="$CHICAGO$" - -[RegisterDll] -AddReg=MediaParsing.Reg - -[UnregisterDll] -DelReg=MediaParsing.Reg - -[MediaParsing.Reg] -HKCR,"Media Type%MEDIATYPE_Stream%%WINESUBTYPE_Gstreamer%","0",,"0,1,00,0" -HKCR,"Media Type%MEDIATYPE_Stream%%WINESUBTYPE_Gstreamer%","Source Filter",,"%CLSID_AsyncReader%" diff --git a/dlls/winegstreamer/winegstreamer.rgs b/dlls/winegstreamer/winegstreamer.rgs new file mode 100644 index 0000000000..923ba673f8 --- /dev/null +++ b/dlls/winegstreamer/winegstreamer.rgs @@ -0,0 +1,14 @@ +HKCR +{ + NoRemove 'Media Type' + { + '{e436eb83-524f-11ce-9f53-0020af0ba770}' + { + ForceRemove '{ffffffff-128f-4dd1-ad22-becfa66ce7aa}' + { + val '0' = s '0,1,00,0' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + } + } +}
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/Makefile.in | 2 +- dlls/quartz/{version.rc => quartz.rc} | 3 + dlls/quartz/quartz.rgs | 82 +++++++ dlls/quartz/regsvr.c | 305 -------------------------- 4 files changed, 86 insertions(+), 306 deletions(-) rename dlls/quartz/{version.rc => quartz.rc} (95%) create mode 100644 dlls/quartz/quartz.rgs
diff --git a/dlls/quartz/Makefile.in b/dlls/quartz/Makefile.in index efd96dbb1c..4e5f18d20a 100644 --- a/dlls/quartz/Makefile.in +++ b/dlls/quartz/Makefile.in @@ -24,7 +24,7 @@ C_SRCS = \ vmr9.c \ waveparser.c
-RC_SRCS = version.rc +RC_SRCS = quartz.rc
IDL_SRCS = \ control_tlb.idl \ diff --git a/dlls/quartz/version.rc b/dlls/quartz/quartz.rc similarity index 95% rename from dlls/quartz/version.rc rename to dlls/quartz/quartz.rc index 8245cfbe0d..2355351274 100644 --- a/dlls/quartz/version.rc +++ b/dlls/quartz/quartz.rc @@ -25,3 +25,6 @@ #define WINE_EXTRAVALUES VALUE "OLESelfRegister",""
#include "wine/wine_common_ver.rc" + +/* @makedep: quartz.rgs */ +1 WINE_REGISTRY quartz.rgs diff --git a/dlls/quartz/quartz.rgs b/dlls/quartz/quartz.rgs new file mode 100644 index 0000000000..ac37db7baf --- /dev/null +++ b/dlls/quartz/quartz.rgs @@ -0,0 +1,82 @@ +HKCR +{ + NoRemove 'Media Type' + { + '{e436eb83-524f-11ce-9f53-0020af0ba770}' + { + '{7364696d-0000-0010-8000-00aa00389b71}' + { + val '0' = s '0,4,,52494646,8,4,,524d4944' + val '1' = s '0,4,,4d546864' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{73747874-0000-0010-8000-00aa00389b71}' + { + val '0' = s '0,4,,4c595249' + val '1' = s '0,4,,6c797269' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e06d8022-db46-11cf-b4d1-00805f6cbbea}' + { + val '0' = s '0,5,ffffffffc0,000001ba40' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb84-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '0,16,fffffffff100010001800001ffffffff,000001ba2100010001800001000001bb' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb85-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '0,4,,52494646,8,8,,43445841666D7420,36,20,FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF,646174610000000000FFFFFFFFFFFFFFFFFFFF00' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb86-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '0,4,,000001b3' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb87-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '0,2,ffe0,ffe0' + val '1' = s '0,10,ffffff00000080808080,494433000000000000' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb88-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '0,4,,52494646,8,4,,41564920' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb89-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '4,4,,6d646174' + val '1' = s '4,4,,6d6f6f76' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb8b-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '0,4,,52494646,8,4,,57415645' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb8c-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '0,4,,2e736e64' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + '{e436eb8d-524f-11ce-9f53-0020af0ba770}' + { + val '0' = s '0,4,,464f524d,8,4,,41494646' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + } + NoRemove Extensions + { + '.mp3' + { + val 'Media Type' = s '{e436eb83-524f-11ce-9f53-0020af0ba770}' + val 'Subtype' = s '{e436eb85-524f-11ce-9f53-0020af0ba770}' + val 'Source Filter' = s '{e436ebb5-524f-11ce-9f53-0020af0ba770}' + } + } + } +} diff --git a/dlls/quartz/regsvr.c b/dlls/quartz/regsvr.c index 839af311a6..7773caa947 100644 --- a/dlls/quartz/regsvr.c +++ b/dlls/quartz/regsvr.c @@ -45,23 +45,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(quartz); * DllUnregisterServer, which make all this worthwhile. */
-struct regsvr_mediatype_parsing -{ - CLSID const *majortype; /* NULL for end of list */ - CLSID const *subtype; - LPCSTR line[11]; /* NULL for end of list */ -}; - -static HRESULT register_mediatypes_parsing(struct regsvr_mediatype_parsing const *list); -static HRESULT unregister_mediatypes_parsing(struct regsvr_mediatype_parsing const *list); - -struct regsvr_mediatype_extension -{ - CLSID const *majortype; /* NULL for end of list */ - CLSID const *subtype; - LPCSTR extension; -}; - struct mediatype { CLSID const *majortype; /* NULL for end of list */ @@ -84,201 +67,6 @@ struct regsvr_filter struct pin pins[11]; };
-static HRESULT register_mediatypes_extension(struct regsvr_mediatype_extension const *list); -static HRESULT unregister_mediatypes_extension(struct regsvr_mediatype_extension const *list); - -static HRESULT register_filters(struct regsvr_filter const *list); -static HRESULT unregister_filters(struct regsvr_filter const *list); - -/*********************************************************************** - * static string constants - */ -static const WCHAR mediatype_name[] = { - 'M', 'e', 'd', 'i', 'a', ' ', 'T', 'y', 'p', 'e', 0 }; -static const WCHAR subtype_valuename[] = { - 'S', 'u', 'b', 't', 'y', 'p', 'e', 0 }; -static const WCHAR sourcefilter_valuename[] = { - 'S', 'o', 'u', 'r', 'c', 'e', ' ', 'F', 'i', 'l', 't', 'e', 'r', 0 }; -static const WCHAR extensions_keyname[] = { - 'E', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', 0 }; - -/*********************************************************************** - * register_mediatypes_parsing - */ -static HRESULT register_mediatypes_parsing(struct regsvr_mediatype_parsing const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY mediatype_key; - WCHAR buf[39]; - int i; - - res = RegCreateKeyExW(HKEY_CLASSES_ROOT, mediatype_name, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &mediatype_key, NULL); - if (res != ERROR_SUCCESS) return HRESULT_FROM_WIN32(res); - - for (; res == ERROR_SUCCESS && list->majortype; ++list) { - HKEY majortype_key = NULL; - HKEY subtype_key = NULL; - - StringFromGUID2(list->majortype, buf, 39); - res = RegCreateKeyExW(mediatype_key, buf, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &majortype_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_keys; - - StringFromGUID2(list->subtype, buf, 39); - res = RegCreateKeyExW(majortype_key, buf, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &subtype_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_keys; - - StringFromGUID2(&CLSID_AsyncReader, buf, 39); - res = RegSetValueExW(subtype_key, sourcefilter_valuename, 0, REG_SZ, (const BYTE*)buf, - (lstrlenW(buf) + 1) * sizeof(WCHAR)); - if (res != ERROR_SUCCESS) goto error_close_keys; - - for(i = 0; list->line[i]; i++) { - char buffer[3]; - wsprintfA(buffer, "%d", i); - res = RegSetValueExA(subtype_key, buffer, 0, REG_SZ, (const BYTE*)list->line[i], - lstrlenA(list->line[i])); - if (res != ERROR_SUCCESS) goto error_close_keys; - } - -error_close_keys: - if (majortype_key) - RegCloseKey(majortype_key); - if (subtype_key) - RegCloseKey(subtype_key); - } - - RegCloseKey(mediatype_key); - - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * register_mediatypes_extension - */ -static HRESULT register_mediatypes_extension(struct regsvr_mediatype_extension const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY mediatype_key; - HKEY extensions_root_key = NULL; - WCHAR buf[39]; - - res = RegCreateKeyExW(HKEY_CLASSES_ROOT, mediatype_name, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &mediatype_key, NULL); - if (res != ERROR_SUCCESS) return HRESULT_FROM_WIN32(res); - - res = RegCreateKeyExW(mediatype_key, extensions_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &extensions_root_key, NULL); - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->majortype; ++list) { - HKEY extension_key; - - res = RegCreateKeyExA(extensions_root_key, list->extension, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &extension_key, NULL); - if (res != ERROR_SUCCESS) break; - - StringFromGUID2(list->majortype, buf, 39); - res = RegSetValueExW(extension_key, mediatype_name, 0, REG_SZ, (const BYTE*)buf, - (lstrlenW(buf) + 1) * sizeof(WCHAR)); - if (res != ERROR_SUCCESS) goto error_close_key; - - StringFromGUID2(list->subtype, buf, 39); - res = RegSetValueExW(extension_key, subtype_valuename, 0, REG_SZ, (const BYTE*)buf, - (lstrlenW(buf) + 1) * sizeof(WCHAR)); - if (res != ERROR_SUCCESS) goto error_close_key; - - StringFromGUID2(&CLSID_AsyncReader, buf, 39); - res = RegSetValueExW(extension_key, sourcefilter_valuename, 0, REG_SZ, (const BYTE*)buf, - (lstrlenW(buf) + 1) * sizeof(WCHAR)); - if (res != ERROR_SUCCESS) goto error_close_key; - -error_close_key: - RegCloseKey(extension_key); - } - -error_return: - RegCloseKey(mediatype_key); - if (extensions_root_key) - RegCloseKey(extensions_root_key); - - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * unregister_mediatypes_parsing - */ -static HRESULT unregister_mediatypes_parsing(struct regsvr_mediatype_parsing const *list) -{ - LONG res; - HKEY mediatype_key; - HKEY majortype_key; - WCHAR buf[39]; - - res = RegOpenKeyExW(HKEY_CLASSES_ROOT, mediatype_name, 0, - KEY_READ | KEY_WRITE, &mediatype_key); - if (res == ERROR_FILE_NOT_FOUND) return S_OK; - if (res != ERROR_SUCCESS) return HRESULT_FROM_WIN32(res); - - for (; res == ERROR_SUCCESS && list->majortype; ++list) { - StringFromGUID2(list->majortype, buf, 39); - res = RegOpenKeyExW(mediatype_key, buf, 0, - KEY_READ | KEY_WRITE, &majortype_key); - if (res == ERROR_FILE_NOT_FOUND) { - res = ERROR_SUCCESS; - continue; - } - if (res != ERROR_SUCCESS) break; - - StringFromGUID2(list->subtype, buf, 39); - res = RegDeleteTreeW(majortype_key, buf); - if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; - - /* Removed majortype key if there is no more subtype key */ - res = RegDeleteKeyW(majortype_key, 0); - if (res == ERROR_ACCESS_DENIED) res = ERROR_SUCCESS; - - RegCloseKey(majortype_key); - } - - RegCloseKey(mediatype_key); - - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * unregister_mediatypes_extension - */ -static HRESULT unregister_mediatypes_extension(struct regsvr_mediatype_extension const *list) -{ - LONG res; - HKEY mediatype_key; - HKEY extensions_root_key = NULL; - - res = RegOpenKeyExW(HKEY_CLASSES_ROOT, mediatype_name, 0, - KEY_READ | KEY_WRITE, &mediatype_key); - if (res == ERROR_FILE_NOT_FOUND) return S_OK; - if (res != ERROR_SUCCESS) return HRESULT_FROM_WIN32(res); - - res = RegOpenKeyExW(mediatype_key, extensions_keyname, 0, - KEY_READ | KEY_WRITE, &extensions_root_key); - if (res == ERROR_FILE_NOT_FOUND) - res = ERROR_SUCCESS; - else if (res == ERROR_SUCCESS) - for (; res == ERROR_SUCCESS && list->majortype; ++list) { - res = RegDeleteTreeA(extensions_root_key, list->extension); - if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; - } - - RegCloseKey(mediatype_key); - if (extensions_root_key) - RegCloseKey(extensions_root_key); - - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - /*********************************************************************** * register_filters */ @@ -386,91 +174,6 @@ static HRESULT unregister_filters(struct regsvr_filter const *list) return hr; }
-/*********************************************************************** - * mediatype list - */ - -static struct regsvr_mediatype_parsing const mediatype_parsing_list[] = { - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_Avi, - { "0,4,,52494646,8,4,,41564920", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_MPEG1System, - { "0, 16, FFFFFFFFF100010001800001FFFFFFFF, 000001BA2100010001800001000001BB", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_MPEG1VideoCD, - { "0, 4, , 52494646, 8, 8, , 43445841666D7420, 36, 20, FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF, 646174610000000000FFFFFFFFFFFFFFFFFFFF00", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_MPEG1Video, - { "0, 4, , 000001B3", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_MPEG1Audio, - { "0, 2, FFE0, FFE0", - "0, 10, FFFFFF00000080808080, 494433000000000000", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_MPEG2_PROGRAM, - { "0, 5, FFFFFFFFC0, 000001BA40", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_QTMovie, - { "4, 4, , 6d646174", - "4, 4, , 6d6f6f76", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_WAVE, - { "0,4,,52494646,8,4,,57415645", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_AU, - { "0,4,,2e736e64", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_AIFF, - { "0,4,,464f524d,8,4,,41494646", - "0,4,,464f524d,8,4,,41494643", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIATYPE_Text, - { "0,4,,4C595249", - "0,4,,6C797269", - NULL } - }, - { &MEDIATYPE_Stream, - &MEDIATYPE_Midi, - { "0,4,,52494646,8,4,,524D4944", - "0,4,,4D546864", - NULL } - }, - { NULL } /* list terminator */ -}; - -/*********************************************************************** - * mediatype list - */ - -static struct regsvr_mediatype_extension const mediatype_extension_list[] = { - { &MEDIATYPE_Stream, - &MEDIASUBTYPE_MPEG1Audio, - ".mp3" - }, - { NULL } /* list terminator */ -}; - /*********************************************************************** * filter list */ @@ -687,10 +390,6 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n");
hr = QUARTZ_DllRegisterServer(); - if (SUCCEEDED(hr)) - hr = register_mediatypes_parsing(mediatype_parsing_list); - if (SUCCEEDED(hr)) - hr = register_mediatypes_extension(mediatype_extension_list); if (SUCCEEDED(hr)) hr = register_filters(filter_list); return hr; @@ -706,10 +405,6 @@ HRESULT WINAPI DllUnregisterServer(void) TRACE("\n");
hr = unregister_filters(filter_list); - if (SUCCEEDED(hr)) - hr = unregister_mediatypes_parsing(mediatype_parsing_list); - if (SUCCEEDED(hr)) - hr = unregister_mediatypes_extension(mediatype_extension_list); if (SUCCEEDED(hr)) hr = QUARTZ_DllUnregisterServer(); return hr;
Zebediah Figura z.figura12@gmail.com writes:
@@ -687,10 +390,6 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n");
hr = QUARTZ_DllRegisterServer();
- if (SUCCEEDED(hr))
hr = register_mediatypes_parsing(mediatype_parsing_list);
- if (SUCCEEDED(hr))
if (SUCCEEDED(hr)) hr = register_filters(filter_list); return hr;hr = register_mediatypes_extension(mediatype_extension_list);
Note that you should add a call to __wine_register_resources(), so that the dll can still be registered manually.
On 4/23/19 2:20 AM, Alexandre Julliard wrote:
Zebediah Figura z.figura12@gmail.com writes:
@@ -687,10 +390,6 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n");
hr = QUARTZ_DllRegisterServer();
- if (SUCCEEDED(hr))
hr = register_mediatypes_parsing(mediatype_parsing_list);
- if (SUCCEEDED(hr))
hr = register_mediatypes_extension(mediatype_extension_list); if (SUCCEEDED(hr)) hr = register_filters(filter_list); return hr;
Note that you should add a call to __wine_register_resources(), so that the dll can still be registered manually.
As far as I understand that's already done in the rpcproxy refactoring routines (i.e. it's called from QUARTZ_DllRegisterServer()). Is that not the case?
On 4/23/19 9:08 AM, Zebediah Figura wrote:
On 4/23/19 2:20 AM, Alexandre Julliard wrote:
Zebediah Figura z.figura12@gmail.com writes:
@@ -687,10 +390,6 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n");
hr = QUARTZ_DllRegisterServer();
- if (SUCCEEDED(hr))
hr = register_mediatypes_parsing(mediatype_parsing_list);
- if (SUCCEEDED(hr))
hr = register_mediatypes_extension(mediatype_extension_list); if (SUCCEEDED(hr)) hr = register_filters(filter_list); return hr;
Note that you should add a call to __wine_register_resources(), so that the dll can still be registered manually.
As far as I understand that's already done in the rpcproxy refactoring routines (i.e. it's called from QUARTZ_DllRegisterServer()). Is that not the case?
er, s/refactoring/registration/; not sure what my brain was doing there.
Zebediah Figura z.figura12@gmail.com writes:
On 4/23/19 2:20 AM, Alexandre Julliard wrote:
Zebediah Figura z.figura12@gmail.com writes:
@@ -687,10 +390,6 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n"); hr = QUARTZ_DllRegisterServer();
- if (SUCCEEDED(hr))
hr = register_mediatypes_parsing(mediatype_parsing_list);
- if (SUCCEEDED(hr))
hr = register_mediatypes_extension(mediatype_extension_list); if (SUCCEEDED(hr)) hr = register_filters(filter_list); return hr;
Note that you should add a call to __wine_register_resources(), so that the dll can still be registered manually.
As far as I understand that's already done in the rpcproxy refactoring routines (i.e. it's called from QUARTZ_DllRegisterServer()). Is that not the case?
You are right, I missed that you kept the rpcproxy call. That works.
Alexandre Julliard julliard@winehq.org writes:
Zebediah Figura z.figura12@gmail.com writes:
On 4/23/19 2:20 AM, Alexandre Julliard wrote:
Zebediah Figura z.figura12@gmail.com writes:
@@ -687,10 +390,6 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n"); hr = QUARTZ_DllRegisterServer();
- if (SUCCEEDED(hr))
hr = register_mediatypes_parsing(mediatype_parsing_list);
- if (SUCCEEDED(hr))
hr = register_mediatypes_extension(mediatype_extension_list); if (SUCCEEDED(hr)) hr = register_filters(filter_list); return hr;
Note that you should add a call to __wine_register_resources(), so that the dll can still be registered manually.
As far as I understand that's already done in the rpcproxy refactoring routines (i.e. it's called from QUARTZ_DllRegisterServer()). Is that not the case?
You are right, I missed that you kept the rpcproxy call. That works.
It's breaking the tests however:
../../../tools/runtest -q -P wine -T ../../.. -M quartz.dll -p quartz_test.exe mpegsplit && touch mpegsplit.ok mpegsplit.c:97: Test failed: Got hr 0x80040207. wine: Unhandled page fault on execute access to 0x001fb7d0 at address 0x1fb7d0 (thread 0009), starting debugger... Unhandled exception: page fault on execute access to 0x001fb7d0 in 32-bit code (0x001fb7d0). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:001fb7d0 ESP:007cf97c EBP:007cf9a8 EFLAGS:00010216( R- -- I -A-P- ) EAX:001fb7d0 EBX:00000000 ECX:007cf9c0 EDX:00110288 ESI:001f5758 EDI:00000000 Stack dump: 0x007cf97c: 7d76c2c9 001fb7d0 7d81b000 007cf9b8 0x007cf98c: 7d7b567c 001f5758 7d76c280 7d76c320 0x007cf99c: 007cf9c0 001f72f8 007cfa4c 007cf9f8 0x007cf9ac: 7d7c3892 00000000 7d7b5626 7d7b50e5 0x007cf9bc: 7d7c3892 001f5758 00000000 007cf9f8 0x007cf9cc: 7d76d2a7 00000000 00000000 00000000 Backtrace: =>0 0x001fb7d0 (0x007cf9a8) 1 0x7d7c3892 IEnumPinsImpl_Next+0xa1(iface=<couldn't compute location>, cPins=<couldn't compute location>, ppPins=<couldn't compute location>, pcFetched=<couldn't compute location>) [/home/julliard/wine/wine/dlls/strmbase/enumpins.c:147] in quartz (0x007cf9f8) 2 0x7d75c303 FilterGraph2_RemoveFilter+0x182(iface=<couldn't compute location>, pFilter=<couldn't compute location>) [/home/julliard/wine/wine/dlls/quartz/../../include/strmif.h:1194] in quartz (0x007cfb98) 3 0x7d74f2bd FilterGraphInner_Release+0x8c(iface=<couldn't compute location>) [/home/julliard/wine/wine/dlls/quartz/../../include/strmif.h:7014] in quartz (0x007cfbe8) 4 0x7d74f487 FilterGraph2_Release+0x56(iface=<couldn't compute location>) [/home/julliard/wine/wine/dlls/quartz/filtergraph.c:529] in quartz (0x007cfc18) 5 0x00426094 func_mpegsplit+0x483() [/home/julliard/wine/wine/dlls/quartz/tests/../../../include/strmif.h:7007] in quartz_test (0x007cfd48) 6 0x00438581 main+0x2a0(argc=<is not available>, argv=<is not available>) [/home/julliard/wine/wine/dlls/quartz/tests/../../../include/wine/test.h:617] in quartz_test (0x007cfe18) 7 0x0040138b filter+0x40138a() in quartz_test (0x007cfeb8) 8 0x7b475452 call_process_entry+0x11() in kernel32 (0x007cfed8) 9 0x7b477587 start_process+0x1a6(entry=<is not available>, peb=<is not available>) [/home/julliard/wine/wine/dlls/kernel32/process.c:1256] in kernel32 (0x007cffd8) 10 0x7b47545e start_process_wrapper+0x9() in kernel32 (0x007cffec) 0x001fb7d0: fmul %st(3),%st Modules: Module Address Debug info Name (76 modules) PE 400000- 5c1000 Dwarf quartz_test ELF 7b400000-7b832000 Dwarf kernel32<elf> -PE 7b420000-7b832000 \ kernel32 ELF 7bc00000-7bd2b000 Deferred ntdll<elf> -PE 7bc10000-7bd2b000 \ ntdll ELF 7c000000-7c005000 Deferred <wine-loader> ELF 7d6d1000-7d71e000 Deferred dsound<elf> -PE 7d6e0000-7d71e000 \ dsound ELF 7d71e000-7d824000 Dwarf quartz<elf> -PE 7d730000-7d824000 \ quartz ELF 7d846000-7d883000 Deferred uxtheme<elf> -PE 7d850000-7d883000 \ uxtheme ELF 7d883000-7d88a000 Deferred libxfixes.so.3 ELF 7d88a000-7d897000 Deferred libxcursor.so.1 ELF 7d897000-7d8aa000 Deferred libxi.so.6 ELF 7d8aa000-7d8ae000 Deferred libxcomposite.so.1 ELF 7d8ae000-7d8bb000 Deferred libxrandr.so.2 ELF 7d8bb000-7d8c7000 Deferred libxrender.so.1 ELF 7d8c7000-7d8ce000 Deferred libxxf86vm.so.1 ELF 7d8ce000-7d8d3000 Deferred libxinerama.so.1 ELF 7d8d3000-7d8dd000 Deferred librt.so.1 ELF 7d8dd000-7d8fc000 Deferred libbsd.so.0 ELF 7d8fc000-7d903000 Deferred libxdmcp.so.6 ELF 7d903000-7d908000 Deferred libxau.so.6 ELF 7d908000-7d936000 Deferred libxcb.so.1 ELF 7d936000-7da85000 Deferred libx11.so.6 ELF 7da85000-7da9a000 Deferred libxext.so.6 ELF 7dad2000-7db77000 Deferred winex11<elf> -PE 7dae0000-7db77000 \ winex11 ELF 7de4c000-7de56000 Deferred libuuid.so.1 ELF 7de56000-7de91000 Deferred libexpat.so.1 ELF 7de91000-7dede000 Deferred libfontconfig.so.1 ELF 7dede000-7defd000 Deferred libz.so.1 ELF 7defd000-7df3c000 Deferred libpng16.so.16 ELF 7df3c000-7dfff000 Deferred libfreetype.so.6 ELF 7dfff000-7e028000 Deferred libtinfo.so.6 ELF 7e028000-7e055000 Deferred libncurses.so.6 ELF 7e08d000-7e15d000 Deferred msvcrt<elf> -PE 7e0a0000-7e15d000 \ msvcrt ELF 7e15d000-7e2a0000 Deferred oleaut32<elf> -PE 7e170000-7e2a0000 \ oleaut32 ELF 7e2a0000-7e2c6000 Deferred imm32<elf> -PE 7e2b0000-7e2c6000 \ imm32 ELF 7e2c6000-7e31d000 Deferred usp10<elf> -PE 7e2d0000-7e31d000 \ usp10 ELF 7e31d000-7e47b000 Deferred comctl32<elf> -PE 7e330000-7e47b000 \ comctl32 ELF 7e47b000-7e4b9000 Deferred msacm32<elf> -PE 7e480000-7e4b9000 \ msacm32 ELF 7e4b9000-7e555000 Deferred rpcrt4<elf> -PE 7e4d0000-7e555000 \ rpcrt4 ELF 7e555000-7e6c7000 Deferred ole32<elf> -PE 7e570000-7e6c7000 \ ole32 ELF 7e6c7000-7e6f2000 Deferred version<elf> -PE 7e6d0000-7e6f2000 \ version ELF 7e6f2000-7e83b000 Deferred gdi32<elf> -PE 7e700000-7e83b000 \ gdi32 ELF 7e83b000-7ea63000 Deferred user32<elf> -PE 7e850000-7ea63000 \ user32 ELF 7ea63000-7eb33000 Deferred winmm<elf> -PE 7ea70000-7eb33000 \ winmm ELF 7eb33000-7ebc7000 Deferred advapi32<elf> -PE 7eb40000-7ebc7000 \ advapi32 ELF 7ee92000-7eea7000 Deferred libnss_files.so.2 ELF 7eea7000-7eec2000 Deferred libnsl.so.1 ELF 7eec2000-7efc8000 Deferred libm.so.6 ELF 7efca000-7effa000 Deferred msvfw32<elf> -PE 7efd0000-7effa000 \ msvfw32 ELF f7afd000-f7b03000 Deferred libdl.so.2 ELF f7b03000-f7ce1000 Deferred libc.so.6 ELF f7ce1000-f7d02000 Deferred libpthread.so.0 ELF f7d02000-f7d10000 Deferred libnss_nis.so.2 ELF f7d30000-f7d3a000 Deferred libnss_compat.so.2 ELF f7d3a000-f7ef1000 Dwarf libwine.so.1 ELF f7ef3000-f7f1d000 Deferred ld-linux.so.2 ELF f7f20000-f7f22000 Deferred [vdso].so Threads: process tid prio (all id:s are in hex) 00000008 (D) Z:\home\julliard\wine\wine\dlls\quartz\tests\quartz_test.exe 00000009 0 <== 0000000e services.exe 00000021 0 0000001c 0 00000018 0 00000015 0 00000014 0 00000013 0 00000010 0 0000000f 0 00000011 winedevice.exe 00000019 0 00000017 0 00000016 0 00000012 0 0000001a plugplay.exe 0000001e 0 0000001d 0 0000001b 0 0000001f winedevice.exe 00000026 0 00000023 0 00000022 0 00000020 0 00000024 explorer.exe 00000029 0 00000028 0 00000027 0 00000025 0 System information: Wine build: wine-4.6-209-gf45c89690c06 Platform: i386 Version: Windows 7 Host system: Linux Host version: 4.19.0-4-amd64
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/Makefile.in | 2 +- dlls/quartz/filesource.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/quartz/Makefile.in b/dlls/quartz/Makefile.in index 4e5f18d20a..56ca40da1b 100644 --- a/dlls/quartz/Makefile.in +++ b/dlls/quartz/Makefile.in @@ -1,6 +1,6 @@ MODULE = quartz.dll IMPORTLIB = quartz -IMPORTS = strmiids dxguid strmbase uuid dsound msacm32 msvfw32 ole32 oleaut32 shlwapi rpcrt4 user32 gdi32 advapi32 +IMPORTS = strmiids dxguid strmbase uuid dsound msacm32 msvfw32 ole32 oleaut32 rpcrt4 user32 gdi32 advapi32
C_SRCS = \ acmwrapper.c \ diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c index fc3e508960..e53db995f4 100644 --- a/dlls/quartz/filesource.c +++ b/dlls/quartz/filesource.c @@ -100,8 +100,7 @@ static HRESULT process_extensions(HKEY hkeyExtensions, LPCOLESTR pszFileName, GU return E_POINTER;
/* Get the part of the name that matters */ - extension = PathFindExtensionW(pszFileName); - if (*extension != '.') + if (!(extension = strrchrW(pszFileName, '.'))) return E_FAIL;
l = RegOpenKeyExW(hkeyExtensions, extension, 0, KEY_READ, &hsub);