mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 09:50:02 +00:00
Legacy device objects created for USB keyboard and mouse support should be treated as FDOs, not PDOs.
svn path=/trunk/; revision=21797
This commit is contained in:
parent
c0afd25226
commit
0d86ffc546
2 changed files with 20 additions and 4 deletions
|
@ -211,7 +211,11 @@ UsbMpPnpFdo(
|
||||||
{
|
{
|
||||||
case IRP_MN_START_DEVICE: /* 0x00 */
|
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))
|
if (NT_SUCCESS(Status) && NT_SUCCESS(Irp->IoStatus.Status))
|
||||||
Status = UsbMpFdoStartDevice(DeviceObject, Irp);
|
Status = UsbMpFdoStartDevice(DeviceObject, Irp);
|
||||||
break;
|
break;
|
||||||
|
@ -227,7 +231,11 @@ UsbMpPnpFdo(
|
||||||
case IRP_MN_STOP_DEVICE: /* 0x04 */
|
case IRP_MN_STOP_DEVICE: /* 0x04 */
|
||||||
case IRP_MN_SURPRISE_REMOVAL: /* 0x17 */
|
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))
|
if (NT_SUCCESS(Status) && NT_SUCCESS(Irp->IoStatus.Status))
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
IoDeleteDevice(DeviceObject); // just delete device for now
|
IoDeleteDevice(DeviceObject); // just delete device for now
|
||||||
|
|
|
@ -118,6 +118,7 @@ AddDevice_Keyboard(
|
||||||
IN PDEVICE_OBJECT Pdo)
|
IN PDEVICE_OBJECT Pdo)
|
||||||
{
|
{
|
||||||
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\KeyboardPortUSB");
|
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\KeyboardPortUSB");
|
||||||
|
PUSBMP_DEVICE_EXTENSION DeviceExtension;
|
||||||
PDEVICE_OBJECT Fdo;
|
PDEVICE_OBJECT Fdo;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
@ -129,7 +130,7 @@ AddDevice_Keyboard(
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = IoCreateDevice(DriverObject,
|
Status = IoCreateDevice(DriverObject,
|
||||||
8, // debug
|
sizeof(USBMP_DEVICE_EXTENSION),
|
||||||
&DeviceName,
|
&DeviceName,
|
||||||
FILE_DEVICE_KEYBOARD,
|
FILE_DEVICE_KEYBOARD,
|
||||||
FILE_DEVICE_SECURE_OPEN,
|
FILE_DEVICE_SECURE_OPEN,
|
||||||
|
@ -141,6 +142,9 @@ AddDevice_Keyboard(
|
||||||
DPRINT1("USBMP: IoCreateDevice() for usb keyboard driver failed with status 0x%08lx\n", Status);
|
DPRINT1("USBMP: IoCreateDevice() for usb keyboard driver failed with status 0x%08lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
DeviceExtension = (PUSBMP_DEVICE_EXTENSION)Fdo->DeviceExtension;
|
||||||
|
RtlZeroMemory(DeviceExtension, sizeof(USBMP_DEVICE_EXTENSION));
|
||||||
|
DeviceExtension->IsFDO = TRUE;
|
||||||
KeyboardFdo = Fdo;
|
KeyboardFdo = Fdo;
|
||||||
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||||
DPRINT("USBMP: Created keyboard Fdo: %p\n", Fdo);
|
DPRINT("USBMP: Created keyboard Fdo: %p\n", Fdo);
|
||||||
|
@ -154,6 +158,7 @@ AddDevice_Mouse(
|
||||||
IN PDEVICE_OBJECT Pdo)
|
IN PDEVICE_OBJECT Pdo)
|
||||||
{
|
{
|
||||||
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\PointerPortUSB");
|
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\PointerPortUSB");
|
||||||
|
PUSBMP_DEVICE_EXTENSION DeviceExtension;
|
||||||
PDEVICE_OBJECT Fdo;
|
PDEVICE_OBJECT Fdo;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
@ -165,7 +170,7 @@ AddDevice_Mouse(
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = IoCreateDevice(DriverObject,
|
Status = IoCreateDevice(DriverObject,
|
||||||
8, // debug
|
sizeof(USBMP_DEVICE_EXTENSION),
|
||||||
&DeviceName,
|
&DeviceName,
|
||||||
FILE_DEVICE_MOUSE,
|
FILE_DEVICE_MOUSE,
|
||||||
FILE_DEVICE_SECURE_OPEN,
|
FILE_DEVICE_SECURE_OPEN,
|
||||||
|
@ -177,6 +182,9 @@ AddDevice_Mouse(
|
||||||
DPRINT1("USBMP: IoCreateDevice() for usb mouse driver failed with status 0x%08lx\n", Status);
|
DPRINT1("USBMP: IoCreateDevice() for usb mouse driver failed with status 0x%08lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
DeviceExtension = (PUSBMP_DEVICE_EXTENSION)Fdo->DeviceExtension;
|
||||||
|
RtlZeroMemory(DeviceExtension, sizeof(USBMP_DEVICE_EXTENSION));
|
||||||
|
DeviceExtension->IsFDO = TRUE;
|
||||||
MouseFdo = Fdo;
|
MouseFdo = Fdo;
|
||||||
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||||
DPRINT("USBMP: Created mouse Fdo: %p\n", Fdo);
|
DPRINT("USBMP: Created mouse Fdo: %p\n", Fdo);
|
||||||
|
|
Loading…
Reference in a new issue