Revision History:
-----------------
1.1.0 - LDM related bugfix.
		NTFS related bugfix and code clean up.
		
1.1.1 - Minor enhancements.

1.1.2 - Better handling of a corrupted LDM database.

1.1.3 - Disabled file system caching for virtual disks.

1.1.4 - Fixed GPT partition size detection bug.
		Allow reading from disks that are opened for write access by other applications.

1.1.5 - Improved disk detection mechanism.
		Added limited VMDK support (monolithic flat).

1.1.6 - Use the SetFileValidData() Windows API call to extend virtual disks faster.

1.1.7 - Fixed VMDK related bug (flat files that have a space in their filename).
		Added support for reading a monolithic sparse VMDK.

1.1.8 - Fixed NTFS related issues.

1.1.9 - Disks are now orderered according to disk number.
		Code clean up.

1.2.0 - NTFS related bugfixes.
		Write operations on readonly disks are no longer silently ignored and now raising exceptions, added missing readonly check to VMDK files.

1.2.1 - Minor enhancements and fixes.

1.2.2 - Minor NTFS changes.

1.2.3 - Fixed: LDM extent record now properly support the 0x40 flag.
		Added helper methods for taking a disk online/offline.

1.2.4 - NTFS related fixes.

1.2.5 - Added support for reading dynamic VHDs.

1.2.6 - More meaningful exceptions types are now thrown on errors.
		Dynamic VHD related bugfix.

1.2.7 - Minor improvements.

1.2.8 - Bugfix: CRC32 was not updated when GPT partition was extended.
      - Bugfix: Invalid protective MBR partition was written during GPT disk initialization.
      - Bugfix: A few usable sectors may have been marked as unusable during GPT disk initialization.
      - Bugfix: VHD was not extended to the correct size.

1.2.9 - We now use the same caching policy for virtual disk read and write operations. (Workaround for hosts without KB981166).
	  - Bugfix: GPT header checksum verification failed if the size of the partition entries was not a multiple of sector size.

1.3.0 - Fixed a bug related to the RESUME boot sector.

1.3.1 - Adding a disk to RAID-5 volume is now faster thanks to multithreaded parity calculation (when applicable).

1.3.2 - Adding a disk to RAID-5 volume now use less read / write cache so it requires less RAM.

1.3.3 - Better handling of removable disks.

1.3.4 - Disk images can now be locked for exclusive access.

1.3.5 - We now use noncached I/O operations when working with virtual disks.

1.3.6 - Improved handling of disk read errors.
        API to retrieve disk description and serial number.

1.3.7 - Proper handling of disks with no serial number.

1.3.8 - Minor improvements.

1.3.9 - Minor improvements.

1.4.0 - API improvements.

1.4.1 - Improved volume locking mechanism.

1.4.2 - Support for disks with 4KB sectors.
        Minor improvements and bugfixes to DiskImage and inheriting classes.
        Bugfix: RawDiskImage.Extend had issue with closing the filestream.
        Bugfix: allocation within the private region of a dynamic disk did not function properly.
        API: Added RAM-Disk implementation.
        API: Added RawDiskImage.Create method.
        API: Added BasicDiskHelper.GetUnallocatedExtents method.

1.4.3 - Bugfix: MirroredVolume.BytesPerSector reported wrong number of bytes per sector when the first volume was not operational.
        Bugfix: DynamicDiskHelper.IsMoveLocationValid ignored allocated extents.
        API: Added DiskGroupGuid property to DynamicDisk.

1.4.4 - Bugfix: DynamicVolumeHelper looked for volume extents outside of the disk group.
        Bugfix: RetainHelper.IsVolumeRetained did not properly iterate components of mirrored volume.
        NTFS: Properly trim result array when caller tries to read more bytes than the record contains.
        NTFS: Return empty byte array when trying to read from offset larger than file length.
        LockHelper.LockAllVolumesOrNone will attempt to lock only mounted volumes.
        API improvements.

1.4.5 - IFileSystem: Added FileOptions parameter to OpenFile.
        DeviceInterfaceUtils: Added GetDeviceList method.
		Minor changes and improvements.