{
case IRP_MN_START_DEVICE: /* 0x00 */
{
- Status = ForwardIrpAndWait(DeviceObject, Irp);
+ if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->NextDeviceObject != NULL)
+ /* HACK due to the lack of lower device for legacy USB keyboard and mouse */
+ Status = ForwardIrpAndWait(DeviceObject, Irp);
+ else
+ Status = STATUS_SUCCESS;
if (NT_SUCCESS(Status) && NT_SUCCESS(Irp->IoStatus.Status))
Status = UsbMpFdoStartDevice(DeviceObject, Irp);
break;
case IRP_MN_STOP_DEVICE: /* 0x04 */
case IRP_MN_SURPRISE_REMOVAL: /* 0x17 */
{
- Status = ForwardIrpAndWait(DeviceObject, Irp);
+ if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->NextDeviceObject != NULL)
+ /* HACK due to the lack of lower device for legacy USB keyboard and mouse */
+ Status = ForwardIrpAndWait(DeviceObject, Irp);
+ else
+ Status = STATUS_SUCCESS;
if (NT_SUCCESS(Status) && NT_SUCCESS(Irp->IoStatus.Status))
Status = STATUS_SUCCESS;
IoDeleteDevice(DeviceObject); // just delete device for now
IN PDEVICE_OBJECT Pdo)
{
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\KeyboardPortUSB");
+ PUSBMP_DEVICE_EXTENSION DeviceExtension;
PDEVICE_OBJECT Fdo;
NTSTATUS Status;
}
Status = IoCreateDevice(DriverObject,
- 8, // debug
+ sizeof(USBMP_DEVICE_EXTENSION),
&DeviceName,
FILE_DEVICE_KEYBOARD,
FILE_DEVICE_SECURE_OPEN,
DPRINT1("USBMP: IoCreateDevice() for usb keyboard driver failed with status 0x%08lx\n", Status);
return Status;
}
+ DeviceExtension = (PUSBMP_DEVICE_EXTENSION)Fdo->DeviceExtension;
+ RtlZeroMemory(DeviceExtension, sizeof(USBMP_DEVICE_EXTENSION));
+ DeviceExtension->IsFDO = TRUE;
KeyboardFdo = Fdo;
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
DPRINT("USBMP: Created keyboard Fdo: %p\n", Fdo);
IN PDEVICE_OBJECT Pdo)
{
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\PointerPortUSB");
+ PUSBMP_DEVICE_EXTENSION DeviceExtension;
PDEVICE_OBJECT Fdo;
NTSTATUS Status;
}
Status = IoCreateDevice(DriverObject,
- 8, // debug
+ sizeof(USBMP_DEVICE_EXTENSION),
&DeviceName,
FILE_DEVICE_MOUSE,
FILE_DEVICE_SECURE_OPEN,
DPRINT1("USBMP: IoCreateDevice() for usb mouse driver failed with status 0x%08lx\n", Status);
return Status;
}
+ DeviceExtension = (PUSBMP_DEVICE_EXTENSION)Fdo->DeviceExtension;
+ RtlZeroMemory(DeviceExtension, sizeof(USBMP_DEVICE_EXTENSION));
+ DeviceExtension->IsFDO = TRUE;
MouseFdo = Fdo;
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
DPRINT("USBMP: Created mouse Fdo: %p\n", Fdo);