diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index 61ddade4055..25d4040da05 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 2f81a3abf52..68478b5d80a 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); }