[3/8] wbemprox: Implement IWbemClassObject::GetNames.

Hans Leidekker hans at codeweavers.com
Tue Jun 19 03:19:38 CDT 2012


---
 dlls/wbemprox/class.c            |   18 ++++++++++++++++--
 dlls/wbemprox/query.c            |   22 ++++++++++++++++++++++
 dlls/wbemprox/wbemprox_private.h |    1 +
 include/wbemcli.idl              |   19 +++++++++++++++++++
 4 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/dlls/wbemprox/class.c b/dlls/wbemprox/class.c
index 423e754..524ba09 100644
--- a/dlls/wbemprox/class.c
+++ b/dlls/wbemprox/class.c
@@ -314,8 +314,22 @@ static HRESULT WINAPI class_object_GetNames(
     VARIANT *pQualifierVal,
     SAFEARRAY **pNames )
 {
-    FIXME("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszQualifierName), lFlags, pQualifierVal, pNames);
-    return E_NOTIMPL;
+    struct class_object *co = impl_from_IWbemClassObject( iface );
+    struct enum_class_object *ec = impl_from_IEnumWbemClassObject( co->iter );
+
+    TRACE("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszQualifierName), lFlags, pQualifierVal, pNames);
+
+    if (wszQualifierName || pQualifierVal)
+    {
+        FIXME("qualifier not supported\n");
+        return E_NOTIMPL;
+    }
+    if (lFlags != WBEM_FLAG_ALWAYS)
+    {
+        FIXME("flags %08x not supported\n", lFlags);
+        return E_NOTIMPL;
+    }
+    return get_properties( ec->query->view, pNames );
 }
 
 static HRESULT WINAPI class_object_BeginEnumeration(
diff --git a/dlls/wbemprox/query.c b/dlls/wbemprox/query.c
index 1d17a28..5ed4d07 100644
--- a/dlls/wbemprox/query.c
+++ b/dlls/wbemprox/query.c
@@ -413,3 +413,25 @@ HRESULT get_propval( const struct view *view, UINT index, const WCHAR *name, VAR
     if (type) *type = view->table->columns[column].type;
     return S_OK;
 }
+
+HRESULT get_properties( const struct view *view, SAFEARRAY **props )
+{
+    SAFEARRAY *sa;
+    BSTR str;
+    LONG i;
+
+    if (!(sa = SafeArrayCreateVector( VT_BSTR, 0, view->table->num_cols ))) return E_OUTOFMEMORY;
+
+    for (i = 0; i < view->table->num_cols; i++)
+    {
+        str = SysAllocString( view->table->columns[i].name );
+        if (!str || SafeArrayPutElement( sa, &i, str ) != S_OK)
+        {
+            SysFreeString( str );
+            SafeArrayDestroy( sa );
+            return E_OUTOFMEMORY;
+        }
+    }
+    *props = sa;
+    return S_OK;
+}
diff --git a/dlls/wbemprox/wbemprox_private.h b/dlls/wbemprox/wbemprox_private.h
index 15a7146..c7edbb0 100644
--- a/dlls/wbemprox/wbemprox_private.h
+++ b/dlls/wbemprox/wbemprox_private.h
@@ -114,6 +114,7 @@ void destroy_view( struct view * ) DECLSPEC_HIDDEN;
 struct table *get_table( const WCHAR * ) DECLSPEC_HIDDEN;
 HRESULT get_propval( const struct view *, UINT, const WCHAR *, VARIANT *,
                      CIMTYPE * ) DECLSPEC_HIDDEN;
+HRESULT get_properties( const struct view *, SAFEARRAY ** ) DECLSPEC_HIDDEN;
 
 HRESULT WbemLocator_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN;
 HRESULT WbemServices_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN;
diff --git a/include/wbemcli.idl b/include/wbemcli.idl
index a023491..b2d756b 100644
--- a/include/wbemcli.idl
+++ b/include/wbemcli.idl
@@ -182,6 +182,25 @@ typedef [v1_enum] enum tag_WBEM_TIMEOUT_TYPE
     WBEM_INFINITE = 0xffffffff
 } WBEM_TIMEOUT_TYPE;
 
+typedef [v1_enum] enum tag_WBEM_CONDITION_FLAG_TYPE
+{
+    WBEM_FLAG_ALWAYS                    = 0,
+    WBEM_FLAG_ONLY_IF_TRUE              = 0x1,
+    WBEM_FLAG_ONLY_IF_FALSE             = 0x2,
+    WBEM_FLAG_ONLY_IF_IDENTICAL         = 0x3,
+    WBEM_MASK_PRIMARY_CONDITION         = 0x3,
+    WBEM_FLAG_KEYS_ONLY                 = 0x4,
+    WBEM_FLAG_REFS_ONLY                 = 0x8,
+    WBEM_FLAG_LOCAL_ONLY                = 0x10,
+    WBEM_FLAG_PROPAGATED_ONLY           = 0x20,
+    WBEM_FLAG_SYSTEM_ONLY               = 0x30,
+    WBEM_FLAG_NONSYSTEM_ONLY            = 0x40,
+    WBEM_MASK_CONDITION_ORIGIN          = 0x70,
+    WBEM_FLAG_CLASS_OVERRIDES_ONLY      = 0x100,
+    WBEM_FLAG_CLASS_LOCAL_AND_OVERRIDES = 0x200,
+    WBEM_MASK_CLASS_CONDITION           = 0x300
+} WBEM_CONDITION_FLAG_TYPE;
+
 typedef [v1_enum] enum tag_CIMTYPE_ENUMERATION
 {
     CIM_ILLEGAL = 0xfff,
-- 
1.7.10







More information about the wine-patches mailing list