diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index a69e826052f..f0d75f90b81 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -2392,8 +2392,21 @@ static void SETUPDI_EnumerateDevices(HDEVINFO DeviceInfoSet, const GUID *class, &enumStrKey); if (!l) { - SETUPDI_EnumerateMatchingDevices(DeviceInfoSet, enumstr, - enumStrKey, class, flags); + WCHAR *bus, *device; + + if (!wcschr(enumstr, '\\')) + { + SETUPDI_EnumerateMatchingDevices(DeviceInfoSet, enumstr, enumStrKey, class, flags); + } + else if ((bus = strdupW(enumstr))) + { + device = wcschr(bus, '\\'); + *device++ = 0; + + SETUPDI_EnumerateMatchingDeviceInstances(DeviceInfoSet, bus, device, enumStrKey, class, flags); + HeapFree(GetProcessHeap(), 0, bus); + } + RegCloseKey(enumStrKey); } } diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c index 430dede6531..57adeeb27b9 100644 --- a/dlls/setupapi/tests/devinst.c +++ b/dlls/setupapi/tests/devinst.c @@ -2823,11 +2823,9 @@ static void test_get_class_devs(void) set = SetupDiGetClassDevsA(NULL, "ROOT\\LEGACY_BOGUS", NULL, DIGCF_ALLCLASSES); ok(set != INVALID_HANDLE_VALUE, "Failed to create device list, error %#x.\n", GetLastError()); check_device_list(set, &GUID_NULL); -todo_wine { check_device_info(set, 0, &guid2, "ROOT\\LEGACY_BOGUS\\BAR"); check_device_info(set, 1, &guid, "ROOT\\LEGACY_BOGUS\\FOO"); check_device_info(set, 2, &guid, "ROOT\\LEGACY_BOGUS\\QUX"); -} check_device_info(set, 3, NULL, NULL); check_device_iface(set, NULL, &iface_guid, 0, 0, NULL); ret = SetupDiDestroyDeviceInfoList(set); @@ -2836,10 +2834,8 @@ todo_wine { set = SetupDiGetClassDevsA(&guid, "ROOT\\LEGACY_BOGUS", NULL, 0); ok(set != INVALID_HANDLE_VALUE, "Failed to create device list, error %#x.\n", GetLastError()); check_device_list(set, &guid); -todo_wine { check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\FOO"); check_device_info(set, 1, &guid, "ROOT\\LEGACY_BOGUS\\QUX"); -} check_device_info(set, 2, NULL, NULL); check_device_iface(set, NULL, &iface_guid, 0, 0, NULL); ret = SetupDiDestroyDeviceInfoList(set); @@ -2848,11 +2844,9 @@ todo_wine { set = SetupDiGetClassDevsA(&guid, "ROOT\\LEGACY_BOGUS", NULL, DIGCF_ALLCLASSES); ok(set != INVALID_HANDLE_VALUE, "Failed to create device list, error %#x.\n", GetLastError()); check_device_list(set, &GUID_NULL); -todo_wine { check_device_info(set, 0, &guid2, "ROOT\\LEGACY_BOGUS\\BAR"); check_device_info(set, 1, &guid, "ROOT\\LEGACY_BOGUS\\FOO"); check_device_info(set, 2, &guid, "ROOT\\LEGACY_BOGUS\\QUX"); -} check_device_info(set, 3, NULL, NULL); check_device_iface(set, NULL, &iface_guid, 0, 0, NULL); ret = SetupDiDestroyDeviceInfoList(set);