[PATCH 1/5] wineusb.sys: Implement device and instance IDs.
Zebediah Figura
z.figura12 at gmail.com
Thu Apr 16 19:58:15 CDT 2020
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/wineusb.sys/wineusb.c | 43 ++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/dlls/wineusb.sys/wineusb.c b/dlls/wineusb.sys/wineusb.c
index b60d496e9e..918c7a584b 100644
--- a/dlls/wineusb.sys/wineusb.c
+++ b/dlls/wineusb.sys/wineusb.c
@@ -278,15 +278,58 @@ static NTSTATUS fdo_pnp(IRP *irp)
return IoCallDriver(bus_pdo, irp);
}
+static void get_device_id(const struct usb_device *device, WCHAR *buffer)
+{
+ 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);
+ sprintfW(buffer, formatW, desc.idVendor, desc.idProduct);
+}
+
+static NTSTATUS query_id(const struct usb_device *device, IRP *irp, BUS_QUERY_ID_TYPE type)
+{
+ WCHAR *id = NULL;
+
+ switch (type)
+ {
+ case BusQueryDeviceID:
+ if ((id = ExAllocatePool(PagedPool, 28 * sizeof(WCHAR))))
+ get_device_id(device, id);
+ break;
+
+ case BusQueryInstanceID:
+ if ((id = ExAllocatePool(PagedPool, 2 * sizeof(WCHAR))))
+ {
+ id[0] = '0';
+ id[1] = 0;
+ }
+ break;
+
+ default:
+ FIXME("Unhandled ID query type %#x.\n", type);
+ return irp->IoStatus.Status;
+ }
+
+ irp->IoStatus.Information = (ULONG_PTR)id;
+ return STATUS_SUCCESS;
+}
+
static NTSTATUS pdo_pnp(DEVICE_OBJECT *device_obj, IRP *irp)
{
IO_STACK_LOCATION *stack = IoGetCurrentIrpStackLocation(irp);
+ struct usb_device *device = device_obj->DeviceExtension;
NTSTATUS ret = irp->IoStatus.Status;
TRACE("device_obj %p, irp %p, minor function %#x.\n", device_obj, irp, stack->MinorFunction);
switch (stack->MinorFunction)
{
+ case IRP_MN_QUERY_ID:
+ ret = query_id(device, irp, stack->Parameters.QueryId.IdType);
+ break;
+
case IRP_MN_START_DEVICE:
case IRP_MN_QUERY_CAPABILITIES:
ret = STATUS_SUCCESS;
--
2.26.0
More information about the wine-devel
mailing list