diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index f79bb9d6..6837e690 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -275,6 +275,7 @@ patch_enable_all () enable_windows_gaming_input_dll="$1" enable_windows_globalization_dll="$1" enable_windows_media_speech_dll="$1" + enable_windows_networking_connectivity_dll="$1" enable_windowscodecs_GIF_Encoder="$1" enable_windowscodecs_TIFF_Support="$1" enable_wine_inf_Directory_ContextMenuHandlers="$1" @@ -918,6 +919,9 @@ patch_enable () windows.media.speech.dll) enable_windows_media_speech_dll="$2" ;; + windows.networking.connectivity.dll) + enable_windows_networking_connectivity_dll="$2" + ;; windowscodecs-GIF_Encoder) enable_windowscodecs_GIF_Encoder="$2" ;; @@ -1471,6 +1475,13 @@ if test "$enable_wineboot_ProxySettings" -eq 1; then enable_wineboot_drivers_etc_Stubs=1 fi +if test "$enable_windows_networking_connectivity_dll" -eq 1; then + if test "$enable_windows_globalization_dll" -gt 1; then + abort "Patchset windows.globalization-dll disabled, but windows.networking.connectivity.dll depends on that." + fi + enable_windows_globalization_dll=1 +fi + if test "$enable_windows_globalization_dll" -eq 1; then if test "$enable_windows_media_speech_dll" -gt 1; then abort "Patchset windows.media.speech.dll disabled, but windows.globalization-dll depends on that." @@ -4462,6 +4473,25 @@ if test "$enable_windows_globalization_dll" -eq 1; then patch_apply windows.globalization-dll/0001-windows.globalization-Add-stub-dll.patch fi +# Patchset windows.networking.connectivity.dll +# | +# | This patchset has the following (direct or indirect) dependencies: +# | * windows.gaming.input-dll, windows.media.speech.dll, windows.globalization-dll +# | +# | This patchset fixes the following Wine bugs: +# | * [#46534] windows.networking.connectivity: New DLL +# | +# | Modified files: +# | * configure.ac, dlls/windows.networking.connectivity.dll/Makefile.in, +# | dlls/windows.networking.connectivity.dll/windows.networking.connectivity.spec, +# | dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c, loader/wine.inf.in +# | +if test "$enable_windows_networking_connectivity_dll" -eq 1; then + patch_apply windows.networking.connectivity.dll/0001-windows.networking.connectivity-Add-stub-dll.patch + patch_apply windows.networking.connectivity.dll/0002-windows.networking.connectivity-Implement-IActivatio.patch + patch_apply windows.networking.connectivity.dll/0003-windows.networking.connectivity-Implement-INetworkIn.patch +fi + # Patchset windowscodecs-GIF_Encoder # | # | Modified files: diff --git a/patches/windows.networking.connectivity.dll/0001-windows.networking.connectivity-Add-stub-dll.patch b/patches/windows.networking.connectivity.dll/0001-windows.networking.connectivity-Add-stub-dll.patch new file mode 100644 index 00000000..99f64846 --- /dev/null +++ b/patches/windows.networking.connectivity.dll/0001-windows.networking.connectivity-Add-stub-dll.patch @@ -0,0 +1,117 @@ +From 328a4a388bbfb8a2b3d64a673a7206f5636cc3e5 Mon Sep 17 00:00:00 2001 +From: Esdras Tarsis +Date: Wed, 2 Sep 2020 23:41:19 -0300 +Subject: [PATCH 1/3] windows.networking.connectivity: Add stub dll. + +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46534 +Signed-off-by: Esdras Tarsis +--- + configure.ac | 1 + + .../Makefile.in | 7 +++ + .../windows.networking.connectivity.spec | 3 ++ + .../windows.networking.connectivity_main.c | 54 +++++++++++++++++++ + 4 files changed, 65 insertions(+) + create mode 100644 dlls/windows.networking.connectivity.dll/Makefile.in + create mode 100644 dlls/windows.networking.connectivity.dll/windows.networking.connectivity.spec + create mode 100644 dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c + +diff --git a/configure.ac b/configure.ac +index 3ccf9436b39..d7c4f5abf6d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3890,6 +3890,7 @@ 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.dll) ++WINE_CONFIG_MAKEFILE(dlls/windows.networking.connectivity.dll) + WINE_CONFIG_MAKEFILE(dlls/windowscodecs) + WINE_CONFIG_MAKEFILE(dlls/windowscodecs/tests) + WINE_CONFIG_MAKEFILE(dlls/windowscodecsext) +diff --git a/dlls/windows.networking.connectivity.dll/Makefile.in b/dlls/windows.networking.connectivity.dll/Makefile.in +new file mode 100644 +index 00000000000..c1b3b1b332c +--- /dev/null ++++ b/dlls/windows.networking.connectivity.dll/Makefile.in +@@ -0,0 +1,7 @@ ++MODULE = windows.networking.connectivity.dll ++IMPORTS = combase uuid ++ ++EXTRADLLFLAGS = -mno-cygwin ++ ++C_SRCS = \ ++ windows.networking.connectivity_main.c +\ No newline at end of file +diff --git a/dlls/windows.networking.connectivity.dll/windows.networking.connectivity.spec b/dlls/windows.networking.connectivity.dll/windows.networking.connectivity.spec +new file mode 100644 +index 00000000000..4b286869e02 +--- /dev/null ++++ b/dlls/windows.networking.connectivity.dll/windows.networking.connectivity.spec +@@ -0,0 +1,3 @@ ++@ stdcall -private DllCanUnloadNow() ++@ stdcall -private DllGetActivationFactory(ptr ptr) ++@ stdcall -private DllGetClassObject(ptr ptr ptr) +\ No newline at end of file +diff --git a/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c b/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c +new file mode 100644 +index 00000000000..8737ac441bc +--- /dev/null ++++ b/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c +@@ -0,0 +1,54 @@ ++#include ++ ++#define COBJMACROS ++#include "windef.h" ++#include "winbase.h" ++#include "winstring.h" ++#include "wine/debug.h" ++#include "activation.h" ++#include "objbase.h" ++#include "initguid.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(network); ++ ++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); ++} ++ ++BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) ++{ ++ TRACE("(%p, %u, %p)\n", instance, reason, reserved); ++ ++ switch (reason) ++ { ++ case DLL_WINE_PREATTACH: ++ return FALSE; /* prefer native version */ ++ case DLL_PROCESS_ATTACH: ++ DisableThreadLibraryCalls(instance); ++ break; ++ } ++ ++ return TRUE; ++} ++ ++HRESULT WINAPI DllCanUnloadNow(void) ++{ ++ return S_FALSE; ++} ++ ++HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID riid, LPVOID *object) ++{ ++ FIXME("clsid %s, riid %s, object %p stub!\n", debugstr_guid(clsid), debugstr_guid(riid), object); ++ return CLASS_E_CLASSNOTAVAILABLE; ++} ++ ++HRESULT WINAPI DllGetActivationFactory(HSTRING classid, IActivationFactory **factory) ++{ ++ FIXME("classid %s, factory %p stub!\n", debugstr_hstring(classid), factory); ++ return E_NOINTERFACE; ++} +\ No newline at end of file +-- +2.28.0 + diff --git a/patches/windows.networking.connectivity.dll/0002-windows.networking.connectivity-Implement-IActivatio.patch b/patches/windows.networking.connectivity.dll/0002-windows.networking.connectivity-Implement-IActivatio.patch new file mode 100644 index 00000000..b5c1d43e --- /dev/null +++ b/patches/windows.networking.connectivity.dll/0002-windows.networking.connectivity-Implement-IActivatio.patch @@ -0,0 +1,121 @@ +From 221174d37d4029950f900268a7093e3d48dd078f Mon Sep 17 00:00:00 2001 +From: Esdras Tarsis +Date: Wed, 2 Sep 2020 23:53:28 -0300 +Subject: [PATCH 2/3] windows.networking.connectivity: Implement + IActivationFactory stubs. + +Signed-off-by: Esdras Tarsis +--- + .../windows.networking.connectivity_main.c | 90 ++++++++++++++++++- + 1 file changed, 88 insertions(+), 2 deletions(-) + +diff --git a/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c b/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c +index 8737ac441bc..8ed544e5644 100644 +--- a/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c ++++ b/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c +@@ -20,6 +20,90 @@ static const char *debugstr_hstring(HSTRING hstr) + return wine_dbgstr_wn(str, len); + } + ++struct windows_networking_connectivity ++{ ++ IActivationFactory IActivationFactory_iface; ++ LONG refcount; ++}; ++ ++static inline struct windows_networking_connectivity *impl_from_IActivationFactory(IActivationFactory *iface) ++{ ++ return CONTAINING_RECORD(iface, struct windows_networking_connectivity, IActivationFactory_iface); ++} ++ ++static HRESULT STDMETHODCALLTYPE windows_networking_connectivity_QueryInterface( ++ IActivationFactory *iface, REFIID iid, void **object) ++{ ++ TRACE("iface %p, iid %s, object %p stub!\n", iface, debugstr_guid(iid), object); ++ *object = NULL; ++ return E_NOINTERFACE; ++} ++ ++static ULONG STDMETHODCALLTYPE windows_networking_connectivity_AddRef( ++ IActivationFactory *iface) ++{ ++ struct windows_networking_connectivity *impl = impl_from_IActivationFactory(iface); ++ ULONG rc = InterlockedIncrement(&impl->refcount); ++ TRACE("%p increasing refcount to %u.\n", impl, rc); ++ return rc; ++} ++ ++static ULONG STDMETHODCALLTYPE windows_networking_connectivity_Release( ++ IActivationFactory *iface) ++{ ++ struct windows_networking_connectivity *impl = impl_from_IActivationFactory(iface); ++ ULONG rc = InterlockedDecrement(&impl->refcount); ++ TRACE("%p decreasing refcount to %u.\n", impl, rc); ++ return rc; ++} ++ ++static HRESULT STDMETHODCALLTYPE windows_networking_connectivity_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_networking_connectivity_GetRuntimeClassName( ++ IActivationFactory *iface, HSTRING *class_name) ++{ ++ FIXME("iface %p, class_name %p stub!\n", iface, class_name); ++ return E_NOTIMPL; ++} ++ ++static HRESULT STDMETHODCALLTYPE windows_networking_connectivity_GetTrustLevel( ++ IActivationFactory *iface, TrustLevel *trust_level) ++{ ++ FIXME("iface %p, trust_level %p stub!\n", iface, trust_level); ++ return E_NOTIMPL; ++} ++ ++static HRESULT STDMETHODCALLTYPE windows_networking_connectivity_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_networking_connectivity_QueryInterface, ++ windows_networking_connectivity_AddRef, ++ windows_networking_connectivity_Release, ++ /* IInspectable methods */ ++ windows_networking_connectivity_GetIids, ++ windows_networking_connectivity_GetRuntimeClassName, ++ windows_networking_connectivity_GetTrustLevel, ++ /* IActivationFactory methods */ ++ windows_networking_connectivity_ActivateInstance, ++}; ++ ++static struct windows_networking_connectivity windows_networking_connectivity = ++{ ++ {&activation_factory_vtbl}, ++ 0 ++}; ++ + BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) + { + TRACE("(%p, %u, %p)\n", instance, reason, reserved); +@@ -49,6 +133,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID riid, LPVOID *object) + + HRESULT WINAPI DllGetActivationFactory(HSTRING classid, IActivationFactory **factory) + { +- FIXME("classid %s, factory %p stub!\n", debugstr_hstring(classid), factory); +- return E_NOINTERFACE; ++ TRACE("classid %s, factory %p.\n", debugstr_hstring(classid), factory); ++ *factory = &windows_networking_connectivity.IActivationFactory_iface; ++ IUnknown_AddRef(*factory); ++ return S_OK; + } +\ No newline at end of file +-- +2.28.0 + diff --git a/patches/windows.networking.connectivity.dll/0003-windows.networking.connectivity-Implement-INetworkIn.patch b/patches/windows.networking.connectivity.dll/0003-windows.networking.connectivity-Implement-INetworkIn.patch new file mode 100644 index 00000000..765f4862 --- /dev/null +++ b/patches/windows.networking.connectivity.dll/0003-windows.networking.connectivity-Implement-INetworkIn.patch @@ -0,0 +1,378 @@ +From b9e7c78901421dd486ef407a6f09c280ef2858f1 Mon Sep 17 00:00:00 2001 +From: Esdras Tarsis +Date: Wed, 2 Sep 2020 23:57:44 -0300 +Subject: [PATCH 3/3] windows.networking.connectivity: Implement + INetworkInformationStatics stubs. + +Signed-off-by: Esdras Tarsis +--- + .../windows.networking.connectivity_main.c | 319 ++++++++++++++++++ + loader/wine.inf.in | 1 + + 2 files changed, 320 insertions(+) + +diff --git a/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c b/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c +index 8ed544e5644..b8507acf558 100644 +--- a/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c ++++ b/dlls/windows.networking.connectivity.dll/windows.networking.connectivity_main.c +@@ -20,9 +20,127 @@ static const char *debugstr_hstring(HSTRING hstr) + return wine_dbgstr_wn(str, len); + } + ++DEFINE_GUID(IID_INetworkInformationStatics,0x5074f851,0x950d,0x4165,0x9c,0x15,0x36,0x56,0x19,0x48,0x1e,0xea); ++ ++typedef struct EventRegistrationToken ++{ ++ __int64 value; ++} EventRegistrationToken; ++ ++typedef struct IVectorView IVectorView; ++ ++typedef struct IVectorViewVtbl ++{ ++ /*** IUnknown methods ***/ ++ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ++ IVectorView *This, ++ REFIID riid, ++ void **ppvObject); ++ ++ ULONG (STDMETHODCALLTYPE *AddRef)( ++ IVectorView *This); ++ ++ ULONG (STDMETHODCALLTYPE *Release)( ++ IVectorView *This); ++ ++ /*** IInspectable methods ***/ ++ HRESULT (STDMETHODCALLTYPE *GetIids)( ++ IVectorView *This, ++ ULONG *iidCount, ++ IID **iids); ++ ++ HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)( ++ IVectorView *This, ++ HSTRING *className); ++ ++ HRESULT (STDMETHODCALLTYPE *GetTrustLevel)( ++ IVectorView *This, ++ TrustLevel *trustLevel); ++ ++ /*** IVectorView methods ***/ ++ HRESULT (STDMETHODCALLTYPE *GetAt)( ++ IVectorView *This, ++ ULONG index, ++ /* T */ void *out_value); ++ ++ HRESULT (STDMETHODCALLTYPE *get_Size)( ++ IVectorView *This, ++ ULONG *out_value); ++ ++ HRESULT (STDMETHODCALLTYPE *IndexOf)( ++ IVectorView *This, ++ /* T */ void *value, ++ ULONG *index, ++ BOOLEAN *out_value); ++ ++ HRESULT (STDMETHODCALLTYPE *GetMany)( ++ IVectorView *This, ++ ULONG start_index, ++ /* T[] */ void **items, ++ UINT *out_value); ++} IVectorViewVtbl; ++ ++struct IVectorView ++{ ++ CONST_VTBL IVectorViewVtbl* lpVtbl; ++}; ++ ++typedef struct INetworkInformationStatics INetworkInformationStatics; ++ ++typedef struct INetworkInformationStaticsVtbl ++{ ++ BEGIN_INTERFACE ++ ++ /*** IUnknown methods ***/ ++ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ++ INetworkInformationStatics *This, ++ REFIID riid, ++ void **ppvObject); ++ ++ ULONG (STDMETHODCALLTYPE *AddRef)( ++ INetworkInformationStatics *This); ++ ++ ULONG (STDMETHODCALLTYPE *Release)( ++ INetworkInformationStatics *This); ++ ++ /*** IInspectable methods ***/ ++ HRESULT (STDMETHODCALLTYPE *GetIids)( ++ INetworkInformationStatics *This, ++ ULONG *iidCount, ++ IID **iids); ++ ++ HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)( ++ INetworkInformationStatics *This, ++ HSTRING *className); ++ ++ HRESULT (STDMETHODCALLTYPE *GetTrustLevel)( ++ INetworkInformationStatics *This, ++ TrustLevel *trustLevel); ++ ++ /*** INetworkInformationStatics methods ***/ ++ HRESULT (STDMETHODCALLTYPE *eventadd_NetworkStatusChanged)( ++ INetworkInformationStatics *This, ++ /* Windows.Foundation.EventHandler */ ++ void *value, ++ EventRegistrationToken* token); ++ ++ HRESULT (STDMETHODCALLTYPE *eventremove_NetworkStatusChanged)( ++ INetworkInformationStatics *This, ++ EventRegistrationToken token); ++ ++ END_INTERFACE ++} INetworkInformationStaticsVtbl; ++ ++struct INetworkInformationStatics ++{ ++ CONST_VTBL INetworkInformationStaticsVtbl* lpVtbl; ++}; ++ + struct windows_networking_connectivity + { + IActivationFactory IActivationFactory_iface; ++ INetworkInformationStatics INetworkInformationStatics_iface; ++ IVectorView IVectorView_iface; + LONG refcount; + }; + +@@ -31,10 +149,209 @@ static inline struct windows_networking_connectivity *impl_from_IActivationFacto + return CONTAINING_RECORD(iface, struct windows_networking_connectivity, IActivationFactory_iface); + } + ++static inline struct windows_networking_connectivity *impl_from_INetworkInformationStatics(INetworkInformationStatics *iface) ++{ ++ return CONTAINING_RECORD(iface, struct windows_networking_connectivity, INetworkInformationStatics_iface); ++} ++ ++static inline struct windows_networking_connectivity *impl_from_IVectorView(IVectorView *iface) ++{ ++ return CONTAINING_RECORD(iface, struct windows_networking_connectivity, IVectorView_iface); ++} ++ ++static HRESULT STDMETHODCALLTYPE vector_view_QueryInterface( ++ IVectorView *iface, REFIID iid, void **object) ++{ ++ TRACE("iface %p, iid %s, object %p stub!\n", iface, debugstr_guid(iid), object); ++ IUnknown_AddRef(iface); ++ *object = iface; ++ return S_OK; ++} ++ ++static ULONG STDMETHODCALLTYPE vector_view_AddRef( ++ IVectorView *iface) ++{ ++ struct windows_networking_connectivity *impl = impl_from_IVectorView(iface); ++ ULONG rc = InterlockedIncrement(&impl->refcount); ++ TRACE("%p increasing refcount to %u.\n", impl, rc); ++ return rc; ++} ++ ++static ULONG STDMETHODCALLTYPE vector_view_Release( ++ IVectorView *iface) ++{ ++ struct windows_networking_connectivity *impl = impl_from_IVectorView(iface); ++ ULONG rc = InterlockedDecrement(&impl->refcount); ++ TRACE("%p decreasing refcount to %u.\n", impl, rc); ++ return rc; ++} ++ ++static HRESULT STDMETHODCALLTYPE vector_view_GetIids( ++ IVectorView *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 vector_view_GetRuntimeClassName( ++ IVectorView *iface, HSTRING *class_name) ++{ ++ FIXME("iface %p, class_name %p stub!\n", iface, class_name); ++ return S_OK; ++} ++ ++static HRESULT STDMETHODCALLTYPE vector_view_GetTrustLevel( ++ IVectorView *iface, TrustLevel *trust_level) ++{ ++ FIXME("iface %p, trust_level %p stub!\n", iface, trust_level); ++ return E_NOTIMPL; ++} ++ ++static HRESULT STDMETHODCALLTYPE vector_view_GetAt( ++ IVectorView *iface, ULONG index, void *out_value) ++{ ++ FIXME("iface %p, index %#x, out_value %p stub!\n", iface, index, out_value); ++ return S_OK; ++} ++ ++static HRESULT STDMETHODCALLTYPE vector_view_get_Size( ++ IVectorView *iface, ULONG *out_value) ++{ ++ FIXME("iface %p, out_value %p stub!\n", iface, out_value); ++ *out_value = 0; ++ return S_OK; ++} ++ ++static HRESULT STDMETHODCALLTYPE vector_view_IndexOf( ++ IVectorView *iface, void *value, ULONG *index, BOOLEAN *out_value) ++{ ++ FIXME("iface %p, value %p, index %p, out_value %p stub!\n", iface, value, index, out_value); ++ *out_value = FALSE; ++ return S_OK; ++} ++ ++static HRESULT STDMETHODCALLTYPE vector_view_GetMany( ++ IVectorView *iface, ULONG start_index, void **items, UINT *out_value) ++{ ++ FIXME("iface %p, start_index %#x, items %p, out_value %p stub!\n", iface, start_index, items, out_value); ++ *out_value = 0; ++ return S_OK; ++} ++ ++static const struct IVectorViewVtbl vector_view_vtbl = ++{ ++ vector_view_QueryInterface, ++ vector_view_AddRef, ++ vector_view_Release, ++ /* IInspectable methods */ ++ vector_view_GetIids, ++ vector_view_GetRuntimeClassName, ++ vector_view_GetTrustLevel, ++ /*** IVectorView methods ***/ ++ vector_view_GetAt, ++ vector_view_get_Size, ++ vector_view_IndexOf, ++ vector_view_GetMany, ++}; ++ ++static HRESULT STDMETHODCALLTYPE network_information_statics_QueryInterface( ++ INetworkInformationStatics *iface, REFIID iid, void **object) ++{ ++ TRACE("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 network_information_statics_AddRef( ++ INetworkInformationStatics *iface) ++{ ++ struct windows_networking_connectivity *impl = impl_from_INetworkInformationStatics(iface); ++ ULONG rc = InterlockedIncrement(&impl->refcount); ++ TRACE("%p increasing refcount to %u.\n", impl, rc); ++ return rc; ++} ++ ++static ULONG STDMETHODCALLTYPE network_information_statics_Release( ++ INetworkInformationStatics *iface) ++{ ++ struct windows_networking_connectivity *impl = impl_from_INetworkInformationStatics(iface); ++ ULONG rc = InterlockedDecrement(&impl->refcount); ++ TRACE("%p decreasing refcount to %u.\n", impl, rc); ++ return rc; ++} ++ ++static HRESULT STDMETHODCALLTYPE network_information_statics_GetIids( ++ INetworkInformationStatics *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 network_information_statics_GetRuntimeClassName( ++ INetworkInformationStatics *iface, HSTRING *class_name) ++{ ++ FIXME("iface %p, class_name %p stub!\n", iface, class_name); ++ return E_NOTIMPL; ++} ++ ++static HRESULT STDMETHODCALLTYPE network_information_statics_GetTrustLevel( ++ INetworkInformationStatics *iface, TrustLevel *trust_level) ++{ ++ FIXME("iface %p, trust_level %p stub!\n", iface, trust_level); ++ return E_NOTIMPL; ++} ++ ++static HRESULT STDMETHODCALLTYPE network_information_statics_eventadd_NetworkStatusChanged( ++ INetworkInformationStatics *iface, void *value, EventRegistrationToken* token) ++{ ++ FIXME("iface %p, value %p, token %p stub!\n", iface, value, token); ++ return S_OK; ++} ++ ++static HRESULT STDMETHODCALLTYPE network_information_statics_eventremove_NetworkStatusChanged( ++ INetworkInformationStatics *iface, EventRegistrationToken token) ++{ ++ FIXME("iface %p, token %#I64x stub!\n", iface, token.value); ++ return S_OK; ++} ++ ++static const struct INetworkInformationStaticsVtbl network_information_statics_vtbl = ++{ ++ network_information_statics_QueryInterface, ++ network_information_statics_AddRef, ++ network_information_statics_Release, ++ /* IInspectable methods */ ++ network_information_statics_GetIids, ++ network_information_statics_GetRuntimeClassName, ++ network_information_statics_GetTrustLevel, ++ /* INetworkInformationStatics methods */ ++ network_information_statics_eventadd_NetworkStatusChanged, ++ network_information_statics_eventremove_NetworkStatusChanged, ++}; ++ + static HRESULT STDMETHODCALLTYPE windows_networking_connectivity_QueryInterface( + IActivationFactory *iface, REFIID iid, void **object) + { ++ struct windows_networking_connectivity *impl = impl_from_IActivationFactory(iface); + TRACE("iface %p, iid %s, object %p stub!\n", iface, debugstr_guid(iid), object); ++ ++ if (IsEqualGUID(iid, &IID_INetworkInformationStatics)) ++ { ++ IUnknown_AddRef(iface); ++ *object = &impl->INetworkInformationStatics_iface; ++ return S_OK; ++ } ++ ++ WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); + *object = NULL; + return E_NOINTERFACE; + } +@@ -101,6 +418,8 @@ static const struct IActivationFactoryVtbl activation_factory_vtbl = + static struct windows_networking_connectivity windows_networking_connectivity = + { + {&activation_factory_vtbl}, ++ {&network_information_statics_vtbl}, ++ {&vector_view_vtbl}, + 0 + }; + +diff --git a/loader/wine.inf.in b/loader/wine.inf.in +index 164d9f3df61..d3bae5ee3ce 100644 +--- a/loader/wine.inf.in ++++ b/loader/wine.inf.in +@@ -732,6 +732,7 @@ HKLM,%MciExtStr%,"wvx",,"MPEGVideo" + 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.Media.SpeechSynthesis.SpeechSynthesizer,"DllPath",2,"Windows.Media.Speech.dll" ++HKLM,Software\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Networking.Connectivity.NetworkInformation,"DllPath",2,"Windows.Networking.Connectivity.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" +-- +2.28.0 + diff --git a/patches/windows.networking.connectivity.dll/definition b/patches/windows.networking.connectivity.dll/definition new file mode 100644 index 00000000..4f248dd0 --- /dev/null +++ b/patches/windows.networking.connectivity.dll/definition @@ -0,0 +1,2 @@ +Fixes: [46534] windows.networking.connectivity: New DLL +Depends: windows.globalization-dll