[version] Up version to 0.0.1.8
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Tue, 1 Jun 2010 07:19:42 +0000 (03:19 -0400)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Tue, 1 Jun 2010 07:30:52 +0000 (03:30 -0400)
This release introduces initial support for GRUB4DOS
sector-mapped disks.  Currently, only HDD images with MBRs
are supported.

Please note that this is an early stage in supporting this
scenario, so you might find quirks.  Also be aware of the
limitations:
- If your booted-from disk image file gets _moved_ while you
  are booted from it, expect terrible things to happen.  Try
  to avoid such things as defragmenting the filesystem with
  the disk image on it!
- There isn't really a good way to know which Windows disk a
  GRUB4DOS backing disk corresponds to!  Not enough information
  is available to make the right decision.  BIOS drive numbers
  have no relevance in Windows, so we cannot exactly identify
  which backing disk is correct for a disk image
- WinVBlock is not capable of magic; your booted disk image
  _must_ have drivers and device ID associations so that the
  _real_ disks are found at boot time!

CHANGES.log
makeinf.bat
src/aoe/aoe.rc
src/winvblock/winvblock.rc

index c6e423c..e415230 100644 (file)
@@ -1,4 +1,416 @@
 Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Tue Jun 1 03:19:42 2010 -0400\r
+\r
+    [version] Up version to 0.0.1.8\r
+    \r
+    This release introduces initial support for GRUB4DOS\r
+    sector-mapped disks.  Currently, only HDD images with MBRs\r
+    are supported.\r
+    \r
+    Please note that this is an early stage in supporting this\r
+    scenario, so you might find quirks.  Also be aware of the\r
+    limitations:\r
+    - If your booted-from disk image file gets _moved_ while you\r
+      are booted from it, expect terrible things to happen.  Try\r
+      to avoid such things as defragmenting the filesystem with\r
+      the disk image on it!\r
+    - There isn't really a good way to know which Windows disk a\r
+      GRUB4DOS backing disk corresponds to!  Not enough information\r
+      is available to make the right decision.  BIOS drive numbers\r
+      have no relevance in Windows, so we cannot exactly identify\r
+      which backing disk is correct for a disk image\r
+    - WinVBlock is not capable of magic; your booted disk image\r
+      _must_ have drivers and device ID associations so that the\r
+      _real_ disks are found at boot time!\r
+\r
+commit 528bc2fd78dc16ab0eb491d16d7c9754cedf2baf\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Tue Jun 1 03:09:12 2010 -0400\r
+\r
+    [filedisk] Add MBR check for GRUB4DOS disks\r
+    \r
+    We lack any good means of finding the correct backing disk for\r
+    a boot-time file-backed disk.  Here is a really cheap check\r
+    which will test for an MBR where we would expect on on the\r
+    backing disk.  This doesn't support CD/DVD, obviously.\r
+\r
+commit 4e975c0c27e20785862311a2cdb26195fe7c4f9d\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Tue Jun 1 02:28:04 2010 -0400\r
+\r
+    [disk] Move MBR structure def. and CHS macros into header\r
+\r
+commit 0ae2ca7a78e9cf27f22a316dcb05803c62db80b9\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Tue Jun 1 00:43:43 2010 -0400\r
+\r
+    [filedisk] Increase timeout for threaded disk processing\r
+    \r
+    If there's nothing to do but a possible device__free(),\r
+    just sleep for up to a whole second before checking.\r
+\r
+commit 011dab2d9d092b18e4b33ac6c4f9cef704bc76ef\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Tue Jun 1 00:04:06 2010 -0400\r
+\r
+    [filedisk] Initial support for booting a filedisk from GRUB4DOS\r
+    \r
+    Whee.  We scan memory for GRUB4DOS sector-mapped disks, create\r
+    filedisks for them, then hook them so that the first time they\r
+    are used, we try to find the appropriate backing disk for each.\r
+    \r
+    The limitations of the current implementation are:\r
+    - We assume the first disk is the right backing disk (very naive)\r
+    - We don't check to make sure we don't open our own disk\r
+    - It's pretty slow for some reason that needs investigation\r
+    - There is not really a good way to associate GRUB4DOS mappings\r
+      to Windows disks; not enough information is passed!\r
+    - If the image file for a filedisk gets moved while we are using\r
+      it, expect terrible things to happen!\r
+\r
+commit c4ecc3c834c3cc134c57a6ff6111c5bf304518e5\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Mon May 31 22:36:38 2010 -0400\r
+\r
+    [filedisk] Move filedisk__get_ptr macro into header\r
+    \r
+    Same as other such *__get_ptr() macros used by multiple\r
+    C source files.\r
+\r
+commit 66a679f8bbd572030568f71a4230e8be13add7d6\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Mon May 31 21:41:18 2010 -0400\r
+\r
+    [filedisk] Implement threaded filedisk creation function\r
+    \r
+    filedisk__create_threaded() should return a pointer to a\r
+    threaded, file-backed disk.\r
+\r
+commit 98538ada95a51016053f6697554de76cf19f9d33\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Mon May 31 21:21:16 2010 -0400\r
+\r
+    [filedisk] Add support for threaded filedisks\r
+    \r
+    We now have a disk__io routine which enqueues a request for\r
+    later processing.  We implement a device__free routine to\r
+    support such asynchronous filedisks.  We have a thread\r
+    function per threaded filedisk which processes the queue\r
+    of requests.\r
+\r
+commit 9e1d1812362fc789b8fb9c2c0f742000335fa3f9\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Mon May 31 15:29:26 2010 -0400\r
+\r
+    [filedisk] Allow for a file offset\r
+    \r
+    It's useful to have a base offset into a file from which\r
+    the virtual disk's sectors will be considered to start.\r
+\r
+commit 351f5f0aa0b3b3b08d38d8cb4618cf01ca10d71c\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Sun May 30 02:16:19 2010 -0400\r
+\r
+    [filedisk] Add GRUB4DOS module\r
+    \r
+    Distinguish between the case of GRUB4DOS RAM disks and\r
+    GRUB4DOS sector-mapped (file-backed) disks.  A new probe\r
+    routine is added (which currently does nothing).\r
+\r
+commit d496bbd8a09700f1f9eff5699f5b4e1e84c13c16\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Sun May 30 02:01:01 2010 -0400\r
+\r
+    [filedisk] Put in own subdir and change to library\r
+    \r
+    There is a plan to support GRUB4DOS sector-mapped disks,\r
+    so we will need another probe routine, suggesting that\r
+    there should be a GRUB4DOS source file in a filedisk/\r
+    directory, as there is a GRUB4DOS source file in the\r
+    ramdisk/ directory.\r
+\r
+commit 7851226757d4ef03b7fdc7fe8341fbcc755ddbd5\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Sun May 30 01:27:48 2010 -0400\r
+\r
+    [disk] Allow for asynchronous IRP completion\r
+    \r
+    After much debugging, it was revealed that in order to use\r
+    ZwReadFile() for a file-backed disk during boot, one needs\r
+    to return STATUS_PENDING to the caller and start a worker\r
+    thread who will use ZwReadFile() and then complete the IRP.\r
+\r
+commit c3bbae2932391febefafa00590744e3b648455e1\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Sun May 23 13:36:53 2010 -0400\r
+\r
+    [irp,bus] Send and handle IRP completion properly for detach\r
+    \r
+    The disk detach handler was not completing the IRP and the\r
+    IRP processor was not checking for completion in an outer\r
+    while() loop.  Both fixed.\r
+\r
+commit cdb9742c4666551053e24693814a0112d097eefc\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Sun May 23 12:47:02 2010 -0400\r
+\r
+    [aoe] Fix get_ptr macro and uses\r
+    \r
+    How I missed this, I really have no idea...\r
+\r
+commit 85a5a7a469f6e8fc509999e4eca7c7ecf246ce30\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Sun May 23 11:46:31 2010 -0400\r
+\r
+    [bus] Fix NULL pointer dereference when disk walking\r
+    \r
+    For 'winvblk detach' and 'winvblk umount' commands.\r
+\r
+commit 9ae27babccf48d38a7908891dec8ed48e23b1a56\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Sun May 23 11:45:17 2010 -0400\r
+\r
+    [aoe] Fix NULL pointer dereferencing in disk walking\r
+    \r
+    For the 'winvblk show' command...  Which, by the way,\r
+    should be untied from the AoE module at some point.\r
+\r
+commit dafb0c3962355ada36b71501e890eb96dba873f5\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Sun May 23 05:18:22 2010 -0400\r
+\r
+    [major] Re-work device structures and creation\r
+    \r
+    This rather large commit affects a majority of the AoE and\r
+    WinVBlock modules.  It is unfortunately large in order to\r
+    ensure that after the series of changes were made, that a\r
+    system was still bootable from a WinVBlock disk.\r
+    \r
+    What was involved:\r
+    \r
+    A DEVICE_OBJECT's DeviceExtension member no longer points to\r
+    one of our device types.  All of our device types were\r
+    previously structures which included the structures they\r
+    derived functionality from as their first members.  So you\r
+    had something like a RAM disk with a disk as its first\r
+    member, a disk having a device as its first member.  So to\r
+    access any one of the structures, you could quite simply\r
+    cast a pointer.\r
+    \r
+    Now a DeviceExtension points to a pointer to a device__type.\r
+    A device__type has an ext member which is a pointer to the\r
+    instance of the next-higher structure type, such as a\r
+    disk__type.  A disk__type also has an ext member, so that\r
+    AoE, RAM, and file-backed disks can extend it.\r
+    \r
+    Each device class provides a global creation routine, which\r
+    tracks the device instance in a list of created devices for\r
+    that type.  The device class' creation routine should set\r
+    default parameters.  The creation routine can override the\r
+    device routines used by callers calling the routines of the\r
+    "base class" (the device type).  As an example, when you\r
+    create a RAM disk, you:\r
+      - create a disk\r
+        - which creates a device\r
+        - which hook's a device routine for the device\r
+      - hook some of the disk's routines\r
+      - add the RAM disk to the global list\r
+    \r
+    When deleting the RAM disk, you:\r
+      - call the deletion routine you hooked for the disk\r
+        - which calls the deletion rout. it hooked for the dev.\r
+      - remove the RAM disk from the global list\r
+    \r
+    Some copy'n'pasted comments were corrected.\r
+    \r
+    Some code expecting the base-class-as-first-member-of-\r
+    derived-class was exposed and modified appropriately.\r
+    \r
+    get_ptr() macros were changed.\r
+    \r
+    DEVICE_OBJECT deletion paths were tied to device__free()\r
+    calls.\r
+    \r
+    Some TODOs are left: More error-checking when calling\r
+    module initialization functions, watching NULL pointer\r
+    dereferences when walking sibling pointers.\r
+\r
+commit ee22e3f47b5745cbbd82bd4dbe61ae079b690082\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Fri May 21 15:33:32 2010 -0400\r
+\r
+    [bus] Use new bus creation strategy\r
+    \r
+    When creating the boot bus or when a user manually installs\r
+    a bus device, the bus module will use the new device creation\r
+    scheme.\r
+    \r
+    When the bus module initializes, it creates the boot bus,\r
+    which is a root-enumerated device via IoReportDetectedDevice().\r
+    Using this kernel function means that the PnpManager owns the\r
+    PDO.  If a user manually installs a bus device, PnpManager also\r
+    owns the PDO.  So the create_pdo() routine for a bus doesn't\r
+    make a lot of sense, except for indirectly for the case of the\r
+    boot bus only.\r
+    \r
+    Also, when the IoReportDetectedDevice() is used, we must\r
+    manually call our attach_fdo() function to create the\r
+    DEVICE_OBJECT which we own and which we will associate with\r
+    the driver-internal bus & device details.\r
+    \r
+    There is a really big nasty TODO left over in this commit\r
+    which should be removed as soon as possible.  In shifting to\r
+    the new device classing scheme, we are part-way through,\r
+    where some devices use a DEVICE_OBJECT's DeviceExtension as\r
+    a device__type_ptr, and the bus uses it as a device__type_ptr*.\r
+    So for now, we have the mini IRP handling system sense if it\r
+    should compensate for this.\r
+    \r
+    The next steps will be to move all of the various disk types\r
+    to use counterpart strategies for device classing.  But hey,\r
+    it still boots.\r
+\r
+commit 09743972d1ed6483a9ac1be0a6011f991390b9b5\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Fri May 21 00:07:53 2010 -0400\r
+\r
+    [cosmetics] Fix some typos due to copy and paste\r
+\r
+commit b21520d56202027a0e01212f4e7fe746ac4d669c\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Thu May 20 23:48:15 2010 -0400\r
+\r
+    [bus] bus__add_child once more takes a bus param\r
+    \r
+    Trying to move away from the "one bus" model.\r
+\r
+commit 7b4b51eecd6904c2aaf7fc3bff1ccc84a07d02b3\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Thu May 20 23:12:12 2010 -0400\r
+\r
+    [device,bus] Further develop device routines\r
+    \r
+    Much of it unused for now, but eventually (seems like it's\r
+    always eventually) each device type will create an instance\r
+    of a type it would like to derive from, then overrides\r
+    whatever operations it wants to.  When the device is asked\r
+    to perform operations, it should either have sensible, do-\r
+    nothing defaults or meaningful device-specific operations.\r
+\r
+commit badf22aa21fd2497a395bd8321770e207bdf1310\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Thu May 20 16:19:28 2010 -0400\r
+\r
+    [bus] Create boot bus here, introduce init function\r
+    \r
+    The bus module is now responsible for creation of bus PDOs,\r
+    such as the boot bus which exposes WinVBlock-supported boot\r
+    disks.  We now have bus__init() and bus__finalize() funcs\r
+    which are called by the driver module.\r
+    \r
+    We also mimic the device module by having a bus__create()\r
+    function, though it is currently unused, also like the\r
+    device__create() function.\r
+\r
+commit b99d66372c8ed5a83a76c5fd584ce472f2631d03\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Thu May 20 09:41:29 2010 -0400\r
+\r
+    [device] Don't use a pointer for device operations\r
+    \r
+    Instead of pointing at some device operations structure,\r
+    we actually copy the operations' function pointers for\r
+    each device.\r
+\r
+commit f0dc2f7cfb53df889524e8de78a1cbe8ba1fa531\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Thu May 20 01:44:59 2010 -0400\r
+\r
+    [device] Introduce device creation routine\r
+    \r
+    Though currently unused, the idea is to eventually have the\r
+    different device type modules as providers of their device\r
+    types.  The new device-common module will produce a device\r
+    structure which has device-common properties.  A caller can\r
+    then override whichever properties they need to, such as the\r
+    device operations.\r
+    \r
+    Also, device creation should track created devices for easy\r
+    tear-down later on.\r
+\r
+commit 95ccb0ef85ced48b53b4d459d36dd2170603b2fd\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Tue May 18 16:39:41 2010 -0400\r
+\r
+    [device] Introduce device header and move details there\r
+    \r
+    Move device specifics out of the driver header and into a\r
+    device headers, instead.  We are on our way to a form of\r
+    device functionality inheritance...  Something like:\r
+    \r
+      device\r
+      ..bus\r
+      ..disk\r
+      ....aoe\r
+      ....ramdisk\r
+      ....filedisk\r
+    \r
+    "And the rest." - Gilligan's Island\r
+\r
+commit ca9d2991567c6ef9d846ccad0eb13c06e8a38d1b\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Tue May 18 10:42:23 2010 -0400\r
+\r
+    [winvblock/driver] Rename dev_ext member to device\r
+    \r
+    Just cosmetic.  I am trying to hide the details of\r
+    Windows DEVICE_OBJECTs with their DeviceExtension.\r
+\r
+commit 81ea249b7a177e6ef8ed86d4854c2cb55430d4ab\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Tue May 18 10:25:47 2010 -0400\r
+\r
+    [project] Rename dev_ext variables to dev\r
+    \r
+    Just cosmetic.  I am trying to hide the details of\r
+    Windows DEVICE_OBJECTs with their DeviceExtension.\r
+\r
+commit 30cc5dec4305178d39512d8e6fdb67dd91819fa7\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Mon May 17 23:02:32 2010 -0400\r
+\r
+    [winvblock/driver] Rename driver__dev_ext to device__type\r
+    \r
+    This type will be coming out of the driver module soon.\r
+\r
+commit 763dec1e3c74a8095fbb43ec0ebff5acd0660ff5\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Mon May 17 20:59:12 2010 -0400\r
+\r
+    [winvblock/probe] Move disk probe routine into bus\r
+    \r
+    It makes some sense that we can delay our RAM disk probing\r
+    until the bus is actually queried for children.  This means\r
+    that the DriverEntry() returns sooner.\r
+\r
+commit 68b99504849b45911ea5ada3ad2c8aa2245c1256\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Mon May 17 20:27:37 2010 -0400\r
+\r
+    [disk] Add missing extern specifier for export\r
+\r
+commit e749b9e42922aa04ab246bc53da31c2f3b75b358\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
+Date:   Mon May 17 00:12:05 2010 -0400\r
+\r
+    [build] Re-visit build system and directory structure\r
+    \r
+    Thanks to OSR's ntdev mailing-list and Tim Roberts' response,\r
+    we now have a directory layout with some hierarchical\r
+    organization.  Very nice.\r
+\r
+commit 18e2cbd719c6974a5334b7b773e8a28f83fde31b\r
+Author: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>\r
 Date:   Sun May 16 17:23:51 2010 -0400\r
 \r
     [version] Up version to 0.0.1.7\r
index 750bc93..53b7ce8 100644 (file)
@@ -35,7 +35,7 @@ Class=SCSIAdapter
 ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}\r
 Provider=WinVBlock\r
 CatalogFile=winvblk.cat\r
-DriverVer=05/16/2010,0.0.0.7\r
+DriverVer=05/16/2010,0.0.0.8\r
  \r
 [Manufacturer]\r
 WinVBlock=WinVBlockDriver,,NTamd64\r
index 251d13a..b09c7a4 100644 (file)
@@ -1,6 +1,6 @@
 1 VERSIONINFO\r
-FILEVERSION 0,0,1,7\r
-PRODUCTVERSION 0,0,1,7\r
+FILEVERSION 0,0,1,8\r
+PRODUCTVERSION 0,0,1,8\r
 FILEOS 0x40004\r
 FILETYPE 0x3\r
 {\r
@@ -10,12 +10,12 @@ BLOCK "StringFileInfo"
        {\r
                VALUE "CompanyName", "Shao Miller"\r
                VALUE "FileDescription", "WinVBlock AoE SAN Disk Driver"\r
-               VALUE "FileVersion", "0.0.1.7 (May-16-2010)"\r
+               VALUE "FileVersion", "0.0.1.8 (June-1-2010)"\r
                VALUE "InternalName", "WinVBlock AoE SAN Disk Driver"\r
                VALUE "LegalCopyright", "© 2008 V., © 2009-2010 Shao Miller, All rights reserved, Licensed under GPL."\r
                VALUE "OriginalFilename", "aoe.sys"\r
                VALUE "ProductName", "WinVBlock AoE SAN Disk Driver"\r
-               VALUE "ProductVersion", "0.0.1.7"\r
+               VALUE "ProductVersion", "0.0.1.8"\r
        }\r
 }\r
 \r
index d9f3f68..bbce3f1 100644 (file)
@@ -1,6 +1,6 @@
 1 VERSIONINFO\r
-FILEVERSION 0,0,1,7\r
-PRODUCTVERSION 0,0,1,7\r
+FILEVERSION 0,0,1,8\r
+PRODUCTVERSION 0,0,1,8\r
 FILEOS 0x40004\r
 FILETYPE 0x3\r
 {\r
@@ -10,12 +10,12 @@ BLOCK "StringFileInfo"
        {\r
                VALUE "CompanyName", "Shao Miller"\r
                VALUE "FileDescription", "WinVBlock Virtual SCSI Driver"\r
-               VALUE "FileVersion", "0.0.1.7 (May-16-2010)"\r
+               VALUE "FileVersion", "0.0.1.8 (June-1-2010)"\r
                VALUE "InternalName", "WinVBlock Virtual SCSI Driver"\r
                VALUE "LegalCopyright", "© 2008 V., © 2009-2010 Shao Miller, All rights reserved, Licensed under GPL."\r
                VALUE "OriginalFilename", "winvblock.sys"\r
                VALUE "ProductName", "WinVBlock Virtual SCSI Driver"\r
-               VALUE "ProductVersion", "0.0.1.7"\r
+               VALUE "ProductVersion", "0.0.1.8"\r
        }\r
 }\r
 \r