Zhiyi Zhang : setupapi: Set device SPDRP_CLASS registry property in create_device().

Alexandre Julliard julliard at winehq.org
Mon Nov 18 16:19:19 CST 2019


Module: wine
Branch: master
Commit: 288a6625ad0177e258a0db1da166d292ff420b1e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=288a6625ad0177e258a0db1da166d292ff420b1e

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Mon Nov 18 17:29:44 2019 +0800

setupapi: Set device SPDRP_CLASS registry property in create_device().

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/setupapi/devinst.c       | 10 +++++++++-
 dlls/setupapi/tests/devinst.c |  8 ++++----
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 61ddade405..25d4040da0 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -751,7 +751,9 @@ static struct device *create_device(struct DeviceInfoSet *set,
 {
     const DWORD one = 1;
     struct device *device;
-    WCHAR guidstr[39];
+    WCHAR guidstr[MAX_GUID_STRING_LEN];
+    WCHAR class_name[MAX_CLASS_NAME_LEN];
+    DWORD size;
 
     TRACE("%p, %s, %s, %d\n", set, debugstr_guid(class),
         debugstr_w(instanceid), phantom);
@@ -796,6 +798,12 @@ static struct device *create_device(struct DeviceInfoSet *set,
     SETUPDI_SetDeviceRegistryPropertyW(device, SPDRP_CLASSGUID,
         (const BYTE *)guidstr, sizeof(guidstr));
 
+    if (SetupDiClassNameFromGuidW(class, class_name, ARRAY_SIZE(class_name), NULL))
+    {
+        size = (lstrlenW(class_name) + 1) * sizeof(WCHAR);
+        SETUPDI_SetDeviceRegistryPropertyW(device, SPDRP_CLASS, (const BYTE *)class_name, size);
+    }
+
     TRACE("Created new device %p.\n", device);
     return device;
 }
diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c
index 2f81a3abf5..68478b5d80 100644
--- a/dlls/setupapi/tests/devinst.c
+++ b/dlls/setupapi/tests/devinst.c
@@ -1643,8 +1643,8 @@ todo_wine {
     /* Have SPDRP_CLASS property */
     memset(buf, 0, sizeof(buf));
     ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_CLASS, NULL, (BYTE *)buf, sizeof(buf), NULL);
-    todo_wine ok(ret, "Failed to get property, error %#x.\n", GetLastError());
-    todo_wine ok(!lstrcmpA(buf, "Display"), "Got unexpected value %s.\n", buf);
+    ok(ret, "Failed to get property, error %#x.\n", GetLastError());
+    ok(!lstrcmpA(buf, "Display"), "Got unexpected value %s.\n", buf);
 
     SetupDiDestroyDeviceInfoList(set);
 }
@@ -1803,8 +1803,8 @@ todo_wine {
     /* Have SPDRP_CLASS property */
     memset(buf, 0, sizeof(buf));
     ret = SetupDiGetDeviceRegistryPropertyW(set, &device, SPDRP_CLASS, NULL, (BYTE *)buf, sizeof(buf), NULL);
-    todo_wine ok(ret, "Failed to get property, error %#x.\n", GetLastError());
-    todo_wine ok(!lstrcmpW(buf, L"Display"), "Got unexpected value %s.\n", wine_dbgstr_w(buf));
+    ok(ret, "Failed to get property, error %#x.\n", GetLastError());
+    ok(!lstrcmpW(buf, L"Display"), "Got unexpected value %s.\n", wine_dbgstr_w(buf));
 
     SetupDiDestroyDeviceInfoList(set);
 }




More information about the wine-cvs mailing list