[driver,device] Remove driver__default_dispatch function
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 13 Dec 2010 16:43:16 +0000 (11:43 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 13 Dec 2010 16:43:16 +0000 (11:43 -0500)
driver__dispatch_() will handle the STATUS_NOT_SUPPORTED case.

src/include/driver.h
src/winvblock/device.c
src/winvblock/driver.c

index e33ebe2..9a8e657 100644 (file)
@@ -62,7 +62,6 @@ typedef NTSTATUS STDCALL driver__dispatch_func(
     IN PIRP
   );
 
-extern winvblock__lib_func driver__dispatch_func driver__default_dispatch;
 extern winvblock__lib_func irp__handler driver__not_supported;
 extern winvblock__lib_func NTSTATUS STDCALL driver__complete_irp(
     IN PIRP,
index 38d9946..8b86749 100644 (file)
@@ -60,7 +60,6 @@ winvblock__lib_func struct device__type * device__create(void) {
     if (dev == NULL)
       return NULL;
     /* Populate non-zero device defaults. */
-    dev->dispatch = driver__default_dispatch;
     dev->DriverObject = driver__obj_ptr;
     dev->ops.create_pdo = device__make_pdo_;
     dev->ops.free = device__free_dev_;
index 7c55c5c..7f5e4ee 100644 (file)
@@ -544,50 +544,12 @@ static NTSTATUS STDCALL driver__dispatch_(
           );
         KeSetEvent(&dev_ptr->thread_wakeup, 0, FALSE);
         status = STATUS_PENDING;
-      } else
-      status = dev_ptr->dispatch(DeviceObject, Irp);
-
-    return status;
-  }
-
-/* Place-holder while implementing a dispatch routine per device class. */
-winvblock__lib_func NTSTATUS STDCALL driver__default_dispatch(
-    IN PDEVICE_OBJECT dev,
-    IN PIRP irp
-  ) {
-    NTSTATUS status;
-    winvblock__bool completion = FALSE;
-    static const irp__handling handling_table[] = {
-        /*
-         * Major, minor, any major?, any minor?, handler
-         * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-         * Note that the fall-through case must come FIRST!
-         * Why? It sets completion to true, so others won't be called.
-         */
-        {             0, 0,  TRUE, TRUE, driver__not_supported },
-      };
-
-    status = irp__process(
-        dev,
-        irp,
-        IoGetCurrentIrpStackLocation(irp),
-        device__get(dev),
-        &completion
-      );
-    /* Fall through to some driver defaults, if needed. */
-    if (status == STATUS_NOT_SUPPORTED && !completion) {
-        status = irp__process_with_table(
-            dev,
-            irp,
-            handling_table,
-            sizeof handling_table,
-            &completion
-          );
+      } else {
+        if (dev_ptr->dispatch)
+          status = dev_ptr->dispatch(DeviceObject, Irp);
+          else
+          return driver__complete_irp(Irp, 0, STATUS_NOT_SUPPORTED);
       }
-    #ifdef DEBUGIRPS
-    if (status != STATUS_PENDING)
-      Debug_IrpEnd(irp, status);
-    #endif
 
     return status;
   }