[httpdisk] Use WinVBlock disk library for PnP IRPs
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 10 Jan 2011 07:07:39 +0000 (02:07 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 10 Jan 2011 07:07:39 +0000 (02:07 -0500)
src/httpdisk/bus.c
src/httpdisk/httpdisk.c
src/include/httpdisk.h

index 75ff129..2a5bf73 100644 (file)
@@ -31,6 +31,7 @@
 #include "dummy.h"
 #include "bus.h"
 #include "irp.h"
+#include "disk.h"
 #include "httpdisk.h"
 
 /** From httpdisk.c */
@@ -85,6 +86,7 @@ NTSTATUS STDCALL HttpdiskBusEstablish(void) {
         HTTPDISK_SP_DEV dev = dev_obj->DeviceExtension;
 
         WvlBusInitNode(&dev->BusNode, dev_obj);
+        dev->Disk->ParentBus = HttpdiskBus_.Fdo;
         WvlBusAddNode(&HttpdiskBus_, &dev->BusNode);
         dev_obj = dev_obj->NextDevice;
       }
index ceed61a..e07ca8b 100644 (file)
@@ -109,6 +109,7 @@ MmGetSystemAddressForMdlPrettySafe (
 #include "portable.h"
 #include "winvblock.h"
 #include "bus.h"
+#include "disk.h"
 #include "httpdisk.h"
 #include "debug.h"
 #include "irp.h"
@@ -187,7 +188,7 @@ static
   __drv_dispatchType(IRP_MJ_SCSI)
   DRIVER_DISPATCH HttpdiskIrpScsi_;
 
-static NTSTATUS STDCALL HttpdiskIrpPnpQueryId_(IN HTTPDISK_SP_DEV, IN PIRP);
+static WVL_F_DISK_PNP HttpdiskPnpQueryId_;
 
 VOID
 HttpDiskThread (
@@ -455,6 +456,8 @@ HttpDiskCreateDevice (
     device_extension->bus = FALSE;
     device_extension->number = Number;
     device_extension->dev_type = DeviceType;
+    WvlDiskInit(device_extension->Disk);
+    device_extension->Disk->disk_ops.PnpQueryId = HttpdiskPnpQueryId_;
 
     status = PsCreateSystemThread(
         &thread_handle,
@@ -960,46 +963,13 @@ static NTSTATUS HttpdiskIrpDevCtl_(
 
 static NTSTATUS HttpdiskIrpPnp_(IN PDEVICE_OBJECT dev_obj, IN PIRP irp) {
     HTTPDISK_SP_DEV dev = dev_obj->DeviceExtension;
-    UCHAR minor;
 
     /* Check for a bus IRP. */
     if (dev->bus)
       return HttpdiskBusIrp(dev_obj, irp);
 
-    minor = IoGetCurrentIrpStackLocation(irp)->MinorFunction;
-    switch (minor) {
-        case IRP_MN_START_DEVICE:
-          DBG("IRP_MN_START_DEVICE for dev %p.\n", dev);
-          return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
-
-        case IRP_MN_QUERY_CAPABILITIES:
-          DBG("IRP_MN_QUERY_CAPABILITIES for dev %p.\n", dev);
-          return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
-
-        case IRP_MN_QUERY_RESOURCES:
-          DBG("IRP_MN_QUERY_RESOURCES for dev %p.\n", dev);
-          return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
-
-        case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
-          DBG("IRP_MN_QUERY_RESOURCE_REQUIREMENTS for dev %p.\n", dev);
-          return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
-
-        case IRP_MN_QUERY_DEVICE_TEXT:
-          DBG("IRP_MN_QUERY_DEVICE_TEXT for dev %p.\n", dev);
-          return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
-
-        case IRP_MN_QUERY_ID:
-          return HttpdiskIrpPnpQueryId_(dev, irp);
-
-        case IRP_MN_QUERY_BUS_INFORMATION:
-          DBG("IRP_MN_QUERY_BUS_INFORMATION for dev %p.\n", dev);
-          return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
-
-        default:
-          DBG("Unhandled minor: %d\n", minor);
-          break;
-      }
-    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
+    /* Otherwise, use the WinVBlock disk library to handle it. */
+    return WvlDiskPnp(dev_obj, irp, dev->Disk);
   }
 
 static NTSTATUS HttpdiskIrpScsi_(IN PDEVICE_OBJECT dev_obj, IN PIRP irp) {
@@ -1019,12 +989,14 @@ static NTSTATUS HttpdiskIrpScsi_(IN PDEVICE_OBJECT dev_obj, IN PIRP irp) {
     return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
-static NTSTATUS STDCALL HttpdiskIrpPnpQueryId_(
-    IN HTTPDISK_SP_DEV dev,
-    IN PIRP irp
+static NTSTATUS STDCALL HttpdiskPnpQueryId_(
+    IN PDEVICE_OBJECT dev_obj,
+    IN PIRP irp,
+    IN WVL_SP_DISK_T disk
   ) {
     WCHAR (*buf)[512];
     NTSTATUS status;
+    HTTPDISK_SP_DEV dev = CONTAINING_RECORD(disk, HTTPDISK_S_DEV, Disk[0]);
     PWCHAR hw_id, compat_id;
     BUS_QUERY_ID_TYPE query_type;
 
index 8e9f219..0706891 100644 (file)
@@ -65,6 +65,7 @@ typedef struct HTTPDISK_DEV {
     WVL_S_BUS_NODE  BusNode;
     ULONG           number;
     DEVICE_TYPE     dev_type;
+    WVL_S_DISK_T    Disk[1];
 } HTTPDISK_S_DEV, * HTTPDISK_SP_DEV;
 
 #endif