diff --git a/patches/ntdll-HashLinks/0001-ntdll-Implement-HashLinks-field-in-LDR-module-data.patch b/patches/ntdll-HashLinks/0001-ntdll-Implement-HashLinks-field-in-LDR-module-data.patch index 4199e120..a2712ba4 100644 --- a/patches/ntdll-HashLinks/0001-ntdll-Implement-HashLinks-field-in-LDR-module-data.patch +++ b/patches/ntdll-HashLinks/0001-ntdll-Implement-HashLinks-field-in-LDR-module-data.patch @@ -1,4 +1,4 @@ -From 0a07ca826c7991b6c4e2455ff374e6fee4f93b93 Mon Sep 17 00:00:00 2001 +From 45940635b59cf3183e26ab3ffd2b8f486161e5ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Mon, 3 Apr 2017 05:30:27 +0200 Subject: [PATCH] ntdll: Implement HashLinks field in LDR module data. @@ -110,10 +110,10 @@ index 1db68a191a3..bec46088518 100644 test_dll_file( "kernel32.dll" ); test_dll_file( "advapi32.dll" ); diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index 6c86e6b2e6c..b8d6adaf390 100644 +index 01644df7763..8c6d05cb94e 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c -@@ -114,6 +114,9 @@ struct file_id +@@ -112,6 +112,9 @@ struct file_id BYTE ObjectId[16]; }; @@ -123,7 +123,7 @@ index 6c86e6b2e6c..b8d6adaf390 100644 /* internal representation of loaded modules */ typedef struct _wine_modref { -@@ -453,6 +456,52 @@ static void call_ldr_notifications( ULONG reason, LDR_DATA_TABLE_ENTRY *module ) +@@ -450,6 +453,52 @@ static void call_ldr_notifications( ULONG reason, LDR_DATA_TABLE_ENTRY *module ) } } @@ -176,7 +176,7 @@ index 6c86e6b2e6c..b8d6adaf390 100644 /************************************************************************* * get_modref * -@@ -1195,7 +1244,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name +@@ -1196,7 +1245,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name &wm->ldr.InLoadOrderLinks); InsertTailList(&NtCurrentTeb()->Peb->LdrData->InMemoryOrderModuleList, &wm->ldr.InMemoryOrderLinks); @@ -189,7 +189,7 @@ index 6c86e6b2e6c..b8d6adaf390 100644 if (!(nt->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT)) { -@@ -1873,6 +1927,7 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name, +@@ -1876,6 +1930,7 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name, /* the module has only be inserted in the load & memory order lists */ RemoveEntryList(&wm->ldr.InLoadOrderLinks); RemoveEntryList(&wm->ldr.InMemoryOrderLinks); @@ -197,7 +197,7 @@ index 6c86e6b2e6c..b8d6adaf390 100644 /* FIXME: there are several more dangling references * left. Including dlls loaded by this dll before the -@@ -3246,6 +3301,7 @@ static void free_modref( WINE_MODREF *wm ) +@@ -3277,6 +3332,7 @@ static void free_modref( WINE_MODREF *wm ) { RemoveEntryList(&wm->ldr.InLoadOrderLinks); RemoveEntryList(&wm->ldr.InMemoryOrderLinks); @@ -205,7 +205,7 @@ index 6c86e6b2e6c..b8d6adaf390 100644 if (wm->ldr.InInitializationOrderLinks.Flink) RemoveEntryList(&wm->ldr.InInitializationOrderLinks); -@@ -3973,6 +4029,7 @@ static NTSTATUS process_init(void) +@@ -3979,6 +4035,7 @@ static NTSTATUS process_init(void) INITIAL_TEB stack; TEB *teb = NtCurrentTeb(); PEB *peb = teb->Peb; @@ -213,18 +213,18 @@ index 6c86e6b2e6c..b8d6adaf390 100644 peb->LdrData = &ldr; peb->FastPebLock = &peb_lock; -@@ -4006,6 +4063,10 @@ static NTSTATUS process_init(void) - load_global_options(); - version_init(); +@@ -4002,6 +4059,10 @@ static NTSTATUS process_init(void) + InitializeListHead( &ldr.InMemoryOrderModuleList ); + InitializeListHead( &ldr.InInitializationOrderModuleList ); + /* initialize hash table */ + for (i = 0; i < HASH_MAP_SIZE; i++) + InitializeListHead(&hash_table[i]); + - if (!(status = load_dll( params->DllPath.Buffer, params->ImagePathName.Buffer, NULL, - DONT_RESOLVE_DLL_REFERENCES, &wm ))) - { -@@ -4094,6 +4155,10 @@ static NTSTATUS process_init(void) + #ifndef _WIN64 + is_wow64 = !!NtCurrentTeb64(); + #endif +@@ -4050,6 +4111,10 @@ static NTSTATUS process_init(void) teb->Tib.StackBase = stack.StackBase; teb->Tib.StackLimit = stack.StackLimit; teb->DeallocationStack = stack.DeallocationStack; @@ -236,10 +236,10 @@ index 6c86e6b2e6c..b8d6adaf390 100644 } diff --git a/include/winternl.h b/include/winternl.h -index f0ab223ef2e..b6676717436 100644 +index fcdedaec8aa..6ea72da54f7 100644 --- a/include/winternl.h +++ b/include/winternl.h -@@ -2794,8 +2794,8 @@ typedef struct _LDR_DATA_TABLE_ENTRY +@@ -3040,8 +3040,8 @@ typedef struct _LDR_DATA_TABLE_ENTRY ULONG Flags; SHORT LoadCount; SHORT TlsIndex; @@ -250,5 +250,5 @@ index f0ab223ef2e..b6676717436 100644 HANDLE ActivationContext; void* Lock; -- -2.20.1 +2.30.2 diff --git a/patches/ntdll-Hide_Wine_Exports/0001-ntdll-Add-support-for-hiding-wine-version-informatio.patch b/patches/ntdll-Hide_Wine_Exports/0001-ntdll-Add-support-for-hiding-wine-version-informatio.patch index c7286a40..220f1232 100644 --- a/patches/ntdll-Hide_Wine_Exports/0001-ntdll-Add-support-for-hiding-wine-version-informatio.patch +++ b/patches/ntdll-Hide_Wine_Exports/0001-ntdll-Add-support-for-hiding-wine-version-informatio.patch @@ -1,4 +1,4 @@ -From 9970a7ac4c75019023d35ab7fadcfa8e5d6af32f Mon Sep 17 00:00:00 2001 +From 5da647f8fca9e37cec233b3357561d25fd205603 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 30 May 2015 02:23:15 +0200 Subject: [PATCH] ntdll: Add support for hiding wine version information from @@ -10,10 +10,10 @@ Subject: [PATCH] ntdll: Add support for hiding wine version information from 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index 1110fa37b6d..f0a9748b5fa 100644 +index 01644df7763..437bf6e224c 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c -@@ -75,6 +75,9 @@ BOOL is_wow64 = FALSE; +@@ -73,6 +73,9 @@ BOOL is_wow64 = FALSE; /* system search path */ static const WCHAR system_path[] = L"C:\\windows\\system32;C:\\windows\\system;C:\\windows"; @@ -23,7 +23,7 @@ index 1110fa37b6d..f0a9748b5fa 100644 static BOOL imports_fixup_done = FALSE; /* set once the imports have been fixed up, before attaching them */ static BOOL process_detaching = FALSE; /* set on process detach to avoid deadlocks with thread detach */ static int free_lib_count; /* recursion depth of LdrUnloadDll calls */ -@@ -91,6 +94,8 @@ struct dll_dir_entry +@@ -90,6 +93,8 @@ struct dll_dir_entry static struct list dll_dir_list = LIST_INIT( dll_dir_list ); /* extra dirs from LdrAddDllDirectory */ @@ -32,7 +32,7 @@ index 1110fa37b6d..f0a9748b5fa 100644 struct ldr_notification { struct list entry; -@@ -1757,6 +1762,96 @@ NTSTATUS WINAPI LdrUnlockLoaderLock( ULONG flags, ULONG_PTR magic ) +@@ -1671,6 +1676,96 @@ NTSTATUS WINAPI LdrUnlockLoaderLock( ULONG flags, ULONG_PTR magic ) } @@ -129,29 +129,29 @@ index 1110fa37b6d..f0a9748b5fa 100644 /****************************************************************** * LdrGetProcedureAddress (NTDLL.@) */ -@@ -1777,7 +1872,7 @@ NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE module, const ANSI_STRING *name, - LPCWSTR load_path = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer; - void *proc = name ? find_named_export( module, exports, exp_size, name->Buffer, -1, load_path ) - : find_ordinal_export( module, exports, exp_size, ord - exports->Base, load_path ); +@@ -1690,7 +1785,7 @@ NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE module, const ANSI_STRING *name, + { + void *proc = name ? find_named_export( module, exports, exp_size, name->Buffer, -1, NULL ) + : find_ordinal_export( module, exports, exp_size, ord - exports->Base, NULL ); - if (proc) + if (proc && !is_hidden_export( proc )) { *address = proc; ret = STATUS_SUCCESS; -@@ -4156,6 +4251,8 @@ static NTSTATUS process_init(void) - NtTerminateProcess( GetCurrentProcess(), status ); - } +@@ -4026,6 +4121,8 @@ static NTSTATUS process_init(void) + + build_ntdll_module(); + hidden_exports_init( wm->ldr.FullDllName.Buffer ); + #ifndef _WIN64 - if (NtCurrentTeb64()) - { + if (is_wow64) + map_wow64cpu(); diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h -index 3bd70b60874..98629129c44 100644 +index b8f9dc28e63..a4db195c375 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h -@@ -155,6 +155,11 @@ static inline TEB64 *NtCurrentTeb64(void) { return (TEB64 *)NtCurrentTeb()->GdiB +@@ -100,6 +100,11 @@ static inline TEB64 *NtCurrentTeb64(void) { return (TEB64 *)NtCurrentTeb()->GdiB NTSTATUS WINAPI RtlHashUnicodeString(PCUNICODE_STRING,BOOLEAN,ULONG,ULONG*); @@ -164,5 +164,5 @@ index 3bd70b60874..98629129c44 100644 static inline void ascii_to_unicode( WCHAR *dst, const char *src, size_t len ) { -- -2.29.2 +2.30.2 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 5308dcb6..da353a2c 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "f69c8f018188af49d5a3916f7bb7e3ab984fd3ec" + echo "12cfe6826773708e3b15f73b9674ccb959000d8b" } # Show version information diff --git a/patches/shell32-ACE_Viewer/0002-shell32-Add-security-property-tab.patch b/patches/shell32-ACE_Viewer/0002-shell32-Add-security-property-tab.patch index b46a400f..ea97cdc8 100644 --- a/patches/shell32-ACE_Viewer/0002-shell32-Add-security-property-tab.patch +++ b/patches/shell32-ACE_Viewer/0002-shell32-Add-security-property-tab.patch @@ -1,4 +1,4 @@ -From 34e55c92e6deace0326f436c2c935bf2827510e1 Mon Sep 17 00:00:00 2001 +From 464489a607fc03a7a157e779c0c152e833cfab33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Mon, 8 May 2017 23:33:45 +0200 Subject: [PATCH] shell32: Add security property tab. @@ -11,11 +11,11 @@ Subject: [PATCH] shell32: Add security property tab. 4 files changed, 438 insertions(+), 1 deletion(-) diff --git a/dlls/shell32/Makefile.in b/dlls/shell32/Makefile.in -index e89177c3a73..6be1631a05a 100644 +index fe49bf09f98..f6fcf2e18eb 100644 --- a/dlls/shell32/Makefile.in +++ b/dlls/shell32/Makefile.in @@ -1,7 +1,7 @@ - EXTRADEFS = -D_SHELL32_ -DWINE_NO_NAMELESS_EXTENSION + EXTRADEFS = -D_SHELL32_ MODULE = shell32.dll IMPORTLIB = shell32 -IMPORTS = uuid shlwapi user32 gdi32 advapi32 diff --git a/patches/windows.globalization-dll/0001-windows.globalization-Add-stub-dll.patch b/patches/windows.globalization-dll/0001-windows.globalization-Add-stub-dll.patch deleted file mode 100644 index 9211caca..00000000 --- a/patches/windows.globalization-dll/0001-windows.globalization-Add-stub-dll.patch +++ /dev/null @@ -1,258 +0,0 @@ -From 7d845fec580f156ed26a0a200ddd1611e54c1ee4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Fri, 28 Aug 2020 15:59:50 +0200 -Subject: [PATCH] windows.globalization: Add stub dll. - ---- - configure.ac | 1 + - dlls/windows.globalization.dll/Makefile.in | 5 + - .../windows.globalization.spec | 3 + - .../windows.globalization_main.c | 141 ++++++++++++++++++ - include/Makefile.in | 1 + - include/windows.globalization.idl | 27 ++++ - loader/wine.inf.in | 1 + - 7 files changed, 179 insertions(+) - create mode 100644 dlls/windows.globalization.dll/Makefile.in - create mode 100644 dlls/windows.globalization.dll/windows.globalization.spec - create mode 100644 dlls/windows.globalization.dll/windows.globalization_main.c - create mode 100644 include/windows.globalization.idl - -diff --git a/configure.ac b/configure.ac -index 558d2e906a2..036b5c2691d 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -3802,6 +3802,7 @@ WINE_CONFIG_MAKEFILE(dlls/win87em.dll16,enable_win16) - WINE_CONFIG_MAKEFILE(dlls/winaspi.dll16,enable_win16) - WINE_CONFIG_MAKEFILE(dlls/windebug.dll16,enable_win16) - WINE_CONFIG_MAKEFILE(dlls/windows.gaming.input.dll) -+WINE_CONFIG_MAKEFILE(dlls/windows.globalization.dll) - WINE_CONFIG_MAKEFILE(dlls/windows.media.speech) - WINE_CONFIG_MAKEFILE(dlls/windows.media.speech/tests) - WINE_CONFIG_MAKEFILE(dlls/windowscodecs) -diff --git a/dlls/windows.globalization.dll/Makefile.in b/dlls/windows.globalization.dll/Makefile.in -new file mode 100644 -index 00000000000..25dc1cac3e6 ---- /dev/null -+++ b/dlls/windows.globalization.dll/Makefile.in -@@ -0,0 +1,5 @@ -+MODULE = windows.globalization.dll -+IMPORTS = combase -+EXTRADLLFLAGS = -mno-cygwin -+C_SRCS = \ -+ windows.globalization_main.c -diff --git a/dlls/windows.globalization.dll/windows.globalization.spec b/dlls/windows.globalization.dll/windows.globalization.spec -new file mode 100644 -index 00000000000..721493229c2 ---- /dev/null -+++ b/dlls/windows.globalization.dll/windows.globalization.spec -@@ -0,0 +1,3 @@ -+1 stdcall -private DllCanUnloadNow() -+2 stdcall -private DllGetActivationFactory(ptr ptr) -+3 stdcall -private DllGetClassObject(ptr ptr ptr) -diff --git a/dlls/windows.globalization.dll/windows.globalization_main.c b/dlls/windows.globalization.dll/windows.globalization_main.c -new file mode 100644 -index 00000000000..840ce08c0c5 ---- /dev/null -+++ b/dlls/windows.globalization.dll/windows.globalization_main.c -@@ -0,0 +1,141 @@ -+#include -+ -+#define COBJMACROS -+#include "windef.h" -+#include "winbase.h" -+#include "winstring.h" -+#include "wine/debug.h" -+#include "objbase.h" -+ -+#include "initguid.h" -+#include "activation.h" -+ -+#include "windows.foundation.h" -+#include "windows.globalization.h" -+#include "windows.system.userprofile.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(locale); -+ -+static const char *debugstr_hstring(HSTRING hstr) -+{ -+ const WCHAR *str; -+ UINT32 len; -+ if (hstr && !((ULONG_PTR)hstr >> 16)) return "(invalid)"; -+ str = WindowsGetStringRawBuffer(hstr, &len); -+ return wine_dbgstr_wn(str, len); -+} -+ -+struct windows_globalization -+{ -+ IActivationFactory IActivationFactory_iface; -+ LONG ref; -+}; -+ -+static inline struct windows_globalization *impl_from_IActivationFactory(IActivationFactory *iface) -+{ -+ return CONTAINING_RECORD(iface, struct windows_globalization, IActivationFactory_iface); -+} -+ -+static HRESULT STDMETHODCALLTYPE windows_globalization_QueryInterface( -+ IActivationFactory *iface, REFIID iid, void **out) -+{ -+ struct windows_globalization *impl = impl_from_IActivationFactory(iface); -+ TRACE("iface %p, iid %s, out %p stub!\n", iface, debugstr_guid(iid), out); -+ -+ if (IsEqualGUID(iid, &IID_IUnknown) || -+ IsEqualGUID(iid, &IID_IInspectable) || -+ IsEqualGUID(iid, &IID_IActivationFactory)) -+ { -+ IUnknown_AddRef(iface); -+ *out = &impl->IActivationFactory_iface; -+ return S_OK; -+ } -+ -+ FIXME("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); -+ *out = NULL; -+ return E_NOINTERFACE; -+} -+ -+static ULONG STDMETHODCALLTYPE windows_globalization_AddRef( -+ IActivationFactory *iface) -+{ -+ struct windows_globalization *impl = impl_from_IActivationFactory(iface); -+ ULONG ref = InterlockedIncrement(&impl->ref); -+ TRACE("iface %p, ref %u.\n", iface, ref); -+ return ref; -+} -+ -+static ULONG STDMETHODCALLTYPE windows_globalization_Release( -+ IActivationFactory *iface) -+{ -+ struct windows_globalization *impl = impl_from_IActivationFactory(iface); -+ ULONG ref = InterlockedDecrement(&impl->ref); -+ TRACE("iface %p, ref %u.\n", iface, ref); -+ return ref; -+} -+ -+static HRESULT STDMETHODCALLTYPE windows_globalization_GetIids( -+ IActivationFactory *iface, ULONG *iid_count, IID **iids) -+{ -+ FIXME("iface %p, iid_count %p, iids %p stub!\n", iface, iid_count, iids); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE windows_globalization_GetRuntimeClassName( -+ IActivationFactory *iface, HSTRING *class_name) -+{ -+ FIXME("iface %p, class_name %p stub!\n", iface, class_name); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE windows_globalization_GetTrustLevel( -+ IActivationFactory *iface, TrustLevel *trust_level) -+{ -+ FIXME("iface %p, trust_level %p stub!\n", iface, trust_level); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE windows_globalization_ActivateInstance( -+ IActivationFactory *iface, IInspectable **instance) -+{ -+ FIXME("iface %p, instance %p stub!\n", iface, instance); -+ return E_NOTIMPL; -+} -+ -+static const struct IActivationFactoryVtbl activation_factory_vtbl = -+{ -+ windows_globalization_QueryInterface, -+ windows_globalization_AddRef, -+ windows_globalization_Release, -+ /* IInspectable methods */ -+ windows_globalization_GetIids, -+ windows_globalization_GetRuntimeClassName, -+ windows_globalization_GetTrustLevel, -+ /* IActivationFactory methods */ -+ windows_globalization_ActivateInstance, -+}; -+ -+static struct windows_globalization windows_globalization = -+{ -+ {&activation_factory_vtbl}, -+ 0 -+}; -+ -+HRESULT WINAPI DllCanUnloadNow(void) -+{ -+ return S_FALSE; -+} -+ -+HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID riid, void **out) -+{ -+ FIXME("clsid %s, riid %s, out %p stub!\n", debugstr_guid(clsid), debugstr_guid(riid), out); -+ return CLASS_E_CLASSNOTAVAILABLE; -+} -+ -+HRESULT WINAPI DllGetActivationFactory(HSTRING classid, IActivationFactory **factory) -+{ -+ TRACE("classid %s, factory %p.\n", debugstr_hstring(classid), factory); -+ *factory = &windows_globalization.IActivationFactory_iface; -+ IUnknown_AddRef(*factory); -+ return S_OK; -+} -diff --git a/include/Makefile.in b/include/Makefile.in -index 22ed5f3a2d5..a868eadce4b 100644 ---- a/include/Makefile.in -+++ b/include/Makefile.in -@@ -752,6 +752,7 @@ SOURCES = \ - windows.foundation.idl \ - windows.gaming.input.idl \ - windows.gaming.input.forcefeedback.idl \ -+ windows.globalization.idl \ - windows.h \ - windows.media.speechsynthesis.idl \ - windows.system.idl \ -diff --git a/include/windows.globalization.idl b/include/windows.globalization.idl -new file mode 100644 -index 00000000000..c3f80999af5 ---- /dev/null -+++ b/include/windows.globalization.idl -@@ -0,0 +1,27 @@ -+/* -+ * Copyright 2020 Rémi Bernon for CodeWeavers -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#ifdef __WIDL__ -+#pragma winrt ns_prefix -+#endif -+ -+import "inspectable.idl"; -+import "windows.foundation.idl"; -+ -+namespace Windows { -+} -diff --git a/loader/wine.inf.in b/loader/wine.inf.in -index c10cb37a172..12d6d3ecb6e 100644 ---- a/loader/wine.inf.in -+++ b/loader/wine.inf.in -@@ -713,6 +713,7 @@ HKLM,%MciExtStr%,"wvx",,"MPEGVideo" - [Misc] - HKLM,Software\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.Input.Gamepad,"DllPath",2,"Windows.Gaming.Input.dll" - HKLM,Software\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.Input.RawGameController,"DllPath",2,"Windows.Gaming.Input.dll" -+HKLM,Software\Microsoft\WindowsRuntime\ActivatableClassId\Windows.System.UserProfile.GlobalizationPreferences,"DllPath",2,"Windows.Globalization.dll" - HKLM,Software\Borland\Database Engine\Settings\SYSTEM\INIT,SHAREDMEMLOCATION,,9000 - HKLM,Software\Clients\Mail,,2,"Native Mail Client" - HKLM,Software\Clients\Mail\Native Mail Client,,2,"Native Mail Client" --- -2.20.1 - diff --git a/patches/windows.globalization-dll/0002-windows.globalization-Implement-IGlobalizationPrefer.patch b/patches/windows.globalization-dll/0002-windows.globalization-Implement-IGlobalizationPrefer.patch deleted file mode 100644 index e09a03a9..00000000 --- a/patches/windows.globalization-dll/0002-windows.globalization-Implement-IGlobalizationPrefer.patch +++ /dev/null @@ -1,323 +0,0 @@ -From f184cbcf4416e8a5365bd6c63cc5649e9e53393c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Tue, 13 Oct 2020 18:11:35 +0200 -Subject: [PATCH] windows.globalization: Implement - IGlobalizationPreferencesStatics stubs. - ---- - dlls/windows.globalization.dll/Makefile.in | 2 +- - .../windows.globalization_main.c | 134 ++++++++++++++++++ - include/Makefile.in | 1 + - include/windows.foundation.idl | 1 + - include/windows.globalization.idl | 20 ++- - include/windows.system.userprofile.idl | 56 ++++++++ - 6 files changed, 212 insertions(+), 2 deletions(-) - create mode 100644 include/windows.system.userprofile.idl - -diff --git a/dlls/windows.globalization.dll/Makefile.in b/dlls/windows.globalization.dll/Makefile.in -index 25dc1cac3e6..7ddd97aef52 100644 ---- a/dlls/windows.globalization.dll/Makefile.in -+++ b/dlls/windows.globalization.dll/Makefile.in -@@ -1,5 +1,5 @@ - MODULE = windows.globalization.dll --IMPORTS = combase -+IMPORTS = combase uuid - EXTRADLLFLAGS = -mno-cygwin - C_SRCS = \ - windows.globalization_main.c -diff --git a/dlls/windows.globalization.dll/windows.globalization_main.c b/dlls/windows.globalization.dll/windows.globalization_main.c -index 840ce08c0c5..5bb0b46866d 100644 ---- a/dlls/windows.globalization.dll/windows.globalization_main.c -+++ b/dlls/windows.globalization.dll/windows.globalization_main.c -@@ -10,8 +10,12 @@ - #include "initguid.h" - #include "activation.h" - -+#define WIDL_using_Windows_Foundation -+#define WIDL_using_Windows_Foundation_Collections - #include "windows.foundation.h" -+#define WIDL_using_Windows_Globalization - #include "windows.globalization.h" -+#define WIDL_using_Windows_System_UserProfile - #include "windows.system.userprofile.h" - - WINE_DEFAULT_DEBUG_CHANNEL(locale); -@@ -28,6 +32,7 @@ static const char *debugstr_hstring(HSTRING hstr) - struct windows_globalization - { - IActivationFactory IActivationFactory_iface; -+ IGlobalizationPreferencesStatics IGlobalizationPreferencesStatics_iface; - LONG ref; - }; - -@@ -36,6 +41,127 @@ static inline struct windows_globalization *impl_from_IActivationFactory(IActiva - return CONTAINING_RECORD(iface, struct windows_globalization, IActivationFactory_iface); - } - -+static inline struct windows_globalization *impl_from_IGlobalizationPreferencesStatics(IGlobalizationPreferencesStatics *iface) -+{ -+ return CONTAINING_RECORD(iface, struct windows_globalization, IGlobalizationPreferencesStatics_iface); -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_QueryInterface( -+ IGlobalizationPreferencesStatics *iface, REFIID iid, void **object) -+{ -+ FIXME("iface %p, iid %s, object %p stub!\n", iface, debugstr_guid(iid), object); -+ -+ if (IsEqualGUID(iid, &IID_IAgileObject)) -+ { -+ IUnknown_AddRef(iface); -+ *object = iface; -+ return S_OK; -+ } -+ -+ WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); -+ *object = NULL; -+ return E_NOINTERFACE; -+} -+ -+static ULONG STDMETHODCALLTYPE globalization_preferences_AddRef( -+ IGlobalizationPreferencesStatics *iface) -+{ -+ struct windows_globalization *impl = impl_from_IGlobalizationPreferencesStatics(iface); -+ ULONG ref = InterlockedIncrement(&impl->ref); -+ FIXME("iface %p -> ref %u.\n", iface, ref); -+ return ref; -+} -+ -+static ULONG STDMETHODCALLTYPE globalization_preferences_Release( -+ IGlobalizationPreferencesStatics *iface) -+{ -+ struct windows_globalization *impl = impl_from_IGlobalizationPreferencesStatics(iface); -+ ULONG ref = InterlockedDecrement(&impl->ref); -+ FIXME("iface %p -> ref %u.\n", iface, ref); -+ return ref; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_GetIids( -+ IGlobalizationPreferencesStatics *iface, ULONG *iid_count, IID **iids) -+{ -+ FIXME("iface %p, iid_count %p, iids %p stub!\n", iface, iid_count, iids); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_GetRuntimeClassName( -+ IGlobalizationPreferencesStatics *iface, HSTRING *class_name) -+{ -+ FIXME("iface %p, class_name %p stub!\n", iface, class_name); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_GetTrustLevel( -+ IGlobalizationPreferencesStatics *iface, TrustLevel *trust_level) -+{ -+ FIXME("iface %p, trust_level %p stub!\n", iface, trust_level); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_get_Calendars(IGlobalizationPreferencesStatics *iface, -+ IVectorView_HSTRING **value) -+{ -+ FIXME("iface %p, value %p stub!\n", iface, value); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_get_Clocks(IGlobalizationPreferencesStatics *iface, -+ IVectorView_HSTRING **value) -+{ -+ FIXME("iface %p, value %p stub!\n", iface, value); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_get_Currencies(IGlobalizationPreferencesStatics *iface, -+ IVectorView_HSTRING **value) -+{ -+ FIXME("iface %p, value %p stub!\n", iface, value); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_get_Languages(IGlobalizationPreferencesStatics *iface, -+ IVectorView_HSTRING **value) -+{ -+ FIXME("iface %p, value %p stub!\n", iface, value); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_get_HomeGeographicRegion(IGlobalizationPreferencesStatics *iface, -+ HSTRING* value) -+{ -+ FIXME("iface %p, value %p stub!\n", iface, value); -+ return E_NOTIMPL; -+} -+ -+static HRESULT STDMETHODCALLTYPE globalization_preferences_get_WeekStartsOn(IGlobalizationPreferencesStatics *iface, -+ enum DayOfWeek* value) -+{ -+ FIXME("iface %p, value %p stub!\n", iface, value); -+ return E_NOTIMPL; -+} -+ -+static const struct IGlobalizationPreferencesStaticsVtbl globalization_preferences_vtbl = -+{ -+ globalization_preferences_QueryInterface, -+ globalization_preferences_AddRef, -+ globalization_preferences_Release, -+ /* IInspectable methods */ -+ globalization_preferences_GetIids, -+ globalization_preferences_GetRuntimeClassName, -+ globalization_preferences_GetTrustLevel, -+ /* IGlobalizationPreferencesStatics methods */ -+ globalization_preferences_get_Calendars, -+ globalization_preferences_get_Clocks, -+ globalization_preferences_get_Currencies, -+ globalization_preferences_get_Languages, -+ globalization_preferences_get_HomeGeographicRegion, -+ globalization_preferences_get_WeekStartsOn, -+}; -+ - static HRESULT STDMETHODCALLTYPE windows_globalization_QueryInterface( - IActivationFactory *iface, REFIID iid, void **out) - { -@@ -51,6 +177,13 @@ static HRESULT STDMETHODCALLTYPE windows_globalization_QueryInterface( - return S_OK; - } - -+ if (IsEqualGUID(iid, &IID_IGlobalizationPreferencesStatics)) -+ { -+ IUnknown_AddRef(iface); -+ *out = &impl->IGlobalizationPreferencesStatics_iface; -+ return S_OK; -+ } -+ - FIXME("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); - *out = NULL; - return E_NOINTERFACE; -@@ -118,6 +251,7 @@ static const struct IActivationFactoryVtbl activation_factory_vtbl = - static struct windows_globalization windows_globalization = - { - {&activation_factory_vtbl}, -+ {&globalization_preferences_vtbl}, - 0 - }; - -diff --git a/include/Makefile.in b/include/Makefile.in -index 95013040926..958530388b4 100644 ---- a/include/Makefile.in -+++ b/include/Makefile.in -@@ -755,6 +755,7 @@ SOURCES = \ - windows.h \ - windows.media.speechsynthesis.idl \ - windows.system.idl \ -+ windows.system.userprofile.idl \ - windowscontracts.idl \ - windowsx.h \ - wine/debug.h \ -diff --git a/include/windows.foundation.idl b/include/windows.foundation.idl -index 2bed3d54cda..0d53fa6f407 100644 ---- a/include/windows.foundation.idl -+++ b/include/windows.foundation.idl -@@ -125,6 +125,7 @@ namespace Windows { - declare { - interface Windows.Foundation.AsyncOperationCompletedHandler; - interface Windows.Foundation.IAsyncOperation; -+ interface Windows.Foundation.Collections.IVectorView; - } - } - } -diff --git a/include/windows.globalization.idl b/include/windows.globalization.idl -index c3f80999af5..ac76455b847 100644 ---- a/include/windows.globalization.idl -+++ b/include/windows.globalization.idl -@@ -20,8 +20,26 @@ - #pragma winrt ns_prefix - #endif - --import "inspectable.idl"; - import "windows.foundation.idl"; - - namespace Windows { -+ namespace Globalization { -+ typedef enum DayOfWeek DayOfWeek; -+ } -+} -+ -+namespace Windows { -+ namespace Globalization { -+ [contract(Windows.Foundation.UniversalApiContract, 1.0)] -+ enum DayOfWeek -+ { -+ Sunday = 0, -+ Monday = 1, -+ Tuesday = 2, -+ Wednesday = 3, -+ Thursday = 4, -+ Friday = 5, -+ Saturday = 6 -+ }; -+ } - } -diff --git a/include/windows.system.userprofile.idl b/include/windows.system.userprofile.idl -new file mode 100644 -index 00000000000..e2676f9dd89 ---- /dev/null -+++ b/include/windows.system.userprofile.idl -@@ -0,0 +1,56 @@ -+/* -+ * Copyright 2020 Rémi Bernon for CodeWeavers -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#ifdef __WIDL__ -+#pragma winrt ns_prefix -+#endif -+ -+import "windows.foundation.idl"; -+import "windows.globalization.idl"; -+ -+namespace Windows { -+ namespace System { -+ namespace UserProfile { -+ interface IGlobalizationPreferencesStatics; -+ runtimeclass GlobalizationPreferences; -+ } -+ } -+} -+ -+namespace Windows { -+ namespace System { -+ namespace UserProfile { -+ -+ [ -+ contract(Windows.Foundation.UniversalApiContract, 1.0), -+ exclusiveto(Windows.System.UserProfile.GlobalizationPreferences), -+ uuid(01bf4326-ed37-4e96-b0e9-c1340d1ea158) -+ ] -+ interface IGlobalizationPreferencesStatics : IInspectable -+ { -+ [propget] HRESULT Calendars([out, retval] Windows.Foundation.Collections.IVectorView** value); -+ [propget] HRESULT Clocks([out, retval] Windows.Foundation.Collections.IVectorView** value); -+ [propget] HRESULT Currencies([out, retval] Windows.Foundation.Collections.IVectorView** value); -+ [propget] HRESULT Languages([out, retval] Windows.Foundation.Collections.IVectorView** value); -+ [propget] HRESULT HomeGeographicRegion([out, retval] HSTRING* value); -+ [propget] HRESULT WeekStartsOn([out, retval] Windows.Globalization.DayOfWeek* value); -+ } -+ -+ } -+ } -+} --- -2.20.1 - diff --git a/patches/winepulse-PulseAudio_Support/0005-winepulse-implement-GetPropValue.patch b/patches/winepulse-PulseAudio_Support/0005-winepulse-implement-GetPropValue.patch index 34760c47..7e190150 100644 --- a/patches/winepulse-PulseAudio_Support/0005-winepulse-implement-GetPropValue.patch +++ b/patches/winepulse-PulseAudio_Support/0005-winepulse-implement-GetPropValue.patch @@ -1,17 +1,17 @@ -From b925b9bbfc943c19128f0bef39eec8539c683dd7 Mon Sep 17 00:00:00 2001 +From 4f994a5499335f908debff6be84e49733c94144b Mon Sep 17 00:00:00 2001 From: Mark Harmstone Date: Thu, 4 Dec 2014 21:36:42 +0000 -Subject: [PATCH 5/7] winepulse: implement GetPropValue +Subject: [PATCH] winepulse: implement GetPropValue --- - dlls/winepulse.drv/mmdevdrv.c | 116 +++++++++++++++++++++++++++++++++++++++--- + dlls/winepulse.drv/mmdevdrv.c | 116 ++++++++++++++++++++++++++++++++-- 1 file changed, 109 insertions(+), 7 deletions(-) diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c -index 583690b..8311cbd 100644 +index 5c471d3c13b..b7ae9aeaabf 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c -@@ -82,6 +82,8 @@ static struct list g_sessions = LIST_INIT(g_sessions); +@@ -83,6 +83,8 @@ static struct list g_sessions = LIST_INIT(g_sessions); typedef struct _PhysDevice { struct list entry; GUID guid; @@ -20,7 +20,7 @@ index 583690b..8311cbd 100644 WCHAR name[0]; } PhysDevice; -@@ -585,14 +587,67 @@ static BOOL get_device_guid(EDataFlow flow, const char *device, GUID *guid) +@@ -674,14 +676,67 @@ static BOOL get_device_guid(EDataFlow flow, const char *device, GUID *guid) return TRUE; } @@ -90,7 +90,7 @@ index 583690b..8311cbd 100644 list_add_tail(list, &dev->entry); } } -@@ -600,6 +655,7 @@ static void pulse_add_device(struct list *list, GUID *guid, const char *name) +@@ -689,6 +744,7 @@ static void pulse_add_device(struct list *list, GUID *guid, const char *name) static void pulse_phys_speakers_cb(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { @@ -98,7 +98,7 @@ index 583690b..8311cbd 100644 GUID guid; if (i) { -@@ -609,18 +665,25 @@ static void pulse_phys_speakers_cb(pa_context *c, const pa_sink_info *i, int eol +@@ -698,18 +754,25 @@ static void pulse_phys_speakers_cb(pa_context *c, const pa_sink_info *i, int eol if (!get_device_guid(eRender, i->name, &guid)) CoCreateGuid(&guid); @@ -126,7 +126,7 @@ index 583690b..8311cbd 100644 } } -@@ -691,8 +754,8 @@ static HRESULT pulse_test_connect(void) +@@ -780,8 +843,8 @@ static HRESULT pulse_test_connect(void) pulse_probe_settings(ml, ctx, 0, &pulse_fmt[1]); g_phys_speakers_mask = 0; @@ -137,7 +137,7 @@ index 583690b..8311cbd 100644 o = pa_context_get_sink_info_list(ctx, &pulse_phys_speakers_cb, NULL); if (o) { -@@ -3554,8 +3617,36 @@ HRESULT WINAPI AUDDRV_GetAudioSessionManager(IMMDevice *device, +@@ -3889,8 +3952,36 @@ HRESULT WINAPI AUDDRV_GetAudioSessionManager(IMMDevice *device, return S_OK; } @@ -152,15 +152,15 @@ index 583690b..8311cbd 100644 + return E_FAIL; + + out->vt = VT_LPWSTR; -+ out->u.pwszVal = CoTaskMemAlloc((strlenW(dev->device) + 1) * sizeof(WCHAR)); -+ if (!out->u.pwszVal) ++ out->pwszVal = CoTaskMemAlloc((strlenW(dev->device) + 1) * sizeof(WCHAR)); ++ if (!out->pwszVal) + return E_OUTOFMEMORY; + -+ strcpyW(out->u.pwszVal, dev->device); ++ strcpyW(out->pwszVal, dev->device); + return S_OK; + } else if (IsEqualPropertyKey(*prop, PKEY_AudioEndpoint_FormFactor)) { + out->vt = VT_UI4; -+ out->u.ulVal = dev->form; ++ out->ulVal = dev->form; + return S_OK; + } + @@ -174,8 +174,8 @@ index 583690b..8311cbd 100644 TRACE("%s, (%s,%u), %p\n", wine_dbgstr_guid(guid), wine_dbgstr_guid(&prop->fmtid), prop->pid, out); if (IsEqualGUID(guid, &pulse_render_guid) && IsEqualPropertyKey(*prop, PKEY_AudioEndpoint_PhysicalSpeakers)) { -@@ -3565,5 +3656,16 @@ HRESULT WINAPI AUDDRV_GetPropValue(GUID *guid, const PROPERTYKEY *prop, PROPVARI - return out->u.ulVal ? S_OK : E_FAIL; +@@ -3900,7 +3991,18 @@ HRESULT WINAPI AUDDRV_GetPropValue(GUID *guid, const PROPERTYKEY *prop, PROPVARI + return out->ulVal ? S_OK : E_FAIL; } - return E_NOTIMPL; @@ -192,6 +192,8 @@ index 583690b..8311cbd 100644 + WARN("Unknown GUID %s\n", debugstr_guid(guid)); + return E_FAIL; } + + -- -1.9.1 +2.30.2 diff --git a/patches/winepulse-PulseAudio_Support/0006-winepulse-fetch-actual-program-name-if-possible.patch b/patches/winepulse-PulseAudio_Support/0006-winepulse-fetch-actual-program-name-if-possible.patch index 1ef52c58..11b493aa 100644 --- a/patches/winepulse-PulseAudio_Support/0006-winepulse-fetch-actual-program-name-if-possible.patch +++ b/patches/winepulse-PulseAudio_Support/0006-winepulse-fetch-actual-program-name-if-possible.patch @@ -1,4 +1,4 @@ -From dfd56158947fe9f032d738f586fba49276a6eccc Mon Sep 17 00:00:00 2001 +From 8cfb9cdbf9448fbd2234a52ff69ac2921702996c Mon Sep 17 00:00:00 2001 From: Mark Harmstone Date: Sun, 21 Dec 2014 23:49:41 +0000 Subject: [PATCH] winepulse: fetch actual program name if possible @@ -14,7 +14,7 @@ Changes by Sebastian Lackner : 2 files changed, 117 insertions(+), 9 deletions(-) diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in -index 3082ed8a69e..16bf0ab21c9 100644 +index d6600632360..2448789dedf 100644 --- a/dlls/winepulse.drv/Makefile.in +++ b/dlls/winepulse.drv/Makefile.in @@ -1,5 +1,5 @@ @@ -23,12 +23,12 @@ index 3082ed8a69e..16bf0ab21c9 100644 +IMPORTS = dxguid uuid winmm user32 advapi32 ole32 version EXTRALIBS = $(PULSE_LIBS) $(PTHREAD_LIBS) EXTRAINCL = $(PULSE_CFLAGS) - EXTRADEFS = -DWINE_NO_NAMELESS_EXTENSION + diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c -index 403d025d43f..f18242e8505 100644 +index 510797a2edc..46f20ce419d 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c -@@ -44,6 +44,7 @@ +@@ -43,6 +43,7 @@ #include "wine/list.h" #include "ole2.h" @@ -36,7 +36,7 @@ index 403d025d43f..f18242e8505 100644 #include "dshow.h" #include "dsound.h" #include "propsys.h" -@@ -560,6 +561,109 @@ static void pulse_probe_settings(pa_mainloop *ml, pa_context *ctx, int render, W +@@ -559,6 +560,109 @@ static void pulse_probe_settings(pa_mainloop *ml, pa_context *ctx, int render, W fmt->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; } @@ -146,7 +146,7 @@ index 403d025d43f..f18242e8505 100644 static HRESULT pulse_connect(void) { int len; -@@ -583,14 +687,18 @@ static HRESULT pulse_connect(void) +@@ -582,14 +686,18 @@ static HRESULT pulse_connect(void) pa_context_unref(pulse_ctx); GetModuleFileNameW(NULL, path, ARRAY_SIZE(path)); @@ -174,5 +174,5 @@ index 403d025d43f..f18242e8505 100644 pulse_ctx = pa_context_new(pa_mainloop_get_api(pulse_ml), str); pa_xfree(str); -- -2.30.2 +2.17.1 diff --git a/patches/winepulse-PulseAudio_Support/0007-winepulse-return-PKEY_AudioEndpoint_PhysicalSpeakers.patch b/patches/winepulse-PulseAudio_Support/0007-winepulse-return-PKEY_AudioEndpoint_PhysicalSpeakers.patch index 9bfe2228..92952798 100644 --- a/patches/winepulse-PulseAudio_Support/0007-winepulse-return-PKEY_AudioEndpoint_PhysicalSpeakers.patch +++ b/patches/winepulse-PulseAudio_Support/0007-winepulse-return-PKEY_AudioEndpoint_PhysicalSpeakers.patch @@ -1,8 +1,8 @@ -From dd288e62fc820d7fe827af7a243e80f4a6e04bd8 Mon Sep 17 00:00:00 2001 +From 64fdf14331c7a50c94c1c7cbd2807fed870b7202 Mon Sep 17 00:00:00 2001 From: Mark Harmstone Date: Wed, 10 Dec 2014 18:08:41 +0000 -Subject: [PATCH 7/7] winepulse: return PKEY_AudioEndpoint_PhysicalSpeakers - device prop +Subject: [PATCH] winepulse: return PKEY_AudioEndpoint_PhysicalSpeakers device + prop Changes by Sebastian Lackner : * Rework logic to get all channel masks in pulse_test_connect. @@ -11,10 +11,10 @@ Changes by Sebastian Lackner : 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c -index becf6a3..6861f94 100644 +index a1379fd97a2..5673a6a678d 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c -@@ -84,11 +84,11 @@ typedef struct _PhysDevice { +@@ -85,11 +85,11 @@ typedef struct _PhysDevice { struct list entry; GUID guid; EndpointFormFactor form; @@ -27,7 +27,7 @@ index becf6a3..6861f94 100644 static struct list g_phys_speakers = LIST_INIT(g_phys_speakers); static struct list g_phys_sources = LIST_INIT(g_phys_sources); -@@ -744,7 +744,8 @@ static BOOL get_device_path(pa_proplist *p, int index, GUID *guid, WCHAR path[12 +@@ -834,7 +834,8 @@ static BOOL get_device_path(pa_proplist *p, int index, GUID *guid, WCHAR path[12 return TRUE; } @@ -37,7 +37,7 @@ index becf6a3..6861f94 100644 { static const WCHAR emptyW[] = {0}; int len = MultiByteToWideChar(CP_UNIXCP, 0, name, -1, NULL, 0); -@@ -753,6 +754,7 @@ static void pulse_add_device(struct list *list, GUID *guid, EndpointFormFactor f +@@ -843,6 +844,7 @@ static void pulse_add_device(struct list *list, GUID *guid, EndpointFormFactor f if (dev) { dev->guid = *guid; dev->form = form; @@ -45,7 +45,7 @@ index becf6a3..6861f94 100644 strcpyW(dev->device, device ? device : emptyW); MultiByteToWideChar(CP_UNIXCP, 0, name, -1, dev->name, len); list_add_tail(list, &dev->entry); -@@ -762,19 +764,25 @@ static void pulse_add_device(struct list *list, GUID *guid, EndpointFormFactor f +@@ -852,19 +854,25 @@ static void pulse_add_device(struct list *list, GUID *guid, EndpointFormFactor f static void pulse_phys_speakers_cb(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { @@ -73,7 +73,7 @@ index becf6a3..6861f94 100644 } } -@@ -790,7 +798,7 @@ static void pulse_phys_sources_cb(pa_context *c, const pa_source_info *i, int eo +@@ -880,7 +888,7 @@ static void pulse_phys_sources_cb(pa_context *c, const pa_source_info *i, int eo CoCreateGuid(&guid); if (!get_device_path(i->proplist, i->index, &guid, device)) device[0] = 0; @@ -82,7 +82,7 @@ index becf6a3..6861f94 100644 } } -@@ -860,9 +868,8 @@ static HRESULT pulse_test_connect(void) +@@ -950,9 +958,8 @@ static HRESULT pulse_test_connect(void) pulse_probe_settings(ml, ctx, 1, &pulse_fmt[0]); pulse_probe_settings(ml, ctx, 0, &pulse_fmt[1]); @@ -94,31 +94,31 @@ index becf6a3..6861f94 100644 o = pa_context_get_sink_info_list(ctx, &pulse_phys_speakers_cb, NULL); if (o) { -@@ -3745,6 +3752,10 @@ static HRESULT pulse_device_get_prop_value(PhysDevice *dev, const PROPERTYKEY *p +@@ -4081,6 +4088,10 @@ static HRESULT pulse_device_get_prop_value(PhysDevice *dev, const PROPERTYKEY *p out->vt = VT_UI4; - out->u.ulVal = dev->form; + out->ulVal = dev->form; return S_OK; + } else if (IsEqualPropertyKey(*prop, PKEY_AudioEndpoint_PhysicalSpeakers)) { + out->vt = VT_UI4; -+ out->u.ulVal = dev->channel_mask; -+ return out->u.ulVal ? S_OK : E_FAIL; ++ out->ulVal = dev->channel_mask; ++ return out->ulVal ? S_OK : E_FAIL; } return E_NOTIMPL; -@@ -3756,13 +3767,6 @@ HRESULT WINAPI AUDDRV_GetPropValue(GUID *guid, const PROPERTYKEY *prop, PROPVARI +@@ -4092,13 +4103,6 @@ HRESULT WINAPI AUDDRV_GetPropValue(GUID *guid, const PROPERTYKEY *prop, PROPVARI TRACE("%s, (%s,%u), %p\n", wine_dbgstr_guid(guid), wine_dbgstr_guid(&prop->fmtid), prop->pid, out); - if (IsEqualGUID(guid, &pulse_render_guid) && IsEqualPropertyKey(*prop, PKEY_AudioEndpoint_PhysicalSpeakers)) { - out->vt = VT_UI4; -- out->u.ulVal = g_phys_speakers_mask; +- out->ulVal = g_phys_speakers_mask; - -- return out->u.ulVal ? S_OK : E_FAIL; +- return out->ulVal ? S_OK : E_FAIL; - } - LIST_FOR_EACH_ENTRY(dev, &g_phys_speakers, PhysDevice, entry) { if (IsEqualGUID(guid, &dev->guid)) return pulse_device_get_prop_value(dev, prop, out); -- -1.9.1 +2.30.2 diff --git a/staging/upstream-commit b/staging/upstream-commit index 9bba7831..78713583 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -f69c8f018188af49d5a3916f7bb7e3ab984fd3ec +12cfe6826773708e3b15f73b9674ccb959000d8b