Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmisc.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Serial mouse driver 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: drivers/input/sermouse/fdo.c 00005 * PURPOSE: Misceallenous operations 00006 * PROGRAMMERS: Copyright 2005-2006 Hervé Poussineau (hpoussin@reactos.org) 00007 */ 00008 00009 #include "sermouse.h" 00010 00011 static IO_COMPLETION_ROUTINE ForwardIrpAndWaitCompletion; 00012 00013 static NTSTATUS NTAPI 00014 ForwardIrpAndWaitCompletion( 00015 IN PDEVICE_OBJECT DeviceObject, 00016 IN PIRP Irp, 00017 IN PVOID Context) 00018 { 00019 if (Irp->PendingReturned) 00020 KeSetEvent((PKEVENT)Context, IO_NO_INCREMENT, FALSE); 00021 return STATUS_MORE_PROCESSING_REQUIRED; 00022 } 00023 00024 NTSTATUS 00025 ForwardIrpAndWait( 00026 IN PDEVICE_OBJECT DeviceObject, 00027 IN PIRP Irp) 00028 { 00029 PDEVICE_OBJECT LowerDevice = ((PSERMOUSE_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice; 00030 KEVENT Event; 00031 NTSTATUS Status; 00032 00033 KeInitializeEvent(&Event, NotificationEvent, FALSE); 00034 IoCopyCurrentIrpStackLocationToNext(Irp); 00035 00036 TRACE_(SERMOUSE, "Calling lower device %p\n", LowerDevice); 00037 IoSetCompletionRoutine(Irp, ForwardIrpAndWaitCompletion, &Event, TRUE, TRUE, TRUE); 00038 00039 Status = IoCallDriver(LowerDevice, Irp); 00040 if (Status == STATUS_PENDING) 00041 { 00042 Status = KeWaitForSingleObject(&Event, Suspended, KernelMode, FALSE, NULL); 00043 if (NT_SUCCESS(Status)) 00044 Status = Irp->IoStatus.Status; 00045 } 00046 00047 return Status; 00048 } 00049 00050 NTSTATUS NTAPI 00051 ForwardIrpAndForget( 00052 IN PDEVICE_OBJECT DeviceObject, 00053 IN PIRP Irp) 00054 { 00055 PDEVICE_OBJECT LowerDevice = ((PSERMOUSE_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice; 00056 00057 IoSkipCurrentIrpStackLocation(Irp); 00058 return IoCallDriver(LowerDevice, Irp); 00059 } Generated on Sat May 26 2012 04:15:48 for ReactOS by
1.7.6.1
|