[PATCH 2/4] wineusb.sys: Cache members of the device descriptor in the usb_device structure.
Zebediah Figura
wine at gitlab.winehq.org
Fri Jul 1 00:55:02 CDT 2022
From: Zebediah Figura <zfigura at codeweavers.com>
These are already cached by libusb, but for convenience we want to cache them on the PE side.
---
dlls/wineusb.sys/wineusb.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/dlls/wineusb.sys/wineusb.c b/dlls/wineusb.sys/wineusb.c
index 1f3435b67a4..f5c727fa823 100644
--- a/dlls/wineusb.sys/wineusb.c
+++ b/dlls/wineusb.sys/wineusb.c
@@ -84,6 +84,8 @@ struct usb_device
uint8_t class, subclass, protocol;
+ uint16_t vendor, product, revision;
+
libusb_device *libusb_device;
libusb_device_handle *handle;
@@ -117,6 +119,9 @@ static void add_usb_interface(struct usb_device *parent, const struct libusb_int
device->class = desc->bInterfaceClass;
device->subclass = desc->bInterfaceSubClass;
device->protocol = desc->bInterfaceProtocol;
+ device->vendor = parent->vendor;
+ device->product = parent->product;
+ device->revision = parent->revision;
InitializeListHead(&device->irp_list);
EnterCriticalSection(&wineusb_cs);
@@ -173,6 +178,9 @@ static void add_usb_device(libusb_device *libusb_device)
device->class = device_desc.bDeviceClass;
device->subclass = device_desc.bDeviceSubClass;
device->protocol = device_desc.bDeviceProtocol;
+ device->vendor = device_desc.idVendor;
+ device->product = device_desc.idProduct;
+ device->revision = device_desc.bcdDevice;
if (!(ret = libusb_get_active_config_descriptor(libusb_device, &config_desc)))
{
@@ -423,13 +431,11 @@ static void get_device_id(const struct usb_device *device, struct string_buffer
'&','P','I','D','_','%','0','4','X','&','M','I','_','%','0','2','X',0};
static const WCHAR formatW[] = {'U','S','B','\\','V','I','D','_','%','0','4','X',
'&','P','I','D','_','%','0','4','X',0};
- struct libusb_device_descriptor desc;
- libusb_get_device_descriptor(device->libusb_device, &desc);
if (device->parent)
- append_id(buffer, interface_formatW, desc.idVendor, desc.idProduct, device->interface_index);
+ append_id(buffer, interface_formatW, device->vendor, device->product, device->interface_index);
else
- append_id(buffer, formatW, desc.idVendor, desc.idProduct);
+ append_id(buffer, formatW, device->vendor, device->product);
}
static void get_hardware_ids(const struct usb_device *device, struct string_buffer *buffer)
@@ -438,14 +444,11 @@ static void get_hardware_ids(const struct usb_device *device, struct string_buff
'&','P','I','D','_','%','0','4','X','&','R','E','V','_','%','0','4','X','&','M','I','_','%','0','2','X',0};
static const WCHAR formatW[] = {'U','S','B','\\','V','I','D','_','%','0','4','X',
'&','P','I','D','_','%','0','4','X','&','R','E','V','_','%','0','4','X',0};
- struct libusb_device_descriptor desc;
-
- libusb_get_device_descriptor(device->libusb_device, &desc);
if (device->parent)
- append_id(buffer, interface_formatW, desc.idVendor, desc.idProduct, desc.bcdDevice, device->interface_index);
+ append_id(buffer, interface_formatW, device->vendor, device->product, device->revision, device->interface_index);
else
- append_id(buffer, formatW, desc.idVendor, desc.idProduct, desc.bcdDevice);
+ append_id(buffer, formatW, device->vendor, device->product, device->revision);
get_device_id(device, buffer);
append_id(buffer, emptyW);
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/356
More information about the wine-devel
mailing list