setupapi: Support full path enumerator in SetupDiGetClassDevs.
Based on a patch by Michael Müller. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=35345 Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
074dd6959f
commit
d5e24897e2
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue