Rebase against 12cfe6826773708e3b15f73b9674ccb959000d8b.

This commit is contained in:
Zebediah Figura 2021-03-24 16:48:35 -05:00
parent a644c49d6d
commit f20c33fa04
10 changed files with 85 additions and 664 deletions

View File

@ -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?= <michael@fds-team.de>
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

View File

@ -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 <sebastian@fds-team.de>
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

View File

@ -51,7 +51,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "f69c8f018188af49d5a3916f7bb7e3ab984fd3ec"
echo "12cfe6826773708e3b15f73b9674ccb959000d8b"
}
# Show version information

View File

@ -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?= <michael@fds-team.de>
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

View File

@ -1,258 +0,0 @@
From 7d845fec580f156ed26a0a200ddd1611e54c1ee4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
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 <stdarg.h>
+
+#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

View File

@ -1,323 +0,0 @@
From f184cbcf4416e8a5365bd6c63cc5649e9e53393c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
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<boolean>;
interface Windows.Foundation.IAsyncOperation<boolean>;
+ interface Windows.Foundation.Collections.IVectorView<HSTRING>;
}
}
}
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<HSTRING>** value);
+ [propget] HRESULT Clocks([out, retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
+ [propget] HRESULT Currencies([out, retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
+ [propget] HRESULT Languages([out, retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
+ [propget] HRESULT HomeGeographicRegion([out, retval] HSTRING* value);
+ [propget] HRESULT WeekStartsOn([out, retval] Windows.Globalization.DayOfWeek* value);
+ }
+
+ }
+ }
+}
--
2.20.1

View File

@ -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 <mark@harmstone.com>
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

View File

@ -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 <mark@harmstone.com>
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 <sebastian@fds-team.de>:
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

View File

@ -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 <mark@harmstone.com>
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 <sebastian@fds-team.de>:
* Rework logic to get all channel masks in pulse_test_connect.
@ -11,10 +11,10 @@ Changes by Sebastian Lackner <sebastian@fds-team.de>:
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

View File

@ -1 +1 @@
f69c8f018188af49d5a3916f7bb7e3ab984fd3ec
12cfe6826773708e3b15f73b9674ccb959000d8b