Module: wine Branch: master Commit: c3566b088d3f1843aaf974e9ad80567dc0246ab5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c3566b088d3f1843aaf974e9ad...
Author: Hans Leidekker hans@codeweavers.com Date: Mon Mar 24 11:42:00 2014 +0100
wbemprox: Add support for WBEM_FLAG_NONSYSTEM_ONLY and WBEM_FLAG_SYSTEM_ONLY in IWbemClassObject::GetNames.
---
dlls/wbemprox/class.c | 14 +++++++------- dlls/wbemprox/query.c | 8 +++++++- dlls/wbemprox/tests/query.c | 35 +++++++++++++++++++++++++++++++++++ dlls/wbemprox/wbemprox_private.h | 2 +- 4 files changed, 50 insertions(+), 9 deletions(-)
diff --git a/dlls/wbemprox/class.c b/dlls/wbemprox/class.c index 58fbbf8..5a9e2e4 100644 --- a/dlls/wbemprox/class.c +++ b/dlls/wbemprox/class.c @@ -476,17 +476,17 @@ static HRESULT WINAPI class_object_GetNames( TRACE("%p, %s, %08x, %s, %p\n", iface, debugstr_w(wszQualifierName), lFlags, debugstr_variant(pQualifierVal), pNames);
- if (wszQualifierName || pQualifierVal) - { - FIXME("qualifier not supported\n"); - return E_NOTIMPL; - } - if (lFlags != WBEM_FLAG_ALWAYS) + if (lFlags != WBEM_FLAG_ALWAYS && + lFlags != WBEM_FLAG_NONSYSTEM_ONLY && + lFlags != WBEM_FLAG_SYSTEM_ONLY) { FIXME("flags %08x not supported\n", lFlags); return E_NOTIMPL; } - return get_properties( ec->query->view, pNames ); + if (wszQualifierName || pQualifierVal) + FIXME("qualifier not supported\n"); + + return get_properties( ec->query->view, lFlags, pNames ); }
static HRESULT WINAPI class_object_BeginEnumeration( diff --git a/dlls/wbemprox/query.c b/dlls/wbemprox/query.c index 921c3cd..fdfcc16 100644 --- a/dlls/wbemprox/query.c +++ b/dlls/wbemprox/query.c @@ -959,7 +959,7 @@ HRESULT put_propval( const struct view *view, UINT index, const WCHAR *name, VAR return set_value( view->table, row, column, val, type ); }
-HRESULT get_properties( const struct view *view, SAFEARRAY **props ) +HRESULT get_properties( const struct view *view, LONG flags, SAFEARRAY **props ) { SAFEARRAY *sa; BSTR str; @@ -970,8 +970,14 @@ HRESULT get_properties( const struct view *view, SAFEARRAY **props )
for (i = 0; i < view->table->num_cols; i++) { + BOOL is_system; + if (is_method( view->table, i )) continue;
+ is_system = is_system_prop( view->table->columns[i].name ); + if ((flags & WBEM_FLAG_NONSYSTEM_ONLY) && is_system) continue; + else if ((flags & WBEM_FLAG_SYSTEM_ONLY) && !is_system) continue; + str = SysAllocString( view->table->columns[i].name ); if (!str || SafeArrayPutElement( sa, &i, str ) != S_OK) { diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c index 9b77b4c..e99e4ea 100644 --- a/dlls/wbemprox/tests/query.c +++ b/dlls/wbemprox/tests/query.c @@ -616,6 +616,40 @@ static void test_query_async( IWbemServices *services ) SysFreeString( query ); }
+void test_GetNames( IWbemServices *services ) +{ + static const WCHAR queryW[] = + {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_', + 'O','p','e','r','a','t','i','n','g','S','y','s','t','e','m',0}; + BSTR wql = SysAllocString( wqlW ), query = SysAllocString( queryW ); + IEnumWbemClassObject *result; + HRESULT hr; + + hr = IWbemServices_ExecQuery( services, wql, query, 0, NULL, &result ); + ok( hr == S_OK, "got %08x\n", hr ); + + for (;;) + { + IWbemClassObject *obj; + SAFEARRAY *names; + ULONG count; + VARIANT val; + + IEnumWbemClassObject_Next( result, 10000, 1, &obj, &count ); + if (!count) break; + + VariantInit( &val ); + hr = IWbemClassObject_GetNames( obj, NULL, WBEM_FLAG_NONSYSTEM_ONLY, &val, &names ); + ok( hr == S_OK, "got %08x\n", hr ); + + SafeArrayDestroy( names ); + IWbemClassObject_Release( obj ); + } + IEnumWbemClassObject_Release( result ); + SysFreeString( query ); + SysFreeString( wql ); +} + START_TEST(query) { static const WCHAR cimv2W[] = {'R','O','O','T','\','C','I','M','V','2',0}; @@ -647,6 +681,7 @@ START_TEST(query) test_StdRegProv( services ); test_notification_query_async( services ); test_query_async( services ); + test_GetNames( services );
SysFreeString( path ); IWbemServices_Release( services ); diff --git a/dlls/wbemprox/wbemprox_private.h b/dlls/wbemprox/wbemprox_private.h index da4f84f..c047ac1 100644 --- a/dlls/wbemprox/wbemprox_private.h +++ b/dlls/wbemprox/wbemprox_private.h @@ -200,7 +200,7 @@ HRESULT to_longlong( VARIANT *, LONGLONG *, CIMTYPE * ) DECLSPEC_HIDDEN; SAFEARRAY *to_safearray( const struct array *, CIMTYPE ) DECLSPEC_HIDDEN; VARTYPE to_vartype( CIMTYPE ) DECLSPEC_HIDDEN; void destroy_array( struct array *, CIMTYPE ) DECLSPEC_HIDDEN; -HRESULT get_properties( const struct view *, SAFEARRAY ** ) DECLSPEC_HIDDEN; +HRESULT get_properties( const struct view *, LONG, SAFEARRAY ** ) DECLSPEC_HIDDEN; HRESULT get_object( const WCHAR *, IWbemClassObject ** ) DECLSPEC_HIDDEN; BSTR get_method_name( const WCHAR *, UINT ) DECLSPEC_HIDDEN; BSTR get_property_name( const WCHAR *, UINT ) DECLSPEC_HIDDEN;