Allow more than one USB controller
Modified: trunk/reactos/drivers/usb/miniport/common/main.c
_____
Modified: trunk/reactos/drivers/usb/miniport/common/main.c
--- trunk/reactos/drivers/usb/miniport/common/main.c 2005-12-24
17:50:01 UTC (rev 20322)
+++ trunk/reactos/drivers/usb/miniport/common/main.c 2005-12-24
17:56:23 UTC (rev 20323)
@@ -197,7 +197,8 @@
UNICODE_STRING LinkDeviceName;
PUSBMP_DRIVER_EXTENSION DriverExtension;
PUSBMP_DEVICE_EXTENSION DeviceExtension;
- ULONG DeviceNumber;
+ static ULONG DeviceNumber = 0;
+ BOOL AlreadyRestarted = FALSE;
// Allocate driver extension now
DriverExtension = IoGetDriverObjectExtension(DriverObject,
DriverObject);
@@ -216,18 +217,33 @@
}
}
- // Create a unicode device name
- DeviceNumber = 0; //TODO: Allocate new device number every time
- swprintf(DeviceBuffer, L"\\Device\\USBFDO-%lu", DeviceNumber);
- RtlInitUnicodeString(&DeviceName, DeviceBuffer);
+ /* Create a unicode device name. Allocate a new device number
every time */
+ do
+ {
+ DeviceNumber++;
+ if (DeviceNumber == 9999)
+ {
+ /* Hmm. We don't have a free number. */
+ if (AlreadyRestarted)
+ {
+ Status = STATUS_UNSUCCESSFUL;
+ break;
+ }
+ /* Start again at DeviceNumber = 0 to find a
free number */
+ DeviceNumber = 0;
+ AlreadyRestarted = TRUE;
+ }
+ swprintf(DeviceBuffer, L"\\Device\\USBFDO-%lu",
DeviceNumber);
+ RtlInitUnicodeString(&DeviceName, DeviceBuffer);
- Status = IoCreateDevice(DriverObject,
- sizeof(USBMP_DEVICE_EXTENSION),
- &DeviceName,
- FILE_DEVICE_BUS_EXTENDER,
- 0,
- FALSE,
- &fdo);
+ Status = IoCreateDevice(DriverObject,
+ sizeof(USBMP_DEVICE_EXTENSION),
+ &DeviceName,
+ FILE_DEVICE_BUS_EXTENDER,
+ 0,
+ FALSE,
+ &fdo);
+ } while (Status == STATUS_OBJECT_NAME_COLLISION);
if (!NT_SUCCESS(Status))
{