From 1d4a6469bbcedb36ac1baa2611b001c377745717 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sun, 26 Feb 2017 20:10:35 +0000 Subject: [PATCH] [WBEMDISP] Sync with Wine Staging 2.2. CORE-12823 11ebda0 wbemdisp: Add ISWbemSecurity stub interface. 61f0bda wbemdisp: Implement ISWbemObjectSet::ItemIndex. b47462d wbemdisp: Return interface pointers from QI, not object pointers. svn path=/trunk/; revision=73978 --- reactos/dll/win32/wbemdisp/locator.c | 43 ++++++++++++++++++++++++---- reactos/media/doc/README.WINE | 2 +- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/wbemdisp/locator.c b/reactos/dll/win32/wbemdisp/locator.c index 28277795c99..6353d247534 100644 --- a/reactos/dll/win32/wbemdisp/locator.c +++ b/reactos/dll/win32/wbemdisp/locator.c @@ -142,7 +142,7 @@ static HRESULT WINAPI object_QueryInterface( IsEqualGUID( riid, &IID_IDispatch ) || IsEqualGUID( riid, &IID_IUnknown )) { - *ppvObject = object; + *ppvObject = iface; } else { @@ -386,7 +386,7 @@ static HRESULT WINAPI objectset_QueryInterface( IsEqualGUID( riid, &IID_IDispatch ) || IsEqualGUID( riid, &IID_IUnknown )) { - *ppvObject = objectset; + *ppvObject = iface; } else { @@ -525,8 +525,39 @@ static HRESULT WINAPI objectset_ItemIndex( LONG lIndex, ISWbemObject **objWbemObject ) { - FIXME( "\n" ); - return E_NOTIMPL; + struct objectset *objectset = impl_from_ISWbemObjectSet( iface ); + LONG count; + HRESULT hr; + IEnumVARIANT *enum_var; + VARIANT var; + + TRACE( "%p, %d, %p\n", objectset, lIndex, objWbemObject ); + + *objWbemObject = NULL; + hr = ISWbemObjectSet_get_Count( iface, &count ); + if (FAILED(hr)) return hr; + + if (lIndex >= count) return WBEM_E_NOT_FOUND; + + hr = ISWbemObjectSet_get__NewEnum( iface, (IUnknown **)&enum_var ); + if (FAILED(hr)) return hr; + + IEnumVARIANT_Reset( enum_var ); + hr = IEnumVARIANT_Skip( enum_var, lIndex ); + if (SUCCEEDED(hr)) + hr = IEnumVARIANT_Next( enum_var, 1, &var, NULL ); + IEnumVARIANT_Release( enum_var ); + + if (SUCCEEDED(hr)) + { + if (V_VT( &var ) == VT_DISPATCH) + hr = IDispatch_QueryInterface( V_DISPATCH( &var ), &IID_ISWbemObject, (void **)objWbemObject ); + else + hr = WBEM_E_NOT_FOUND; + VariantClear( &var ); + } + + return hr; } static const ISWbemObjectSetVtbl objectset_vtbl = @@ -617,7 +648,7 @@ static HRESULT WINAPI enumvar_QueryInterface( if (IsEqualGUID( riid, &IID_IEnumVARIANT ) || IsEqualGUID( riid, &IID_IUnknown )) { - *ppvObject = enumvar; + *ppvObject = iface; } else { @@ -750,7 +781,7 @@ static HRESULT WINAPI services_QueryInterface( IsEqualGUID( riid, &IID_IDispatch ) || IsEqualGUID( riid, &IID_IUnknown )) { - *ppvObject = services; + *ppvObject = iface; } else { diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 25e96498c56..2c27fa61c46 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -194,7 +194,7 @@ reactos/dll/win32/uxtheme # Forked reactos/dll/win32/vbscript # Synced to WineStaging-1.9.23 reactos/dll/win32/version # Synced to WineStaging-1.9.11 reactos/dll/win32/vssapi # Synced to WineStaging-1.9.11 -reactos/dll/win32/wbemdisp # Synced to WineStaging-1.9.16 +reactos/dll/win32/wbemdisp # Synced to WineStaging-2.2 reactos/dll/win32/wbemprox # Synced to WineStaging-1.9.23 reactos/dll/win32/windowscodecs # Synced to WineStaging-1.9.23 reactos/dll/win32/windowscodecsext # Synced to WineStaging-1.9.11