Commit 647bec85 authored by Ivo Ivanov's avatar Ivo Ivanov Committed by Alexandre Julliard

wineusb.sys: Add usbver, revision, busnum and portnum to PDO's instance id.

Makes the device instance id unique (at least to the bus), as required by MS. It is also easily addressable by other drivers.
parent a51af111
......@@ -139,9 +139,12 @@ static void add_usb_device(libusb_device *libusb_device)
usb_event.u.added_device.vendor = device_desc.idVendor;
usb_event.u.added_device.product = device_desc.idProduct;
usb_event.u.added_device.revision = device_desc.bcdDevice;
usb_event.u.added_device.usbver = device_desc.bcdUSB;
usb_event.u.added_device.class = device_desc.bDeviceClass;
usb_event.u.added_device.subclass = device_desc.bDeviceSubClass;
usb_event.u.added_device.protocol = device_desc.bDeviceProtocol;
usb_event.u.added_device.busnum = libusb_get_bus_number(libusb_device);
usb_event.u.added_device.portnum = libusb_get_port_number(libusb_device);
usb_event.u.added_device.interface = false;
usb_event.u.added_device.interface_index = -1;
......
......@@ -42,8 +42,8 @@ struct usb_event
struct usb_add_device_event
{
struct unix_device *device;
UINT16 vendor, product, revision;
UINT8 class, subclass, protocol;
UINT16 vendor, product, revision, usbver;
UINT8 class, subclass, protocol, busnum, portnum;
bool interface;
INT16 interface_index;
} added_device;
......
......@@ -78,9 +78,9 @@ struct usb_device
bool interface;
int16_t interface_index;
uint8_t class, subclass, protocol;
uint8_t class, subclass, protocol, busnum, portnum;
uint16_t vendor, product, revision;
uint16_t vendor, product, revision, usbver;
struct unix_device *unix_device;
......@@ -133,9 +133,13 @@ static void add_unix_device(const struct usb_add_device_event *event)
device->class = event->class;
device->subclass = event->subclass;
device->protocol = event->protocol;
device->busnum = event->busnum;
device->portnum = event->portnum;
device->vendor = event->vendor;
device->product = event->product;
device->revision = event->revision;
device->usbver = event->usbver;
EnterCriticalSection(&wineusb_cs);
list_add_tail(&device_list, &device->entry);
......@@ -362,6 +366,11 @@ static void get_device_id(const struct usb_device *device, struct string_buffer
append_id(buffer, L"USB\\VID_%04X&PID_%04X", device->vendor, device->product);
}
static void get_instance_id(const struct usb_device *device, struct string_buffer *buffer)
{
append_id(buffer, L"%u&%u&%u&%u", device->usbver, device->revision, device->busnum, device->portnum);
}
static void get_hardware_ids(const struct usb_device *device, struct string_buffer *buffer)
{
if (device->interface)
......@@ -407,7 +416,7 @@ static NTSTATUS query_id(struct usb_device *device, IRP *irp, BUS_QUERY_ID_TYPE
break;
case BusQueryInstanceID:
append_id(&buffer, L"0");
get_instance_id(device, &buffer);
break;
case BusQueryHardwareIDs:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment