[PATCH] wbemprox: Implement Win32_QuickFixEngineering.

Hans Leidekker hans at codeweavers.com
Mon Sep 30 10:12:58 CDT 2019


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47755
Signed-off-by: Hans Leidekker <hans at 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 );
-- 
2.20.1




More information about the wine-devel mailing list