ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

misc.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.