[4/4] wbemprox: Add stub implementations of IEnumWbemClassObject and IWbemClassObject.

Hans Leidekker hans at codeweavers.com
Thu Jun 14 09:03:26 CDT 2012


---
 dlls/wbemprox/Makefile.in        |    1 +
 dlls/wbemprox/class.c            |  488 ++++++++++++++++++++++++++++++++++++++
 dlls/wbemprox/wbemlocator.c      |    4 +-
 dlls/wbemprox/wbemprox_private.h |   11 +
 4 files changed, 502 insertions(+), 2 deletions(-)
 create mode 100644 dlls/wbemprox/class.c

diff --git a/dlls/wbemprox/Makefile.in b/dlls/wbemprox/Makefile.in
index a68a54e..6927437 100644
--- a/dlls/wbemprox/Makefile.in
+++ b/dlls/wbemprox/Makefile.in
@@ -2,6 +2,7 @@ MODULE    = wbemprox.dll
 IMPORTS   = ole32 advapi32
 
 C_SRCS = \
+	class.c \
 	main.c \
 	services.c \
 	wbemlocator.c
diff --git a/dlls/wbemprox/class.c b/dlls/wbemprox/class.c
new file mode 100644
index 0000000..e696d03
--- /dev/null
+++ b/dlls/wbemprox/class.c
@@ -0,0 +1,488 @@
+/*
+ * Copyright 2012 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 <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "objbase.h"
+#include "wbemcli.h"
+
+#include "wine/debug.h"
+#include "wbemprox_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
+
+struct enum_class_object
+{
+    IEnumWbemClassObject IEnumWbemClassObject_iface;
+    LONG refs;
+};
+
+static inline struct enum_class_object *impl_from_IEnumWbemClassObject(
+    IEnumWbemClassObject *iface )
+{
+    return CONTAINING_RECORD(iface, struct enum_class_object, IEnumWbemClassObject_iface);
+}
+
+static ULONG WINAPI enum_class_object_AddRef(
+    IEnumWbemClassObject *iface )
+{
+    struct enum_class_object *ec = impl_from_IEnumWbemClassObject( iface );
+    return InterlockedIncrement( &ec->refs );
+}
+
+static ULONG WINAPI enum_class_object_Release(
+    IEnumWbemClassObject *iface )
+{
+    struct enum_class_object *ec = impl_from_IEnumWbemClassObject( iface );
+    LONG refs = InterlockedDecrement( &ec->refs );
+    if (!refs)
+    {
+        TRACE("destroying %p\n", ec);
+        heap_free( ec );
+    }
+    return refs;
+}
+
+static HRESULT WINAPI enum_class_object_QueryInterface(
+    IEnumWbemClassObject *iface,
+    REFIID riid,
+    void **ppvObject )
+{
+    struct enum_class_object *ec = impl_from_IEnumWbemClassObject( iface );
+
+    TRACE("%p, %s, %p\n", ec, debugstr_guid( riid ), ppvObject );
+
+    if ( IsEqualGUID( riid, &IID_IEnumWbemClassObject ) ||
+         IsEqualGUID( riid, &IID_IUnknown ) )
+    {
+        *ppvObject = ec;
+    }
+    else
+    {
+        FIXME("interface %s not implemented\n", debugstr_guid(riid));
+        return E_NOINTERFACE;
+    }
+    IEnumWbemClassObject_AddRef( iface );
+    return S_OK;
+}
+
+static HRESULT WINAPI enum_class_object_Reset(
+    IEnumWbemClassObject *iface )
+{
+    FIXME("%p\n", iface);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI enum_class_object_Next(
+    IEnumWbemClassObject *iface,
+    LONG lTimeout,
+    ULONG uCount,
+    IWbemClassObject **apObjects,
+    ULONG *puReturned )
+{
+    FIXME("%p, %d, %u, %p, %p\n", iface, lTimeout, uCount, apObjects, puReturned);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI enum_class_object_NextAsync(
+    IEnumWbemClassObject *iface,
+    ULONG uCount,
+    IWbemObjectSink *pSink )
+{
+    FIXME("%p, %u, %p\n", iface, uCount, pSink);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI enum_class_object_Clone(
+    IEnumWbemClassObject *iface,
+    IEnumWbemClassObject **ppEnum )
+{
+    FIXME("%p, %p\n", iface, ppEnum);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI enum_class_object_Skip(
+    IEnumWbemClassObject *iface,
+    LONG lTimeout,
+    ULONG nCount )
+{
+    FIXME("%p, %d, %u\n", iface, lTimeout, nCount);
+    return E_NOTIMPL;
+}
+
+static const IEnumWbemClassObjectVtbl enum_class_object_vtbl =
+{
+    enum_class_object_QueryInterface,
+    enum_class_object_AddRef,
+    enum_class_object_Release,
+    enum_class_object_Reset,
+    enum_class_object_Next,
+    enum_class_object_NextAsync,
+    enum_class_object_Clone,
+    enum_class_object_Skip
+};
+
+HRESULT EnumWbemClassObject_create(
+    IUnknown *pUnkOuter, LPVOID *ppObj )
+{
+    struct enum_class_object *ec;
+
+    TRACE("%p, %p\n", pUnkOuter, ppObj);
+
+    ec = heap_alloc( sizeof(*ec) );
+    if (!ec) return E_OUTOFMEMORY;
+
+    ec->IEnumWbemClassObject_iface.lpVtbl = &enum_class_object_vtbl;
+    ec->refs  = 1;
+
+    *ppObj = &ec->IEnumWbemClassObject_iface;
+
+    TRACE("returning iface %p\n", *ppObj);
+    return S_OK;
+}
+
+struct class_object
+{
+    IWbemClassObject IWbemClassObject_iface;
+    LONG refs;
+};
+
+static inline struct class_object *impl_from_IWbemClassObject(
+    IWbemClassObject *iface )
+{
+    return CONTAINING_RECORD(iface, struct class_object, IWbemClassObject_iface);
+}
+
+static ULONG WINAPI class_object_AddRef(
+    IWbemClassObject *iface )
+{
+    struct class_object *co = impl_from_IWbemClassObject( iface );
+    return InterlockedIncrement( &co->refs );
+}
+
+static ULONG WINAPI class_object_Release(
+    IWbemClassObject *iface )
+{
+    struct class_object *co = impl_from_IWbemClassObject( iface );
+    LONG refs = InterlockedDecrement( &co->refs );
+    if (!refs)
+    {
+        TRACE("destroying %p\n", co);
+        heap_free( co );
+    }
+    return refs;
+}
+
+static HRESULT WINAPI class_object_QueryInterface(
+    IWbemClassObject *iface,
+    REFIID riid,
+    void **ppvObject )
+{
+    struct class_object *co = impl_from_IWbemClassObject( iface );
+
+    TRACE("%p, %s, %p\n", co, debugstr_guid( riid ), ppvObject );
+
+    if ( IsEqualGUID( riid, &IID_IWbemClassObject ) ||
+         IsEqualGUID( riid, &IID_IUnknown ) )
+    {
+        *ppvObject = co;
+    }
+    else
+    {
+        FIXME("interface %s not implemented\n", debugstr_guid(riid));
+        return E_NOINTERFACE;
+    }
+    IWbemClassObject_AddRef( iface );
+    return S_OK;
+}
+
+static HRESULT WINAPI class_object_GetQualifierSet(
+    IWbemClassObject *iface,
+    IWbemQualifierSet **ppQualSet )
+{
+    FIXME("%p, %p\n", iface, ppQualSet);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_Get(
+    IWbemClassObject *iface,
+    LPCWSTR wszName,
+    LONG lFlags,
+    VARIANT *pVal,
+    CIMTYPE *pType,
+    LONG *plFlavor )
+{
+    FIXME("%p, %s, %08x, %p, %p, %p\n", iface, debugstr_w(wszName), lFlags, pVal, pType, plFlavor);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_Put(
+    IWbemClassObject *iface,
+    LPCWSTR wszName,
+    LONG lFlags,
+    VARIANT *pVal,
+    CIMTYPE Type )
+{
+    FIXME("%p, %s, %08x, %p, %u\n", iface, debugstr_w(wszName), lFlags, pVal, Type);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_Delete(
+    IWbemClassObject *iface,
+    LPCWSTR wszName )
+{
+    FIXME("%p, %s\n", iface, debugstr_w(wszName));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_GetNames(
+    IWbemClassObject *iface,
+    LPCWSTR wszQualifierName,
+    LONG lFlags,
+    VARIANT *pQualifierVal,
+    SAFEARRAY *pNames )
+{
+    FIXME("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszQualifierName), lFlags, pQualifierVal, pNames);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_BeginEnumeration(
+    IWbemClassObject *iface,
+    LONG lEnumFlags )
+{
+    FIXME("%p, %08x\n", iface, lEnumFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_Next(
+    IWbemClassObject *iface,
+    LONG lFlags,
+    BSTR *strName,
+    VARIANT *pVal,
+    CIMTYPE *pType,
+    LONG *plFlavor )
+{
+    FIXME("%p, %08x, %p, %p, %p, %p\n", iface, lFlags, strName, pVal, pType, plFlavor);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_EndEnumeration(
+    IWbemClassObject *iface )
+{
+    FIXME("%p\n", iface);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_GetPropertyQualifierSet(
+    IWbemClassObject *iface,
+    LPCWSTR wszProperty,
+    IWbemQualifierSet **ppQualSet )
+{
+    FIXME("%p, %s, %p\n", iface, debugstr_w(wszProperty), ppQualSet);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_Clone(
+    IWbemClassObject *iface,
+    IWbemClassObject **ppCopy )
+{
+    FIXME("%p, %p\n", iface, ppCopy);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_GetObjectText(
+    IWbemClassObject *iface,
+    LONG lFlags,
+    BSTR *pstrObjectText )
+{
+    FIXME("%p, %08x, %p\n", iface, lFlags, pstrObjectText);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_SpawnDerivedClass(
+    IWbemClassObject *iface,
+    LONG lFlags,
+    IWbemClassObject **ppNewClass )
+{
+    FIXME("%p, %08x, %p\n", iface, lFlags, ppNewClass);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_SpawnInstance(
+    IWbemClassObject *iface,
+    LONG lFlags,
+    IWbemClassObject **ppNewInstance )
+{
+    FIXME("%p, %08x, %p\n", iface, lFlags, ppNewInstance);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_CompareTo(
+    IWbemClassObject *iface,
+    LONG lFlags,
+    IWbemClassObject *pCompareTo )
+{
+    FIXME("%p, %08x, %p\n", iface, lFlags, pCompareTo);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_GetPropertyOrigin(
+    IWbemClassObject *iface,
+    LPCWSTR wszName,
+    BSTR *pstrClassName )
+{
+    FIXME("%p, %s, %p\n", iface, debugstr_w(wszName), pstrClassName);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_InheritsFrom(
+    IWbemClassObject *iface,
+    LPCWSTR strAncestor )
+{
+    FIXME("%p, %s\n", iface, debugstr_w(strAncestor));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_GetMethod(
+    IWbemClassObject *iface,
+    LPCWSTR wszName,
+    LONG lFlags,
+    IWbemClassObject **ppInSignature,
+    IWbemClassObject **ppOutSignature )
+{
+    FIXME("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszName), lFlags, ppInSignature, ppOutSignature);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_PutMethod(
+    IWbemClassObject *iface,
+    LPCWSTR wszName,
+    LONG lFlags,
+    IWbemClassObject *pInSignature,
+    IWbemClassObject *pOutSignature )
+{
+    FIXME("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszName), lFlags, pInSignature, pOutSignature);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_DeleteMethod(
+    IWbemClassObject *iface,
+    LPCWSTR wszName )
+{
+    FIXME("%p, %s\n", iface, debugstr_w(wszName));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_BeginMethodEnumeration(
+    IWbemClassObject *iface,
+    LONG lEnumFlags)
+{
+    FIXME("%p, %08x\n", iface, lEnumFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_NextMethod(
+    IWbemClassObject *iface,
+    LONG lFlags,
+    BSTR *pstrName,
+    IWbemClassObject **ppInSignature,
+    IWbemClassObject **ppOutSignature)
+{
+    FIXME("%p, %08x, %p, %p, %p\n", iface, lFlags, pstrName, ppInSignature, ppOutSignature);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_EndMethodEnumeration(
+    IWbemClassObject *iface )
+{
+    FIXME("%p\n", iface);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_GetMethodQualifierSet(
+    IWbemClassObject *iface,
+    LPCWSTR wszMethod,
+    IWbemQualifierSet **ppQualSet)
+{
+    FIXME("%p, %s, %p\n", iface, debugstr_w(wszMethod), ppQualSet);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI class_object_GetMethodOrigin(
+    IWbemClassObject *iface,
+    LPCWSTR wszMethodName,
+    BSTR *pstrClassName)
+{
+    FIXME("%p, %s, %p\n", iface, debugstr_w(wszMethodName), pstrClassName);
+    return E_NOTIMPL;
+}
+
+static const IWbemClassObjectVtbl class_object_vtbl =
+{
+    class_object_QueryInterface,
+    class_object_AddRef,
+    class_object_Release,
+    class_object_GetQualifierSet,
+    class_object_Get,
+    class_object_Put,
+    class_object_Delete,
+    class_object_GetNames,
+    class_object_BeginEnumeration,
+    class_object_Next,
+    class_object_EndEnumeration,
+    class_object_GetPropertyQualifierSet,
+    class_object_Clone,
+    class_object_GetObjectText,
+    class_object_SpawnDerivedClass,
+    class_object_SpawnInstance,
+    class_object_CompareTo,
+    class_object_GetPropertyOrigin,
+    class_object_InheritsFrom,
+    class_object_GetMethod,
+    class_object_PutMethod,
+    class_object_DeleteMethod,
+    class_object_BeginMethodEnumeration,
+    class_object_NextMethod,
+    class_object_EndMethodEnumeration,
+    class_object_GetMethodQualifierSet,
+    class_object_GetMethodOrigin
+};
+
+HRESULT WbemClassObject_create(
+    IUnknown *pUnkOuter, LPVOID *ppObj )
+{
+    struct class_object *co;
+
+    TRACE("%p, %p\n", pUnkOuter, ppObj);
+
+    co = heap_alloc( sizeof(*co) );
+    if (!co) return E_OUTOFMEMORY;
+
+    co->IWbemClassObject_iface.lpVtbl = &class_object_vtbl;
+    co->refs = 1;
+
+    *ppObj = &co->IWbemClassObject_iface;
+
+    TRACE("returning iface %p\n", *ppObj);
+    return S_OK;
+}
diff --git a/dlls/wbemprox/wbemlocator.c b/dlls/wbemprox/wbemlocator.c
index e64767f..4368db3 100644
--- a/dlls/wbemprox/wbemlocator.c
+++ b/dlls/wbemprox/wbemlocator.c
@@ -58,7 +58,7 @@ static ULONG WINAPI wbem_locator_Release(
     if (!refs)
     {
         TRACE("destroying %p\n", wl);
-        HeapFree( GetProcessHeap(), 0, wl );
+        heap_free( wl );
     }
     return refs;
 }
@@ -129,7 +129,7 @@ HRESULT WbemLocator_create( IUnknown *pUnkOuter, LPVOID *ppObj )
 
     TRACE("(%p,%p)\n", pUnkOuter, ppObj);
 
-    wl = HeapAlloc( GetProcessHeap(), 0, sizeof(*wl) );
+    wl = heap_alloc( sizeof(*wl) );
     if (!wl) return E_OUTOFMEMORY;
 
     wl->IWbemLocator_iface.lpVtbl = &wbem_locator_vtbl;
diff --git a/dlls/wbemprox/wbemprox_private.h b/dlls/wbemprox/wbemprox_private.h
index 1cda3ec..86d2f3c 100644
--- a/dlls/wbemprox/wbemprox_private.h
+++ b/dlls/wbemprox/wbemprox_private.h
@@ -18,3 +18,14 @@
 
 HRESULT WbemLocator_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN;
 HRESULT WbemServices_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN;
+
+static void *heap_alloc( size_t len ) __WINE_ALLOC_SIZE(1);
+static inline void *heap_alloc( size_t len )
+{
+    return HeapAlloc( GetProcessHeap(), 0, len );
+}
+
+static inline BOOL heap_free( void *mem )
+{
+    return HeapFree( GetProcessHeap(), 0, mem );
+}
-- 
1.7.10






More information about the wine-patches mailing list