Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47755 Signed-off-by: Hans Leidekker hans@codeweavers.com --- dlls/wbemprox/builtin.c | 23 +++++++++++++++++++ dlls/wbemprox/tests/query.c | 44 +++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+)
diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c index 2aca2f8693..96d1e0b850 100644 --- a/dlls/wbemprox/builtin.c +++ b/dlls/wbemprox/builtin.c @@ -111,6 +111,8 @@ static const WCHAR class_processor2W[] = {'C','I','M','_','P','r','o','c','e','s','s','o','r',0}; static const WCHAR class_qualifiersW[] = {'_','_','Q','U','A','L','I','F','I','E','R','S',0}; +static const WCHAR class_quickfixengineeringW[] = + {'W','i','n','3','2','_','Q','u','i','c','k','F','i','x','E','n','g','i','n','e','e','r','i','n','g',0}; static const WCHAR class_sidW[] = {'W','i','n','3','2','_','S','I','D',0}; static const WCHAR class_sounddeviceW[] = @@ -268,6 +270,8 @@ static const WCHAR prop_graphicsscoreW[] = {'G','r','a','p','h','i','c','s','S','c','o','r','e',0}; static const WCHAR prop_horizontalresolutionW[] = {'H','o','r','i','z','o','n','t','a','l','R','e','s','o','l','u','t','i','o','n',0}; +static const WCHAR prop_hotfixidW[] = + {'H','o','t','F','i','x','I','D',0}; static const WCHAR prop_idW[] = {'I','D',0}; static const WCHAR prop_identificationcodeW[] = @@ -754,6 +758,11 @@ static const struct column col_qualifier[] = { prop_strvalueW, CIM_STRING }, { prop_boolvalueW, CIM_BOOLEAN } }; +static const struct column col_quickfixengineering[] = +{ + { prop_captionW, CIM_STRING }, + { prop_hotfixidW, CIM_STRING|COL_FLAG_KEY } +}; static const struct column col_service[] = { { prop_acceptpauseW, CIM_BOOLEAN }, @@ -920,6 +929,10 @@ static const WCHAR os_serialnumberW[] = {'1','2','3','4','5','-','O','E','M','-','1','2','3','4','5','6','7','-','1','2','3','4','5',0}; static const WCHAR physicalmedia_tagW[] = {'\','\','.','\','P','H','Y','S','I','C','A','L','D','R','I','V','E','0',0}; +static const WCHAR quickfixengineering_captionW[] = + {'h','t','t','p',':','/','/','w','i','n','e','h','q','.','o','r','g',0}; +static const WCHAR quickfixengineering_hotfixidW[] = + {'K','B','1','2','3','4','5','6','7',0}; static const WCHAR sounddevice_productnameW[] = {'W','i','n','e',' ','A','u','d','i','o',' ','D','e','v','i','c','e',0}; static const WCHAR systemenclosure_systemenclosureW[] = @@ -1224,6 +1237,11 @@ struct record_qualifier const WCHAR *strvalue; int boolvalue; }; +struct record_quickfixengineering +{ + const WCHAR *caption; + const WCHAR *hotfixid; +}; struct record_service { int accept_pause; @@ -1364,6 +1382,10 @@ static const struct record_qualifier data_qualifier[] = { class_process_getowner_outW, param_userW, CIM_SINT32, FLAVOR_ID, prop_idW, 0 }, { class_process_getowner_outW, param_domainW, CIM_SINT32, FLAVOR_ID, prop_idW, 1 } }; +static const struct record_quickfixengineering data_quickfixengineering[] = +{ + { quickfixengineering_captionW, quickfixengineering_hotfixidW }, +}; static const struct record_sounddevice data_sounddevice[] = { { sounddevice_productnameW, sounddevice_productnameW, 3 /* enabled */ } @@ -4443,6 +4465,7 @@ static struct table builtin_classes[] = { class_processorW, C(col_processor), 0, 0, NULL, fill_processor }, { class_processor2W, C(col_processor), 0, 0, NULL, fill_processor }, { class_qualifiersW, C(col_qualifier), D(data_qualifier) }, + { class_quickfixengineeringW, C(col_quickfixengineering), D(data_quickfixengineering) }, { class_serviceW, C(col_service), 0, 0, NULL, fill_service }, { class_sidW, C(col_sid), 0, 0, NULL, fill_sid }, { class_sounddeviceW, C(col_sounddevice), D(data_sounddevice) }, diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c index ee4eac88e9..cdbbc02820 100644 --- a/dlls/wbemprox/tests/query.c +++ b/dlls/wbemprox/tests/query.c @@ -1756,6 +1756,49 @@ static void test_Win32_DisplayControllerConfiguration( IWbemServices *services ) SysFreeString( wql ); }
+static void test_Win32_QuickFixEngineering( IWbemServices *services ) +{ + static const WCHAR captionW[] = + {'C','a','p','t','i','o','n',0}; + static const WCHAR hotfixidW[] = + {'H','o','t','F','i','x','I','D',0}; + static const WCHAR queryW[] = + {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_', + 'Q','u','i','c','k','F','i','x','E','n','g','i','n','e','e','r','i','n','g',0}; + BSTR wql = SysAllocString( wqlW ), query = SysAllocString( queryW ); + IEnumWbemClassObject *result; + IWbemClassObject *obj; + HRESULT hr; + DWORD count, total = 0; + VARIANT caption; + CIMTYPE type; + + hr = IWbemServices_ExecQuery( services, wql, query, 0, NULL, &result ); + ok( hr == S_OK, "got %08x\n", hr ); + + for (;;) + { + hr = IEnumWbemClassObject_Next( result, 10000, 1, &obj, &count ); + if (hr != S_OK) break; + + type = 0xdeadbeef; + VariantInit( &caption ); + hr = IWbemClassObject_Get( obj, captionW, 0, &caption, &type, NULL ); + ok( hr == S_OK, "failed to get caption %08x\n", hr ); + ok( V_VT( &caption ) == VT_BSTR || V_VT( &caption ) == VT_NULL /* winxp */, + "unexpected variant type 0x%x\n", V_VT( &caption ) ); + ok( type == CIM_STRING, "unexpected type 0x%x\n", type ); + + check_property( obj, hotfixidW, VT_BSTR, CIM_STRING ); + IWbemClassObject_Release( obj ); + if (total++ >= 10) break; + } + + IEnumWbemClassObject_Release( result ); + SysFreeString( query ); + SysFreeString( wql ); +} + START_TEST(query) { static const WCHAR cimv2W[] = {'R','O','O','T','\','C','I','M','V','2',0}; @@ -1804,6 +1847,7 @@ START_TEST(query) test_Win32_Process( services, FALSE ); test_Win32_Process( services, TRUE ); test_Win32_Processor( services ); + test_Win32_QuickFixEngineering( services ); test_Win32_Service( services ); test_Win32_SystemEnclosure( services ); test_Win32_VideoController( services );