From 4dc6e068e2361e938e48210d0df15c0e10db4b05 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 5 Jan 2012 00:13:50 +0000 Subject: [PATCH 1/1] [USB-BRINGUP] - Create a pesudo random instance id - Fixes assert when plugin usb devices whose device descriptor don't provide a serial number svn path=/branches/usb-bringup/; revision=54836 --- drivers/usb/usbhub_new/fdo.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/usb/usbhub_new/fdo.c b/drivers/usb/usbhub_new/fdo.c index 06114094d58..c4a631d4597 100644 --- a/drivers/usb/usbhub_new/fdo.c +++ b/drivers/usb/usbhub_new/fdo.c @@ -954,6 +954,28 @@ CreateDeviceIds( UsbChildExtension->usInstanceId.MaximumLength = UsbChildExtension->usInstanceId.Length; DPRINT1("Usb InstanceId %wZ\n", &UsbChildExtension->usInstanceId); } + else + { + // + // the device did not provide a serial number, lets create a pseudo instance id + // + Index = swprintf(BufferPtr, L"USB\\Vid_%04x&Pid_%04x&1A0700BC\0", UsbChildExtension->DeviceDesc.idVendor, UsbChildExtension->DeviceDesc.idProduct) + 1; + UsbChildExtension->usInstanceId.Buffer = (LPWSTR)ExAllocatePool(NonPagedPool, Index * sizeof(WCHAR)); + if (UsbChildExtension->usInstanceId.Buffer == NULL) + { + DPRINT1("Error: failed to allocate %lu bytes\n", Index * sizeof(WCHAR)); + goto Cleanup; + } + + // + // copy instance id + // + RtlCopyMemory(UsbChildExtension->usInstanceId.Buffer, BufferPtr, wcslen(BufferPtr) * sizeof(WCHAR)); + UsbChildExtension->usInstanceId.Length = UsbChildExtension->usDeviceId.MaximumLength = Index * sizeof(WCHAR); + + DPRINT1("usDeviceId %wZ\n", &UsbChildExtension->usInstanceId); + } + return Status; -- 2.17.1