[disk] Include driver reference in WV_S_DISK_T
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 7 Jan 2011 17:07:44 +0000 (12:07 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 7 Jan 2011 17:07:44 +0000 (12:07 -0500)
The PDO creation routine needs to pass the correct driver
to IoCreateDevice().

src/aoe/driver.c
src/include/disk.h
src/winvblock/disk/disk.c
src/winvblock/filedisk/filedisk.c
src/winvblock/ramdisk/ramdisk.c

index 96e5182..33b3b68 100644 (file)
@@ -203,6 +203,7 @@ typedef struct AOE_TARGET_LIST_ {
   } AOE_S_TARGET_LIST_, * AOE_SP_TARGET_LIST_;
 
 /** Private globals. */
+static PDRIVER_OBJECT AoeDriverObj_ = NULL;
 static AOE_SP_TARGET_LIST_ AoeTargetList_ = NULL;
 static KSPIN_LOCK AoeTargetListLock_;
 static BOOLEAN AoeStop_ = FALSE;
@@ -302,6 +303,9 @@ NTSTATUS STDCALL DriverEntry(
     if (AoeStarted_)
       return STATUS_SUCCESS;
 
+    /* Note our driver object. */
+    AoeDriverObj_ = DriverObject;
+
     /* Initialize the global list of AoE disks. */
     InitializeListHead(&AoeDiskList_);
     KeInitializeSpinLock(&AoeDiskListLock_);
@@ -1751,6 +1755,7 @@ static AOE_SP_DISK_ AoeDiskCreate_(void) {
     disk->disk_ops.Init = AoeDiskInit_;
     disk->disk_ops.Close = AoeDiskClose_;
     disk->ext = aoe_disk;
+    disk->DriverObj = AoeDriverObj_;
 
     return aoe_disk;
 
index ec70712..c31426b 100644 (file)
@@ -117,6 +117,7 @@ struct WV_DISK_T {
     UINT32 SpecialFileCount;
     LIST_ENTRY tracking;
     PVOID ext;
+    PDRIVER_OBJECT DriverObj;
   };
 
 /* Yield a pointer to the disk. */
index 196eca5..bc1082e 100644 (file)
@@ -144,7 +144,7 @@ static PDEVICE_OBJECT STDCALL create_pdo(IN WV_SP_DEV_T dev_ptr) {
     disk_ptr = disk__get_ptr(dev_ptr);
     /* Create the disk PDO. */
     status = IoCreateDevice(
-        WvDriverObj,
+        disk_ptr->DriverObj,
         sizeof (WV_S_DEV_EXT),
         NULL,
         disk_types[disk_ptr->Media],
index 14fd2ae..9cf6bfe 100644 (file)
@@ -305,6 +305,7 @@ WV_SP_FILEDISK_T WvFilediskCreate(void) {
     disk_ptr->disk_ops.Io = io;
     disk_ptr->disk_ops.Close = close;
     disk_ptr->ext = filedisk_ptr;
+    disk_ptr->DriverObj = WvDriverObj;
 
     return filedisk_ptr;
 
index a4a6eea..598a550 100644 (file)
@@ -194,6 +194,7 @@ WV_SP_RAMDISK_T ramdisk__create(void) {
   disk_ptr->Dev->Ops.PnpId = query_id;
   disk_ptr->disk_ops.Io = io;
   disk_ptr->ext = ramdisk_ptr;
+  disk_ptr->DriverObj = WvDriverObj;
 
   return ramdisk_ptr;