[device] Introduce device__set function
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 8 Dec 2010 14:52:33 +0000 (09:52 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 8 Dec 2010 14:52:33 +0000 (09:52 -0500)
Use this new device__set() to set a 'device' pointer for
a 'DEVICE_OBJECT'.

src/include/device.h
src/winvblock/bus/bus.c
src/winvblock/device.c
src/winvblock/disk/disk.c
src/winvblock/irp.c

index cba164f..b06873a 100644 (file)
@@ -191,5 +191,9 @@ struct _device__type
 };
 
 extern winvblock__lib_func device__type_ptr device__get(PDEVICE_OBJECT);
+extern winvblock__lib_func device__type_ptr device__set(
+    PDEVICE_OBJECT,
+    device__type_ptr
+  );
 
 #endif                         /* _device_h */
index e4e640d..a213961 100644 (file)
@@ -286,7 +286,7 @@ attach_fdo (
    * Set associations for the bus, device, FDO, PDO
    */
   dev_ptr = bus_ptr->device;
-  ( ( driver__dev_ext_ptr ) fdo->DeviceExtension )->device = dev_ptr;
+  device__set(fdo, dev_ptr);
   dev_ptr->Self = fdo;
 
   bus_ptr->PhysicalDeviceObject = PhysicalDeviceObject;
index f0f3303..2e36caf 100644 (file)
@@ -184,3 +184,19 @@ winvblock__lib_func device__type_ptr device__get(PDEVICE_OBJECT dev_obj)
     driver__dev_ext_ptr dev_ext = dev_obj->DeviceExtension;
     return dev_ext->device;
   }
+
+/**
+ * Set the device for a DEVICE_OBJECT.
+ *
+ * @v dev_obj           Points to the DEVICE_OBJECT to set the device for.
+ * @v dev               Points to the device to associate with.
+ */
+winvblock__lib_func device__type_ptr device__set(
+    PDEVICE_OBJECT dev_obj,
+    device__type_ptr dev
+  )
+  {
+    driver__dev_ext_ptr dev_ext = dev_obj->DeviceExtension;
+    dev_ext->device = dev;
+    return;
+  }
index 9d911cc..c7b172b 100644 (file)
@@ -179,7 +179,7 @@ device__create_pdo_decl (
   /*
    * Set associations for the PDO, device, disk
    */
-  ( ( driver__dev_ext_ptr ) dev_obj_ptr->DeviceExtension )->device = dev_ptr;
+  device__set(dev_obj_ptr, dev_ptr);
   dev_ptr->Self = dev_obj_ptr;
   KeInitializeEvent ( &disk_ptr->SearchEvent, SynchronizationEvent, FALSE );
   KeInitializeSpinLock ( &disk_ptr->SpinLock );
index 3659cb7..51c15eb 100644 (file)
@@ -195,7 +195,7 @@ winvblock__lib_func NTSTATUS STDCALL (irp__process_with_table)(
                 dev,
                 irp,
                 io_stack_loc,
-                ((driver__dev_ext_ptr) dev->DeviceExtension)->device,
+                device__get(dev),
                                    completion
               );
             /* Do not process the IRP any further down the stack. */