diff --git a/reactos/drivers/input/kbdclass/kbdclass.c b/reactos/drivers/input/kbdclass/kbdclass.c index 38da20ccb88..606927d7e03 100644 --- a/reactos/drivers/input/kbdclass/kbdclass.c +++ b/reactos/drivers/input/kbdclass/kbdclass.c @@ -761,6 +761,7 @@ HandleReadIrp( { PCLASS_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; NTSTATUS Status; + KIRQL OldIrql; TRACE_(CLASS_NAME, "HandleReadIrp(DeviceObject %p, Irp %p)\n", DeviceObject, Irp); @@ -804,18 +805,20 @@ HandleReadIrp( } else { - IoMarkIrpPending(Irp); - DeviceExtension->PendingIrp = Irp; - (VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine); - if (Irp->Cancel && IoSetCancelRoutine(Irp, NULL)) + IoAcquireCancelSpinLock(&OldIrql); + if (Irp->Cancel) { DeviceExtension->PendingIrp = NULL; Status = STATUS_CANCELLED; } else { + IoMarkIrpPending(Irp); + DeviceExtension->PendingIrp = Irp; + (VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine); Status = STATUS_PENDING; } + IoReleaseCancelSpinLock(OldIrql); } return Status; } diff --git a/reactos/drivers/input/mouclass/mouclass.c b/reactos/drivers/input/mouclass/mouclass.c index 775931b9701..99818bb6b5e 100644 --- a/reactos/drivers/input/mouclass/mouclass.c +++ b/reactos/drivers/input/mouclass/mouclass.c @@ -738,6 +738,7 @@ HandleReadIrp( { PCLASS_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; NTSTATUS Status; + KIRQL OldIrql; TRACE_(CLASS_NAME, "HandleReadIrp(DeviceObject %p, Irp %p)\n", DeviceObject, Irp); @@ -781,18 +782,20 @@ HandleReadIrp( } else { - IoMarkIrpPending(Irp); - DeviceExtension->PendingIrp = Irp; - (VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine); - if (Irp->Cancel && IoSetCancelRoutine(Irp, NULL)) + IoAcquireCancelSpinLock(&OldIrql); + if (Irp->Cancel) { DeviceExtension->PendingIrp = NULL; Status = STATUS_CANCELLED; } else { + IoMarkIrpPending(Irp); + DeviceExtension->PendingIrp = Irp; + (VOID)IoSetCancelRoutine(Irp, ClassCancelRoutine); Status = STATUS_PENDING; } + IoReleaseCancelSpinLock(OldIrql); } return Status; }