From 93858d787d02053840dc388e37dc0c9e1acb8b1a Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 2 Mar 2021 09:25:06 +0300 Subject: [PATCH] wbemdisp: Pass context value to ConnectServer(). Signed-off-by: Nikolay Sivov Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard --- dlls/wbemdisp/locator.c | 43 ++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/dlls/wbemdisp/locator.c b/dlls/wbemdisp/locator.c index 8c37cc92eb1..e2bcf09c6e3 100644 --- a/dlls/wbemdisp/locator.c +++ b/dlls/wbemdisp/locator.c @@ -35,6 +35,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(wbemdisp); +struct namedvalueset +{ + ISWbemNamedValueSet ISWbemNamedValueSet_iface; + LONG refs; + + IWbemContext *context; +}; + +static struct namedvalueset *unsafe_valueset_impl_from_IDispatch(IDispatch *iface); + +static IWbemContext * unsafe_get_context_from_namedvalueset( IDispatch *disp ) +{ + struct namedvalueset *valueset = unsafe_valueset_impl_from_IDispatch( disp ); + return valueset ? valueset->context : NULL; +} + static WCHAR *heap_strdupW( const WCHAR *src ) { WCHAR *dst; @@ -2751,6 +2767,7 @@ static HRESULT WINAPI locator_ConnectServer( { struct locator *locator = impl_from_ISWbemLocator( iface ); IWbemServices *services; + IWbemContext *context; BSTR resource; HRESULT hr; @@ -2758,8 +2775,6 @@ static HRESULT WINAPI locator_ConnectServer( debugstr_w(strNamespace), debugstr_w(strUser), strPassword, debugstr_w(strLocale), debugstr_w(strAuthority), iSecurityFlags, objWbemNamedValueSet, objWbemServices ); - if (objWbemNamedValueSet) FIXME( "context not supported\n" ); - if (!locator->locator) { hr = CoCreateInstance( &CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, &IID_IWbemLocator, @@ -2767,9 +2782,11 @@ static HRESULT WINAPI locator_ConnectServer( if (hr != S_OK) return hr; } + context = unsafe_get_context_from_namedvalueset( objWbemNamedValueSet ); + if (!(resource = build_resource_string( strServer, strNamespace ))) return E_OUTOFMEMORY; hr = IWbemLocator_ConnectServer( locator->locator, resource, strUser, strPassword, strLocale, - iSecurityFlags, strAuthority, NULL, &services ); + iSecurityFlags, strAuthority, context, &services ); SysFreeString( resource ); if (hr != S_OK) return hr; @@ -3047,14 +3064,6 @@ static HRESULT ISWbemSecurity_create( ISWbemSecurity **obj ) return S_OK; } -struct namedvalueset -{ - ISWbemNamedValueSet ISWbemNamedValueSet_iface; - LONG refs; - - IWbemContext *context; -}; - struct namedvalue { ISWbemNamedValue ISWbemNamedValue_iface; @@ -3478,6 +3487,18 @@ static const ISWbemNamedValueSetVtbl namedvalueset_vtbl = namedvalueset_DeleteAll, }; +static struct namedvalueset *unsafe_valueset_impl_from_IDispatch(IDispatch *iface) +{ + if (!iface) + return NULL; + if (iface->lpVtbl != (IDispatchVtbl *)&namedvalueset_vtbl) + { + FIXME( "External implementations are not supported.\n" ); + return NULL; + } + return CONTAINING_RECORD(iface, struct namedvalueset, ISWbemNamedValueSet_iface); +} + HRESULT SWbemNamedValueSet_create( void **obj ) { struct namedvalueset *set;