HIDAPI: fix bug that caused non-HID class parts of composite devices to have windows HID functions called on them.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
diff --git a/src/hidapi/windows/hid.c b/src/hidapi/windows/hid.c
index 3795e18..d9b56c1 100644
--- a/src/hidapi/windows/hid.c
+++ b/src/hidapi/windows/hid.c
@@ -309,7 +309,6 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
SP_DEVICE_INTERFACE_DETAIL_DATA_A *device_interface_detail_data = NULL;
HDEVINFO device_info_set = INVALID_HANDLE_VALUE;
int device_index = 0;
- int i;
if (hid_init() < 0)
return NULL;
@@ -373,12 +372,16 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
/* Make sure this device is of Setup Class "HIDClass" and has a
driver bound to it. */
- for (i = 0; ; i++) {
+ /* In the main HIDAPI tree this is a loop which will erroneously open
+ devices that aren't HID class. Please preserve this delta if we ever
+ update to take new changes */
+ {
char driver_name[256];
/* Populate devinfo_data. This function will return failure
when there are no more interfaces left. */
- res = SetupDiEnumDeviceInfo(device_info_set, i, &devinfo_data);
+ res = SetupDiEnumDeviceInfo(device_info_set, device_index, &devinfo_data);
+
if (!res)
goto cont;
@@ -391,8 +394,12 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
/* See if there's a driver bound. */
res = SetupDiGetDeviceRegistryPropertyA(device_info_set, &devinfo_data,
SPDRP_DRIVER, NULL, (PBYTE)driver_name, sizeof(driver_name), NULL);
- if (res)
- break;
+ if (!res)
+ goto cont;
+ }
+ else
+ {
+ goto cont;
}
}