- Implement handling a FastDeviceIoControl path (not yet used in portcls)
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Tue, 21 Apr 2009 10:02:57 +0000 (10:02 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Tue, 21 Apr 2009 10:02:57 +0000 (10:02 +0000)
svn path=/trunk/; revision=40633

reactos/drivers/ksfilter/ks/misc.c

index 1b2e156..98ad7ff 100644 (file)
@@ -265,6 +265,7 @@ KsSynchronousIoControlDevice(
     IN  ULONG OutSize,
     OUT PULONG BytesReturned)
 {
+    PKSIOBJECT_HEADER ObjectHeader;
     PDEVICE_OBJECT DeviceObject;
     KEVENT Event;
     PIRP Irp;
@@ -281,6 +282,23 @@ KsSynchronousIoControlDevice(
     if (!DeviceObject)
         return STATUS_UNSUCCESSFUL;
 
+    /* get object header */
+    ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext;
+    /* check if there is fast device io function */
+    if (ObjectHeader->DispatchTable.FastDeviceIoControl)
+    {
+        /* it is send the request */
+        Status = ObjectHeader->DispatchTable.FastDeviceIoControl(FileObject, TRUE, InBuffer, InSize, OutBuffer, OutSize, IoControl, &IoStatusBlock, DeviceObject);
+        /* check if the request was handled */
+        if (Status)
+        {
+            /* store bytes returned */
+            *BytesReturned = IoStatusBlock.Information;
+            /* return status */
+            return IoStatusBlock.Status;
+        }
+    }
+
     /* initialize the event */
     KeInitializeEvent(&Event, NotificationEvent, FALSE);