[httpdisk] Send bus IRPs to the bus IRP dispatcher
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sat, 8 Jan 2011 01:37:07 +0000 (20:37 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sat, 8 Jan 2011 01:38:52 +0000 (20:38 -0500)
src/httpdisk/bus.c
src/httpdisk/httpdisk.c
src/include/httpdisk.h

index d1d6440..58a2c7b 100644 (file)
@@ -30,6 +30,7 @@
 #include "debug.h"
 #include "dummy.h"
 #include "bus.h"
+#include "irp.h"
 
 /** From httpdisk.c */
 extern PDRIVER_OBJECT HttpdiskDriverObj;
@@ -38,6 +39,7 @@ extern PDRIVER_OBJECT HttpdiskDriverObj;
 NTSTATUS STDCALL HttpdiskBusEstablish(void);
 VOID HttpdiskBusCleanup(void);
 DRIVER_ADD_DEVICE HttpdiskBusAttach;
+DRIVER_DISPATCH HttpdiskBusIrp;
 
 /** Private. */
 static NTSTATUS STDCALL HttpdiskBusCreateFdo_(void);
@@ -100,6 +102,10 @@ NTSTATUS HttpdiskBusAttach(
     return STATUS_NOT_SUPPORTED;
   }
 
+NTSTATUS HttpdiskBusIrp(IN PDEVICE_OBJECT DevObj, IN PIRP Irp) {
+    return WvlIrpComplete(Irp, 0, STATUS_NOT_SUPPORTED);
+  }
+
 static NTSTATUS STDCALL HttpdiskBusCreateFdo_(void) {
     NTSTATUS status;
 
index c7a7bbf..2dad476 100644 (file)
@@ -113,6 +113,7 @@ MmGetSystemAddressForMdlPrettySafe (
 extern NTSTATUS STDCALL HttpdiskBusEstablish(void);
 extern VOID HttpdiskBusCleanup(void);
 extern DRIVER_ADD_DEVICE HttpdiskBusAttach;
+extern DRIVER_DISPATCH HttpdiskBusIrp;
 
 /* For this file. */
 #define PARAMETER_KEY           L"\\Parameters"
@@ -426,6 +427,8 @@ HttpDiskCreateDevice (
 
     device_extension->terminate_thread = FALSE;
 
+    device_extension->bus = FALSE;
+
     status = PsCreateSystemThread(
         &thread_handle,
         (ACCESS_MASK) 0L,
@@ -535,6 +538,14 @@ static NTSTATUS HttpdiskIrpCreateClose_(
     IN PDEVICE_OBJECT   DeviceObject,
     IN PIRP             Irp
   ) {
+    HTTPDISK_SP_DEV   device_extension;
+
+    device_extension = (HTTPDISK_SP_DEV) DeviceObject->DeviceExtension;
+
+    /* Check for a bus IRP. */
+    if (device_extension->bus)
+      return HttpdiskBusIrp(DeviceObject, Irp);
+
     Irp->IoStatus.Status = STATUS_SUCCESS;
     Irp->IoStatus.Information = FILE_OPENED;
 
@@ -554,6 +565,10 @@ static NTSTATUS HttpdiskIrpReadWrite_(
 
     device_extension = (HTTPDISK_SP_DEV) DeviceObject->DeviceExtension;
 
+    /* Check for a bus IRP. */
+    if (device_extension->bus)
+      return HttpdiskBusIrp(DeviceObject, Irp);
+
     if (!device_extension->media_in_device)
     {
         Irp->IoStatus.Status = STATUS_NO_MEDIA_IN_DEVICE;
@@ -603,6 +618,10 @@ static NTSTATUS HttpdiskIrpDevCtl_(
 
     device_extension = (HTTPDISK_SP_DEV) DeviceObject->DeviceExtension;
 
+    /* Check for a bus IRP. */
+    if (device_extension->bus)
+      return HttpdiskBusIrp(DeviceObject, Irp);
+
     io_stack = IoGetCurrentIrpStackLocation(Irp);
 
     if (!device_extension->media_in_device &&
index 191c3df..8001efe 100644 (file)
@@ -61,6 +61,7 @@ typedef struct HTTPDISK_DEV {
     KEVENT          request_event;
     PVOID           thread_pointer;
     BOOLEAN         terminate_thread;
+    BOOLEAN         bus;
 } HTTPDISK_S_DEV, * HTTPDISK_SP_DEV;
 
 #endif