======================
 About Ext2Fsd
======================

Ext2Fsd project is an ext2/3/4 file system driver for Windows (2k/XP/7/8/10).

It's a free software. Everyone can distribute or modify it under GNU GPLv2.

======================
 Author & Homepage
======================

Matt Wu <mattwu@163.com>
http://www.ext2fsd.com


======================
 Credits 
======================

Thanks to Bo Branten<bosse@acc.umu.se> for his project romfs and his great
contribution of the free version ntifs.h.

Everyone can get to him at http://www.acc.umu.se/~bosse/.


======================
 Revision history
======================
53, V0.69    2017-11-01

Modifications from V0.68:

    1, FIXME: superblock corruption of EXT4 volumes with 64BIT mode enabled
    2, FIXME: possible corruption by race conditions in buffer-head reapering
    3, FIXME: possible deadlock issues (when flushing) caused by BCB locks
    4, FIXME: miscellaneous minor updates of Ext2Fsd code base

52, V0.68    2016-07-09

Modifications from V0.66:

    1, FIXME: System hang caused by a deadlock in cache manipulation
    2, Performance: Reaper mechanism improved (global locks removed)
    3, Feature: supporting multiple instances & users for Ext2Mgr

51, V0.66    2016-04-13

Modifications from V0.65:

    1, FIXME: BSOD when mounting as readonly
    2, FIXME: Ext2Srv service blocked by Antivirus

50, V0.65    2016-04-10

Modifications from V0.64:

Features:
    1, major performance improvements (small files meta-operatios)
    2, memory pressure handling for buffer-head structures reclaim
    3, back support for Windows 2000 (i386, 32bit)
    4, no bothering user with notification message for Ext2Mgr
    5, project improvement: Ext2Mgr to be built with WDK or VS2008

49, V0.64    2016-04-04

Modifications from V0.63:

Features:
    1, Drive letter assignment mechanism refined
    2, Mount as specified user (uid/gid) supported

Bugs fixed:
    1, Symlink creation breaks metedata statistics for inodes
    2, Unexpected drive letter removal for virtual devices
    3, Resource lock rules refined to consolidate consistency
    4, Kernel codes improved to make Ext3Fsd more secure

48, V0.63:   2016-03-12

Modifications from V0.62:

Features:
    1, Symlink (ReparsePoint) support implemented by ngkaho1234. See his
       repository for more details: http://github.com/ngkaho1234/Ext3Fsd.git
    2, Hard links support implemented
    3, Win10 TH2 drive letter assignment supported
    4, Case-insensitive-search supported (caused by dentry hash)
    5, Peformance improvements for metadata operations

Bugs fixed:
    1, BSOD when trying to format or dismount EXT4 volumes
    2, invalid extent content for newly created inodes
    3, Possible data corruption (zero data) under high pressure (WDK building)
    4, Splash screen of Ext2Mgr removed 

47, V0.62:   2015-06-09

Modifications from V0.61:

    1, FIXME: STEAM game cache (data) validation failures
              for direct-io mode, wrong reading length in bytes reported
    2, FIXME: WDK sources compiling random failures

46, V0.61:   2015-06-08

Modifications from V0.60:

    1, FIXME: Ext4 unwritten-extent supported to avoid possible data corruption
              MSB of ee_len field of unwritten extent is used as only a flag. It
              was mistakenly treated as extent length (block numbers) in V0.60
    2, FIXME: Manually clear file to zero for indirect-block file that is newly
              created but not yet written


45, V0.60:   2015-06-01

Modifications from V0.53:

    1, Ext4 extent writing support (developed by ngkaho1234 @ gmail.com)
       See his repository for more details:
       http://github.com/ngkaho1234/Ext3Fsd.git
    2, Size manipulation and i/o path revised for support of indirect and
       extent-based mappings
    3, 16T volume supported (tested and confirmed with 4T volume)
       Version 0.53 and previous versions only support up to 2T volume
       ticket: https://sourceforge.net/p/ext2fsd/bugs/134/
    4, Deletion acceleration: truncation optimized for indirect-based files
    5, Size-expanding disabled in IRP_MJ_CREATE for better performance.
       Windows sometimes would truncate file size back to 0
    6, Support Volume exclusive-open for e2fsprogs utils. Any attempts
       will be denied while EXT4 volume is being checked (e2fsck).
    7, FIXME:  Possible zero-content returned (requesting data from file tail)
    8, FIXME:  File ByteOffset updated for FO_SYNCHRONOUS_IO open (async i/o)
       ticket: https://sourceforge.net/p/ext2fsd/bugs/133/
    9, FIXME:  don't do byte or range round up for paging i/o requests
       ticket: https://sourceforge.net/p/ext2fsd/bugs/129/
   10, FIXME:  occasional block bitmap difference issue, cased by checksum
               caculation in uninit_bg group initializing

44, V0.53:   2014-08-25

Modifications from V0.52:

    1, FIXME: BSOD with VHD/VHDX mounting on Win8
    2, FIXME: Mke2fs failed to format mounted EXT2 volumes
    3, Enable writing with global or volume ext3-force-writi
    4, Support ext4 dir hash (UNSIGNED cases for legacy/half
    5, Fixed several warnings reported by scan.coverity.com


43, V0.52:   2014-05-10

Modifications from V0.51:

    1, Feature: Windows 8 supported
    2, Feature: Force-writing supported
    3, FIXME: data loss with TeraCopy when moving directories
    4, FIXME: ATTO Disk Benchnmark fails with direct i/o tests
    5, FIXME: files become invisible with empty hidden pattens
    6, FIXME: possible hang with concurrent access attempts
              upon the same file
    7, FIXME: BSOD due to pagable code sections

42, V0.51:   2011-07-10

Modifications from V0.50:

    1, FIXME: Data corruption issue, especially for multiple-thread
       writing on XP system
    2, FIXME: Set ValidDataLength only for FileEndOfFileInformation
       w/ AdvanceOnly    
    3, Support writing to ext4 volumes w/ flex_bg
    4, Code cleanup and enhancement for global/volume property settings

41, V0.50:   2011-02-01

Modifications from V0.48:

    1, Ext4 extent readonly support by Bo Branten. Writing is
       possible but with no size-extending
    2, Ext3 directory index (hash-tree) support
    3, Fast fsck (uninit_bg) and group block checksum support
    4, Ext4 64k block size support
    5, Symlink/special inodes open/read/deletion support
    6, Buffer head implemented over cache pages
    7, Memory allocation optimization for flexible-size inodes
    8, Improve file deletion: don't grab global lock when deleting
    9, FIXME: return zero-content for sparse file gaps
   10, FIXME: check available spaces before blocks allocation
   11, FIXME: refresh stale root dir content after journal replay
   12, FIXME: incompatible dentry management for 64k block size
   13, FIXME: don't do journal replay for devices set as readonly
   14, FIXME: Win7 cmd.exe always reports file sizes as zero
   15, FIXME: Win7 memory throttling issue calling CcPinRead
   16, FIXME: Ext3Fsd Build issues (SLIST/div64 for Win2k, browser files)
   17, FIXME: Compiling test failure (fastio doesn't update i_size)
   18, FIXME: Possible Mcb memory leak for symbolic links

40, V0.48:   2009-07-26

Modifications from V0.47:

    1, Acronis TrueImage compatible issue solved:
       Verified with Acronis True Image Home 2009. Also verified with
       FreeOFTE 3.0, TrueCrypt 6.2a.
    2, Driver code-signed for Vista and Server 2008
    3, Code improvements for FastIo routines and drive letter & mount
       points management

39, V0.47:   2009-06-01

Modifications from V0.46:

    1, Bo Branten's 5+ patches merged, lots ifstest failures resolved
    2, Mount point automatic assignment for USB key and other removable
       disks or removable media devices

38, V0.46:   2008-05-24

Modifications from V0.46:

    1, ext3 journal check and replay implemented. If the journal is
       not empty ext2fsd will replay the journal and make the file
       system consistent as an ext2 file system.
    2, flexible-inode-size supported. recent Linux are using 256-byte
       inode that fails 0.45 and before to show all the files.
    3, FIXME: 2 minor issues that mislead EditPlus. EditPlus is always
       trying to open any file with directory_only flag set to judge
       whether the target is a directory or file, when the file isn't
       a directory, the open request should be denied. But Ext2Fsd 0.45
       and before doesn't. Another issue is that ext2 file time on disk
       has different precision against windows (1 second vs 100 nano
       second), which causes EditPlus thinks the file is being changed.
    4, FIXME: a severe bug (likely happen on win2k system) which cause
       dirty caches missed and slow down the whole system. 
    5, many other minor changes: bulk block allocation/release, possible
       inode allocation dead-loop when all inodes are used out, Ext2Mgr
       win2k support, other performance improvements.

37, V0.45:   2008-02-19

Modifications from V0.44:

    1, set hidden attribute for all files starting with "."
    2, update cache window size when writing to file end
    3, reaper resources allocated during file creation

36, V0.44:   2008-02-09

Modifications from V0.43:

    1, Ext2Fsd: LastWriteTime/LastAccessTime update
    2, Ext2Mgr: Show driver/app versions in About dialog

35, V0.43:   2008-02-01

Modifications from V0.42:

    1, Ext2Fsd: hidden/system attribute handling
    2, Ext2Mgr: Added manifest to cope with UAC

34, V0.42:   2008-01-26

Features implemented:
    1, Mountpoint auto mount/removal supported for removable disks

33, V0.41:   2008-01-25

Modifications from V0.40:

Bugs/Problems Fixed:

    1,  Some files couldn't be shown in explorer with utf8 codepage
    2,  System always pops "device is busy" when removing USB disks

Features implemented:

    1, Ext2Fsd: Updated codepage encodings to latest Linux kernel
    2, Ext2Mgr: Added Chinese translation which is in high demand
                Enhanced mountpoints management for removable devices

32, V0.40:   2008-01-13

Modifications from V0.39

Bugs/Problems Fixed:

    1,  Directory inode isn't freed after directory deletion
    2,  Retrieval pointers implemented for extents mapping
    3,  Correct the handling of STATUS_CANT_WAIT. Vista's Cache
        Manager often fails us on PingRead when copying bunch of
        files/directories from ext2 volumes, and thus it results
        in zero-data-content in copied files
    4,  Optimize space allocation to minimize fragments

31, V0.39:   2008-01-09

Modifications from V0.38

  Bugs Fixed:

    1, Disk space isn't released after deleting big files larger than
       (BLOCK_SIZE * (12 + BLOCK_SIZE/4 + BLOCK_SIZE * BLOCK_SIZE / 16))
       That's 4,299,210,752 in case BLOCK_SIZE is 4096.

30, V0.38:   2008-01-04

Modifications from V0.37

  Bugs Fixed:

     1, File block extents management improved to decrease CPU usage
     2, Re-queue request when cache manager can't prepare pages in time
     3, Possible deletion of it's hardlink entry when removing a file
     4, Prohibit to create file with same names to dead symlinks
     5, Wrong inode type in directory entry for symbol links
     6, Possible memory leak when failed to overwrite file
     7, Memory leak in Ext2FreeMcb, it's counted but not freed.
     8, Possible loss of inode/dentry update: Ext2WriteVolume might
        miss the dirty windows with SECTOR_SIZE aligned borders
     9, SpinLock related routines shouldn't be resident in paged zone
    10, Possible lost of files in directory listing

29, V0.37:   2007-12-25

  Bugs Fixed:

      1, files >=4G couldn't be copy&paste to ext2 volume, caused by a hardcode
         limit in Ext2CreateFile
      2, failure of "No enough memory" when renaming files under directories
         it likely happens when renaming files under subdirectory with Samba
         or Linux kernel CIFS.
      3, possible deadlock in renaming with simultaneous access on the same file
      4, possible wrong entry (hardlinks) deletion instead of itself: it's
         rare to happen but possible when renaming, moving or deleting files. 
      5, entry management routines enhancement 
      6, 64k-block support

28, V0.36:   2007-12-22

  Bugs Fixed:

      1, BSOD caused by symlink pointing to itself or others
      2, bug in new inode allocation algorithm 
      3, "." and ".." are treated as separate inodes
      4, remove unnecessary local variables to reduce stack
         overflow chances especially for nested symlinks
      5, overall optimizations on block allocation/release/mapping 
      6, non-consistent Mcb reference issue (broken by symlinks)
      7, memory leaks of BLOCK_DATA when expanding file
      8, buffer overflow in Ext2Printf only for checked build
      9, bug in handling exception of working cdroms ejection

  Features Newly Implemented:

      1, remove the execute bit ('x') for all newly created files 
      2, enhance memory reaper mechanism of all Xcbs (Fcb/Mcb)
      3, big block support (up to 32k) 
      4, statistics of memory allocation / irp handling

  Ext2 Volume Manager:

      1, crash with RAW disk (non-partitioned)
      2, wrong message box poped when setting service property
      3, more partition types recognized
      4, support memory/irp statistics
      5, keyboard handling, as convenient as using mouse

27, V0.35:   2007-12-02

   Bugs Fixed:

      1, Corrected change notification message for renaming
      2, e2fsck i_size issue: Ext2SetInformation doesn't free
         extra blocks when shrinking FileEndOfFileInformation
      3, BSOD with symlink since it's treated as a file

   Features Newly Implemented:

      1, Symbolic link support on most operations but creating 
      2, Property settings per volume, more flexible
      3, Hiding files with specified prefix and suffix
      4, Different implements on driver letter assignment
      5, CDROM support to mount CD/DVD burned in EXT2 format
      6, "Move and Replace (overwrite)" support
      7, Install Ext2Mgr as a service

26, V0.31A:  2007-01-06

    Bugs/Problems Fixed:

      1, Disable the partition type changing, which causes linux could not boot
      2, Added the test-signature to AMD64 drivers for vista system

25, V0.31:   2006-11-06

   Bugs Fixed:

      1, Wrong ERESOURCE referenced in Ext2DeleteFile
      2, Stale path name referenced for directory notification
      3, Codepage names inconsistent between Ext2Fsd and Ext2Mgr

   Features Newly Implemented:

      1, Vista supported 

24, V0.30:   2006-10-21

   Main Bugs Fixed:

      1, Incorrect removable media support
      2, Wrong file size, timestamps reporting
      3, Some minor memory leaks 
      4, Improper usage of ERESOURCE locking
      5, Wrong handling of some special I/O
      6, Incorrect codepage loading sequence
      7, Mke2fs is much improved

   Main Features Newly Supported:

      1, Network sharing, Oplocks handling
      2, Ext2 Volume Manager (codepage, attributes)

23, V0.25:   2005-07-27

    Bug Fixed:

      1, File allocation blocks are not freed when being deleted
      2, Other minor modifications on the program logics ...

    Features Newly Supported:

      1, Floppy support implemented. 
      2, Win64 (X86 64) support.


22, V0.24:   2005-03-28

    Bug Fixed:

      1, Codepage support errors fixed.
      2, Ext2LookupFileName: should fail when it's not a real path.
      3, Ext2FastIoQueryNetworkOpenInfo: Fcb not initialized.

    Features Newly Supported:

      1, Sparse file support. 
      2, Setup and config tools by Jared Breland.


21, V0.23:   2005-01-09

    Bug Fixed:

      1, Ext2ReadSync: Thread stack is paged out, which causes "Event" is invalid.
      2, Ext2InitializeVcb: Ext2Global->McbList is referred before initializing.

    Features Newly Supported:

      1, Multi codepages supported
        In registry, there's a new item named "CodePage", just change it to the
        codepage name you want to use. The codepage name is the same to linux
        system.

        Here's the codepages list: 

        big5    cp1251  cp1255  cp437   cp737   cp775   cp850   cp852   cp855
        cp857   cp860   cp861   cp862   cp863   cp864   cp865   cp866   cp869
        cp874   cp949   cp950   euc_jp  euc_kr  iso8859_1       iso8859_13 
        iso8859_14  iso8859_15  iso8859_2   iso8859_3   iso8859_4   iso8859_5
        iso8859_6   iso8859_7   iso8859_8   iso8859_9   koi8_r  koi8_ru koi8_u
        sjis    tis_620 cp936   gb2312  utf8

        If you don't specify it or make a wrong page type, system default OEM
        codepage will be used.


20, V0.22b:  2004-11-05

    Bugs Fixed:
      1, Deleting and copying files from/to a directory frequently corrupts
         the directory. E2fsck will report "directory corrupted". This bug
         is cuased by Ext2AddEntry.

19, V0.22a:  2004-10-28

    Bugs Fixed:
      1, Fsck error reports: "inode is in use, but has dtime set." for
         deleted directories. This bug caused by non-zero i_links_count
         of deleted directory inode.
      2, When many files (Normally > 255 files, reported by Zhoujingg)
         are deleted, the dir entry may cross blocks, which will cause
         ext2/ext3 driver could not correctly read the directory entries.

18, V0.22:  2004-10-04

    Bugs Fixed:
      1, Mcb part overflows the stack
      2, Delay-writing errors: cache lost
      3, Bad file type for newly created files

    Features Newly Supported:
      1, Optimize the Mcb management part and the function of Ext2SaveGroup
      2, Big files (> 4G) accessing

17, V0.21:  2004-06-09

    Bugs Fixed:
      1, Ext2Flush does not complete the IRP for READ_ONLY mode.
      2, Delayed close tries to refer completed Irps.
      3, Directory content does NOT ends with zero-inode entry. Ext2ScanDir
         and Ext2QueryDirectory do a wrong way to enum entries. Thanks to 
         "Bomb" <bomb_hero@163.com>
      4, Ext2MountVolume still returns STATUS_SUCCESS for non-ext2 volumes.
      5, Ext2SetRenameInfo always treats "Rename" as "Move"

    Features Newly Supported:
      1, Various sector sizes support from 512 to 4096.
      2, Compatible for windows nt 4.0.
      3, Removable disk supported (CDROM is to be supported in next version.)
      4, Volumes umounting works (Force dismount supported)...
      5, Floppy partially support (NOT complete yet) ...
      6, Add CheckingBitmap / Ext3ForceWriting parameter key in the registry
      7, Quick format supported (directly access on mounted ext2 volumes.)

16, V0.20:  2003-12-26
      1, Merge Petr Borsodi's  patches for several problems.
      2, Unicode/OEM characters support.?
      3, Change notifications is supported.
      4, Totally Optimize and upgrade.
      5, ......

15, V0.10A: 2003-01-14
      1, FIXME: Deadlock caused by CcPurgeCacheSection for readonly volumes

14, V0.10:  2003-01-03
      1, Merge xjaguar's patch: Ext2NewInode and Ext2NewBlock fail on one
         group ext2 system.
      2, Merge Bo Branten's patch: Sync modifications of Romfs.
      3, FIXME: Ext2Flush causes crash when shutting down. Thanks Petr Borsodi
         for his clues.
      4, FIXME: Crash when playing media files (mpg, wav ...)
      5, ......

13, V0.09A: 2002-08-03
      1, Add mcb feature to keep cache coherence between volume and file
         streams 
      2, Skip "AdvacneOnly" when setting FileEndOfFileInformation.
      3, Add file stream dirty flag in order to flush it when cleanup.
      4, Some corrections of lock operations
      5, Fix volume size reporting in Ext2QueryVolumeInformation

12, V0.09: 2002-07-25
      1, Fix some minor bugs
      2, Redesign some internal architectures
      3, Add writing support (Ext3 is not supported yet.)
           1) File write.c: writing functions 
           2) File flush.c: do flushing
           3) File shutdown.c: prepare for system shutdown 
           4) Many modifications in create.c/fileinfo.c/volinfo.c ...

11, V0.08: 2002-05-28
      1, Fix page-fault bsod when reading bad-size inodes
      2, Fix a minor bug in Ext2GetBlock
      3, Add binary-tree-mechanism to store the info of opened files

10, V0.07A: 2002-05-17
      1, Merge Boose's patch: make ext2fsd cooperating with his ntifs.h
         (verion r36) and winxp ddk.
      2, Fix wild-cases matching in Ext2QueryDirectory

 9, V0.07: 2002-05-14
      1, FIXME: only some minor bugs
      2, Add access protection of some sharable members
      3, Add booting start support
      4, Change the driver's name to ext2fsd.sys

 8, V0.06: 2002-03-12
      1, FIXME: BSOD when playing wav/mpeg/avi with IE embedded media player.
      2, Some optimizations in Ext2QueryDirectionary and Ext2ScanDir.

 7, V0.05: 2002-03-01
      1, FIXME: Ext2Create: Ext2ScanDir returns wrong fcb.
      2, Support file executing now.

 6, V0.04: 2002-02-20
      1, Add caching support. 

 5, V0.03: 2002-02
      (It's an internal version, not released.)
      1, Keep up with romfs: add byte-range lock and directory change
         notification.

 4, V0.02: 2002-02-07
      1, Add large ext2 partition support. 

 3, V0.01: 2002-01-26
      1, Make it public at http://www.ext2fsd.com.

 2, 2001-10
      1, Non-public pre-release of ext2fsd was born.

 1, 2001-08
      1, I began the journey of file system driver developing with romfs


======================
 Bugs
======================

(Nobody can expect that ext2fsd is bug-free.)
Any bugs, please mail to me.


======================
 How to install
======================

1, Build this project, and ext2fsd.sys will be created.
2, Copy ext2fsd.sys to %system32%\drivers.
3, Import the ext2fsd.reg into your system registry.
4, After rebooting your machine, run "net start ext2fsd" at a dos shell.
5, Use mount/unmount tools to mount or unmount a disk partition.
6, You can unload ext2fsd from system with unload tool.

After version 0.10, these is an easy way:

1, Just run "Setup.bat" in "Setup" subdir for the first time. Then just
   run "net start ext2fsd" in a dos shell to start the driver.

      After v0.23, you need specify your system version:

        setup 2k: to install ext2fsd for windows 200
        setup xp: to install ext2fsd for windows xp


2, Then you can mount the ext2 partitions without rebooting.


======================
 How to uninstall
======================

1, Just run uninstall.bat in the Ext2Fsd.zip package.
   .OR.
2, Use the "Add/Remove Programs" in "Control Panel", click the item of
   "linux ext2 file system driver" to remove the program.
   .OR.
3, Manually remove the ext2fsd projects files. 
   a) Remove the registry: HKLM\...\Ext2Fsd & Uninstall ...
   b) Remove Mount.exe/Mke2fs.exe from $(SystemRoot)\system32
   c) Remove Ext2Fsd.sys from $(SystemRoot)\system32\drivers
   d) Remove ext2fsd.inf from $(SystemRoot)\inf


======================
 Writing support
======================

Two ways are optional to enable writing support.

1, Change the value of "Parameters\WritingSupport" in ext2fsd.reg to 1, then
   import the reg file into system registry.
   Or modify the registry directly. Like this:

   -------------------------------------------------------------------------
   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ext2Fsd\Parameters]
   "WritingSupport"=dword:00000001
   -------------------------------------------------------------------------

   Notes: Reboot is need.

   Or

2, Change the definition of EXT2_READ_ONLY to 0, and recompile ext2fsd, then
   overwrite the original one. (See line 27 in ext2fs.h)


Please refer FAQ.txt for more information.
