2 * PROJECT: ReactOS Serial mouse driver
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: drivers/input/sermouse/fdo.c
5 * PURPOSE: Misceallenous operations
6 * PROGRAMMERS: Copyright 2005-2006 Hervé Poussineau (hpoussin@reactos.org)
11 static IO_COMPLETION_ROUTINE ForwardIrpAndWaitCompletion
;
14 ForwardIrpAndWaitCompletion(
15 IN PDEVICE_OBJECT DeviceObject
,
19 if (Irp
->PendingReturned
)
20 KeSetEvent((PKEVENT
)Context
, IO_NO_INCREMENT
, FALSE
);
21 return STATUS_MORE_PROCESSING_REQUIRED
;
26 IN PDEVICE_OBJECT DeviceObject
,
29 PDEVICE_OBJECT LowerDevice
= ((PSERMOUSE_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
)->LowerDevice
;
33 KeInitializeEvent(&Event
, NotificationEvent
, FALSE
);
34 IoCopyCurrentIrpStackLocationToNext(Irp
);
36 TRACE_(SERMOUSE
, "Calling lower device %p\n", LowerDevice
);
37 IoSetCompletionRoutine(Irp
, ForwardIrpAndWaitCompletion
, &Event
, TRUE
, TRUE
, TRUE
);
39 Status
= IoCallDriver(LowerDevice
, Irp
);
40 if (Status
== STATUS_PENDING
)
42 Status
= KeWaitForSingleObject(&Event
, Suspended
, KernelMode
, FALSE
, NULL
);
43 if (NT_SUCCESS(Status
))
44 Status
= Irp
->IoStatus
.Status
;
52 IN PDEVICE_OBJECT DeviceObject
,
55 PDEVICE_OBJECT LowerDevice
= ((PSERMOUSE_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
)->LowerDevice
;
57 IoSkipCurrentIrpStackLocation(Irp
);
58 return IoCallDriver(LowerDevice
, Irp
);