From 2182dd1fa77b54e5912fd484cc75bee93e96f9cb Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Tue, 14 Jul 2009 12:26:38 +0200 Subject: [PATCH] wbemprox: Add a stub implementation of IWbemLocator. --- dlls/wbemprox/Makefile.in | 3 +- dlls/wbemprox/wbemlocator.c | 130 +++++++++++++++++++++++++++++++ dlls/wbemprox/wbemprox_private.h | 19 +++++ 3 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 dlls/wbemprox/wbemlocator.c create mode 100644 dlls/wbemprox/wbemprox_private.h diff --git a/dlls/wbemprox/Makefile.in b/dlls/wbemprox/Makefile.in index 58aad374f8e..b178262ef77 100644 --- a/dlls/wbemprox/Makefile.in +++ b/dlls/wbemprox/Makefile.in @@ -6,7 +6,8 @@ MODULE = wbemprox.dll IMPORTS = kernel32 C_SRCS = \ - main.c + main.c \ + wbemlocator.c @MAKE_DLL_RULES@ diff --git a/dlls/wbemprox/wbemlocator.c b/dlls/wbemprox/wbemlocator.c new file mode 100644 index 00000000000..ad6a75d168f --- /dev/null +++ b/dlls/wbemprox/wbemlocator.c @@ -0,0 +1,130 @@ +/* + * Copyright 2009 Hans Leidekker 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 + */ + +#define COBJMACROS + +#include "config.h" +#include + +#include "windef.h" +#include "winbase.h" +#include "initguid.h" +#include "objbase.h" +#include "wbemcli.h" + +#include "wine/debug.h" +#include "wine/unicode.h" +#include "wbemprox_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(wbemprox); + +typedef struct +{ + const IWbemLocatorVtbl *vtbl; + LONG refs; +} wbem_locator; + +static inline wbem_locator *impl_from_IWbemLocator( IWbemLocator *iface ) +{ + return (wbem_locator *)((char *)iface - FIELD_OFFSET( wbem_locator, vtbl )); +} + +static ULONG WINAPI wbem_locator_AddRef( + IWbemLocator *iface ) +{ + wbem_locator *wl = impl_from_IWbemLocator( iface ); + return InterlockedIncrement( &wl->refs ); +} + +static ULONG WINAPI wbem_locator_Release( + IWbemLocator *iface ) +{ + wbem_locator *wl = impl_from_IWbemLocator( iface ); + LONG refs = InterlockedDecrement( &wl->refs ); + if (!refs) + { + TRACE("destroying %p\n", wl); + HeapFree( GetProcessHeap(), 0, wl ); + } + return refs; +} + +static HRESULT WINAPI wbem_locator_QueryInterface( + IWbemLocator *iface, + REFIID riid, + void **ppvObject ) +{ + wbem_locator *This = impl_from_IWbemLocator( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); + + if ( IsEqualGUID( riid, &IID_IWbemLocator ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *ppvObject = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + IWbemLocator_AddRef( iface ); + return S_OK; +} + +static HRESULT WINAPI wbem_locator_ConnectServer( + IWbemLocator *iface, + const BSTR NetworkResource, + const BSTR User, + const BSTR Password, + const BSTR Locale, + LONG SecurityFlags, + const BSTR Authority, + IWbemContext *pCtx, + IWbemServices **ppNamespace) +{ + FIXME("%p, %s, %s, %s, %s, 0x%08x, %s, %p, %p)\n", iface, debugstr_w(NetworkResource), debugstr_w(User), + debugstr_w(Password), debugstr_w(Locale), SecurityFlags, debugstr_w(Authority), pCtx, ppNamespace); + return WBEM_E_FAILED; +} + +static const IWbemLocatorVtbl wbem_locator_vtbl = +{ + wbem_locator_QueryInterface, + wbem_locator_AddRef, + wbem_locator_Release, + wbem_locator_ConnectServer +}; + +HRESULT WbemLocator_create( IUnknown *pUnkOuter, LPVOID *ppObj ) +{ + wbem_locator *wl; + + TRACE("(%p,%p)\n", pUnkOuter, ppObj); + + wl = HeapAlloc( GetProcessHeap(), 0, sizeof(*wl) ); + if (!wl) return E_OUTOFMEMORY; + + wl->vtbl = &wbem_locator_vtbl; + wl->refs = 1; + + *ppObj = &wl->vtbl; + + TRACE("returning iface %p\n", *ppObj); + return S_OK; +} diff --git a/dlls/wbemprox/wbemprox_private.h b/dlls/wbemprox/wbemprox_private.h new file mode 100644 index 00000000000..cf4301dd61b --- /dev/null +++ b/dlls/wbemprox/wbemprox_private.h @@ -0,0 +1,19 @@ +/* + * Copyright 2009 Hans Leidekker 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 + */ + +HRESULT WbemLocator_create(IUnknown *, LPVOID *);