마루 0 269 05.09 23:49

                         === DISCLAIMER ===

I allow you to use all software in this package freely under the condition

that I am in no way responsible for any damage or loss you may suffer.

        >> You should be aware of the fact that FAT32.IFS might <<

        >> damage the data stored on your hard disks.           <<

NEW: FAT32 support now can be made possible by using a filter device instead

     of a modified OS2DASD.DMD. By installing this filter in a READONLY mode, 

     your harddisk can be protected against corruption.        

If you cannot agree to these conditions, you should NOT use FAT32.IFS !

I CANNOT guarantee that FAT32.IFS will work for you. However I've done

my best to test the program and I can only say that It works for me.

Henk Kelder



Certified daddy (by my kids)



FAT32.TXT               This file.

FAT32.IFS               The actual IFS.

CACHEF32.EXE            The cache helper program.

UFAT32.DLL              The module needed to run CHKDSK on FAT32 partition.

F32STAT.EXE             A program to change the DIRTY flag of FAT32 partitions.

MONITOR.EXE             A program to monitor what FAT32.IFS is doing.

PARTFILT.FLT            A general partition filter device that allows FAT32

                        partitions to be recoqnized by OS/2. 

OS2DASD.DMD             A modified version of OS2DASD.DMD that is an

                        alternative for using PARTFILT.FLT. This modified

                        driver also allows FAT32 partitions to be recoqnized 

                        by OS/2.

                        PLEASE NOTE: that this driver is NOT at the latest 

                        level and will probably NOT support the latest 

                        features like removable disks etc.

DISKINFO.EXE            A diagnose program that will scan for and show

                        all partitions. 



This version of FAT32.IFS has the following limitations:

- It only supports non-removable harddisks.

- It only supports disks with a sector size of 512 bytes. (Are there others?)

- There is NO support for Extended attributes.

- You cannot BOOT from a FAT32 partition.

- You cannot place the SWAPPER.DAT on a FAT32 partition.

- CHKDSK can diagnose a disk, but will only FIX lost clusters and an 

  incorrect free space count. For all other errors, you'll need to run 

  Windows95 and start scandisk to fix the problem.

  Note: CHKDSK will always convert lost clusters to files and NEVER to

  directories. if you want that, use SCANDISK.

- The FORMAT, RECOVER and SYS commands are not supported.

- Only last access date (and not last access time) is maintained by 

  FAT32.IFS. This is similiar to Win95 (OSR2).

- Long filenames are not supported in DOS and Win-OS/2 sessions, 

  they use only the shortnames. 

  There are more restrictions. 

  Please see 'LONG FILENAMES IN OS/2 AND DOS SESSIONS' later is this file.

- A maximum of 235 different files can be open at the simultaniously. 

  The number of times a single file is opened does not matter. So if a 

  specific file is opened more than once, it only counts as one file.



Copy the following files to your \OS2 directory:





Copy the following file to your \OS2\DLL directory:


Copy the following file to your \OS2\BOOT directory:


Do NOT REPLACE your currentT OS2DASD.DMD with the version in the archive. 

See the remark below about OS/2 and FAT32.

Make the following changes to the CONFIG.SYS:

IFS=x:\OS2\FAT32.IFS [options, see below]  

(Install this one AFTER IFS=HPFS.IFS)

CALL=x:\OS2\CACHEF32.EXE [options, see below]

^^^^-> Make shure this is a CALL and NOT a RUN.


(The /W should not be specified if you do not want write access)

(Install this one as FIRST BASEDEV !)

(x should be replaced by your boot drive.)



FAT32.IFS is the actual Installable File Systems driver.

The following options are supported:

/Q           Quit, not messages.

/CACHE:nnnn  specifies the cache size in kilobytes. If omitted the default

             cache size is 1024KB. Maximum cache size is 2048KB.


             Cache memory is allocated as FIXED memory, so if you have less

             than 16MB I suggest you set this option to 512KB or less.

/MONITOR     Set monitor ON by default. If omitted monitor is OFF. See 

             MONITOR.EXE for more information.

/RASECTORS:n Read Ahead Sectors.

             Specifies the minimum number of sectors to be read per read

             action and placed in the cache.

             If omitted the default differs per volume and equals the 

             number of sectors per cluster times 2. 

             The maximum treshold value used is the number of sectors per 

             cluster times 4.

             You should note that the actual sector IO per read action is

             NOT determined by an application, but by the IFS. For FAT access

             single sector reads are done. For Directory and Files IO reads

             are done on a cluster base. By setting the RASECTORS you can 

             define the minimum number of sectors the IFS will read from disk

             and place in the cache.



CACHEF32.EXE is a helper program with the following functions:

- Check DISK state on boot, run CHKDSK if needed.

- Start the LAZY WRITE daemon.

- Set CACHE and READ-AHEAD parameters.

- Set Longname behaviour.

When run in the foreground and CACHF32 is already running, it displays

the CACHE parameters and allows you to modify the values. If no other

copy of CACHEF32 is running, it detaches a background copy.

When run in the background (detached), CACHEF32 will act as lazywrite daemon.

CACHEF32.EXE supports the following options:

/?    Shows help.

/Q    Terminates CACHEF32. CacheF32 will be unloaded from memory, lazy

      writing will stop. (Performance will degrade).

/D:nn Sets the DISKIDLE value. See OS/2 online help on CACHE.

/B:nn Sets the BUFFERIDLE value. See OS/2 online help on CACHE.

/M:nn Sets the MAXAGE value. See OS/2 online help on CACHE.

/R:d:,n Set RASECTORS for drive d: to n.

/FS   Use short names internally.

/FL   Use long names internally (default).




Before anything else: PARTFILT is based on the excelent work of

Deon van der Westhuysen. I only made minor modification to it. The source

code is available under GPL conditions. Please send me a mail if you want 

the sources. My current homepage lacks space to store the sources.

PARTFILT.FLT is a BASEDEV FILTER device that as able to presents (fakes) 

partition types that are normally unsupported by OS/2 in such a way to OS/2 

that IFS's can be loaded on these partitions. Such virtualized partition 

will always be mounted after the non-virualized partitions.

Currently (as far as I know) the filter can be used for two IFS's: 

This one, FAT32.IFS and the Linux IFS.

Beside that, PARTFILT.FLT can be used for other purposes such as making

not-visible partitions visible or using multiple primary partitions.

PARTFILT.FLT supports the following options:

/Q      Load quietly

/W      Enables Writing to the faked partitions. Without this option

        the faked partitions are read-only.

/A      This option does two things: 

             - Disables OS/2 to access all partitions, but:

             - Virtualizes (or fakes) all known partitions. 

               Known partitions are the normal FAT partitions, 

               IFS (=mainly HPFS) partitions and the partitions specified

               with the /P option. 

               All primary partitions of known types are also virtualized, 

               and will be accessable from OS/2.

        This option must be used in conjunction with the /M option.

        WARNING: Incorrect usage of this option could make your system


/M <mountlist>

        This option specifies which of the with /A vitualized partitions

        should be made available for OS/2 and in what order they should

        be mounted. (The 1st partition loaded get the C: drive, the 2nd the

        D: drive, and so on).

        You should make sure that you OS/2 partition gets the same drive

        letter as normal or your system will not boot properly.

        Also, without the /W options, OS/2 will not work since it cannot

        write to its bootdisk.

        The mountlist should contain partition sequence numbers seperated

        by comma's. Partition sequence numbers are shown by DISKINFO.EXE.

        See diskinfo.exe for more information.

/P <partition types to fake>

        This is option is used to tell PARTFILT which partition type are to

        be faked. You should NOT use partition types already supported by 

        OS/2 since this would result in a single partition being mounted

        two times. The list should consist of partition type numbers (in 

        hexadecimal), separated by comma's. 

The partition type number are as follows:


     01   FAT12       (supported by OS/2)               

     02   XENIX_1                

     03   XENIX_2                

     04   FAT16       (supported by OS/2)             

     05   EXTENDED               

     06   HUGE        (supported by OS/2)             

     07   IFS         (supported by OS/2)             

     0A   BOOTMANAGER           

     0B   FAT32                  

     0C   FAT32_XINT13           

     0E   XINT13                 

     0F   XINT13_EXTENDED        

     41   PREP                   

     63   UNIX                   

     83   LINUX

     10   Hidden partition (bits OR'd with partition type)

To make PARTFILT.FLT fake a FAT32 partition the /P option should be /P 0B.

To make PARTFILT.FLT fake a LINUX partition the /P option should be /P 83.

To fake both specify /P 0B,83.



The UFAT32.DLL is called by CHKDSK whenever the CHKDSK command is issued

for a FAT32 drive. UFAT32.DLL currently only supports CHKDSK.

For CHKDSK the following options are implemented:

/F   Fixes problems (Currently UFAT32.DLL only fixes lost clusters,

     and an incorrect free space count.)

/C   Causes lost clusters to be automatically converted to files if the

     drive was in an inconsistent state at boot (No questions asked).

/V   Causes CHKDSK to show details on all files checked.

The CHKDSK process does the following checks:

- Compares all copies of the FATs;

- Checks for each file the file allocation;

- Checks per file or directory the VFAT long filename;

- Checks for, and if /F is specified, repairs lost clusters.

- Checks for, and if /F is specified, repairs cross-linked files.

- Checks free space, and if /F is specified, corrects an incorrect setting.



F32STAT can be used to query the clean shutdown state of a FAT32 drive. 

It also allows you to alter the clean shutdown state. You could use this

feature if FAT32.IFS blocks access to the disk because it is dirty on boot,

and CHKDSK could not solve the problem.

The syntax is:

   F32STAT drive: [options]

The following options exist:

/CLEAN  - Inform FAT32.IFS that the disk was clean on boot and may be used. 

          The disk itself will be marked as clean on a succesfull shutdown. 

          (The internal dirty flag FAT32.IFS uses will be cleared.)

/FCLEAN - Inform FAT32.IFS that the disk was clean on boot and may be used.

          The disk itself will also be marked as clean at that moment. 

          (The internal dirty flag FAT32.IFS uses will be cleared, but the

          marking on disk will also be set ok.)


/DIRTY  - Inform FAT32.IFS to set its internal dirty flag, and mark the drive

          dirty on disk. On shutdown the drive will be left dirty, so when

          booting Windows 95 (OSR2) SCANDISK will be fired.



Monitor will show (most) FAT32 actions on screen. This program is intended

for troubleshooting. Using MONITOR will degrade performance since FAT32 must

send monitoring information to an internal buffer. This internal buffer is 

only 4096 bytes large, so if monitoring is on, but MONITOR does not run,

logging information is lost.

If the /MONITOR command is not specified in the config.sys after the IFS=

statement monitoring is OFF by default, but starting MONITOR once will 

activate monitoring.

Only one option is available:

MONITOR off  - This will tell the IFS that no monitoring information has to

               be stored (This will improve performance).



When run with no options, diskinfo will scan and show all partitions.

The following options are available:

/V - Verbose mode. Show more info, specifically on FAT32 partition.

/B - Show the boot sector of FAT32 partition. Only if /V is only specified.

/P - Allows you to specify a list of partition types that should also get

     a partition sequence number. See PARTFILT for more information.

An example of output from DISKINFO (without parameters):


There are 2 disks

=== Scanning physical disk 1.===

0:P__ 06 HUGE           Start:H:     1 C:   0 S:   1 End:H:   127 C: 258 S:  63

-:PA_ 0A BOOTMANAGER    Start:H:     0 C: 523 S:   1 End:H:   127 C: 523 S:  63

1:LB_ 06 HUGE           Start:H:     1 C: 259 S:   1 End:H:   127 C: 387 S:  63

2:LB_ 07 IFS            Start:H:     1 C: 388 S:   1 End:H:   127 C: 522 S:  63

=== Scanning physical disk 2.===

3:P_H 11 FAT12          Start:H:     1 C:   0 S:   1 End:H:   127 C:   0 S:  63

-:L__ 0B FAT32          Start:H:     1 C:   1 S:   1 End:H:   127 C: 524 S:  63


(Seq#:Primary/Logical, Active/Bootable, Hidden?, Partition type (hex & desc))

The partition sequence number can be used to determine how the /M parameter

for PARTFILT.FLT should be specified. When using DISKINFO for this purpose it

is best NOT to have PARTFILT installed since the faked partitions will also 

be shown by DISKINFO. 

When PARTFILT is not installed, and OS/2 is booted, a C:, D: and E: drive

will be available for partitions sequence numbers 0, 1 and 2.

Please note that the partition with seq# 3 is a hidden partition and OS/2 will

by default not assign any drive letter to it.

The use PARTFILT with the /A and /M options the options should be:

                BASEDEV=PARTFILT.FLT /W /A /M 0,1,2

To get the same result as without the filter. While:

                BASEDEV=PARTFILT.FLT /W /A /M 1,0,2

will swap the C: and D: drive letters.

Should I have started DISKINFO with the /P 0B parameter, the FAT32 partition

would have got sequence number 4 assigned.





OS/2 by itself does not recoqnize FAT32 partitions. This means that 

installing the IFS is useless if we can't make OS/2 recoqnize them.

Currently there are two ways to achieve that.

- Use PARTFILT.FLT to fake FAT32 partition; (this is advised)

- Use the modified version of OS2DASD.DMD.



The version of OS2DASD.DMD supplied in this package is a modified version

of this driver and is NOT at the latest level. This means that it

is possible that some of the latest features in the IBM supplied driver may

not be supported. Also, when installing new fixpacks, you should make sure

that this version of OS2DASD.DMD is not replaced.

Also, when using this driver, FAT32 partitions COULD end up having a drive

letter assign before the OS/2 partition, shifting the assigned drive letters

for all next partitions up and thus making OS/2 unbootable.

This version of OS2DASD.DMD has extra support for partition type 11 (hex B).

Partition type 12 (hex C), FAT32 through INT13 is NOT supported by this 


IBM Is working on a version of OS2DASD.DMD that should recoqnize 

FAT32 partitions.

Generally, it is not advised to use this version of OS2DASD.DMD, but to 




In the initial release long file names where only shown in OS/2 sessions, but

in DOS sessions, the short filename equivalent was shown.

This could however lead to big problems. An example:

In in an OS/2 session directory \DevStudio was current, from a DOS session

the directory \DEVSTU~1 could be removed since OS/2 didn't know that 

DevStudio and DEVSTU~1 were infact the same directories.


The same problem could occur when opening files in both OS/2 and DOS. 

No proper multiuser handle would take place since OS/2 doesn't know that

files with different names are the same.

To solve this problem I've done the following:

Via a setting FAT32.IFS can be told to:

- Translate all long filenames internally to their short equivalences OR

- Use the long names internally, but hide all files or dirs with long names

  from DOS sessions.

This setting can be changed (on the fly) with CACHEF32.EXE.

When using short names internally the following drawbacks occur:

- Current directory is shown as a short name (command line only)

- When deleting (long) files from the command line, the WPS doesn't 

  pickup the deletions.

When using long names internally the following drawbacks occur:

- Files and directories with long names are not visible in DOS sessions.

  This is however the same as with HPFS.



If Windows 95 (OSR2) shuts down properly, the clean shutdown status of the

disk is physically written on the disk. On next boot this state is checked,

and if the disk is not shutdown properly, SCANDISK is run.

FAT32.IFS also supports this feature. When CACHEF32 is called from the 

config.sys, it checks, via a call to the IFS the state of each FAT32 drive.

For each drive that is not shutdown properly, CHKDSK is fired. If no errors 

are found, or if only lost clusters where found and repaired, the drive is 

marked ok. 

If CHKDSK cannot solve the problem, the drive state is left dirty, and


Shutting down the disk, leaves the disk marked as not properly shutdown.

You should boot Windows 95 and run SCANDISK on the drive to fix the 

remaining problems.

F32STAT however, allows you for set the drive status, bypassing the normal

handling of FAT32.IFS. See the description of F32STAT for more information.



On most FAT32 drives the amount of free space is stored. FAT32.IFS will only

redetermine the amount of free space if:

- The disk was marked dirty on boot;

- The free space is set to -1 on the disk;

- The free space is not available on the disk.

FAT32.IFS will internally keep track of the free space and update it on disk 

on shutdown.



Cache performance is improved compared to version 0.10.

All of the code is in plain 16 bits C (All of OS/2's IFS's are 16 bits!). 

No assembly language code is used.

The MONITOR function takes a lot of time. Be sure to switch if off if you don't 

need it.

You should probably experiment with the CACHEF32 options to get the best 

performance for your situation. 



As far as I can tell, FAT32.IFS is fully compatible with the FAT32 support

in Windows 95. VFAT longnames can be used and on my PC, Windows95 doesn't

compain (anymore!) about long filenames I have created with FAT32.IFS.

The numeric tailed short names also seem to work ok. (The numeric tail option

cannot be switch off!)

File names are, as in Windows95 case preserving (in OS/2 sessions).

Creating a name in lower case will result in the file having a VFAT longname,

even if the name conforms to 8.3. The case will be preserved.

Last access dates are maintained by FAT32.IFS. 

(but not the last access time since Win95 doesn't support it)

You can see these when using the detailed view of the drive object.



As stated, this version of FAT32 does NOT support extended attributes. This

means for one thing that REXX cmd files will have be to 'translated' on every

run since normally the 'tokenized' version of the cmd file is stored in EA's.

I haven't decided on HOW to implement EA's. The trick IBM used for FAT12 and

FAT16 partitions cannot be implemented on FAT32 because Microsoft has started

using the free space in each directory entry, so the two bytes IBM used for

storing a files EA location are no longer available.



IOCTL calls (category 8) are now passed through to OS2DASD. All calls

supported by OS2DASD.DMD are now also supported by the IFS.



Should FAT32.IFS fail to work, please check the following:

- Is a new drive letter assigned ? (If not OS2DASD.DMD failed)

  If not, tell me.

- If you are not shure, try the /MONITOR parameter after FAT32.IFS,

  and after reboot look with monitor for FS_MOUNT calls. Send me 

  the results.

- If a new drive letter is assigned, but FAT32.IFS fails,

  please run DISKINFO and send me the output.




FS_ATTACH               : No

FS_CANCELLOCKREQUEST    : No, function is implemented in the KERNEL

FS_CHDIR                : Yes

FS_CHGFILEPTR           : Yes

FS_CLOSE                : Yes

FS_COMMIT               : Yes

FS_COPY                 : No, function is simulated by command shell

FS_DELETE               : Yes

FS_DOPAGEIO             : No

FS_EXIT                 : Yes


FS_FILEINFO             : Yes

FS_FILEIO               : No

FS_FILELOCKS            : No, function is implemented in the KERNEL

FS_FINDCLOSE            : Yes

FS_FINDFIRST            : Yes


FS_FINDNEXT             : Yes



FS_FINDNOTIFYNEXT       : Obsolete in OS/2 WARP

FS_FLUSHBUF             : Yes

FS_FSCTL                : Yes

FS_FSINFO               : Yes

FS_INIT                 : Yes

FS_IOCTL                : Yes - LOCK & UNLOCK, others are passed to OS2DASD.

FS_MKDIR                : Yes

FS_MOUNT                : Yes

FS_MOVE                 : Yes

FS_NEWSIZE              : Yes

FS_NMPIPE               : No

FS_OPENCREATE           : Yes


FS_PATHINFO             : Yes

FS_PROCESSNAME          : Yes

FS_READ                 : Yes

FS_RMDIR                : Yes

FS_SETSWAP              : No

FS_SHUTDOWN             : Yes


FS_WRITE                : Yes



Version 0.10  - Initial Version

Version 0.20 

- Cache routines have been improved for performance. Removing 'old' sectors

  from the cache is no longer needed. /T option for CACHEF32 has been 


- CHKDSK: Is now able to fix incorrect free space count.

- CHKDSK: Lost cluster fix algoritm has been improved for performance.

- CHKDSK: Didn't recoqnize bad-sectors, has been fixed.

- CHKDSK: Had problems with recoqnition of some type of free clusters,

          has been fixed.

- OS2DASD.DMD: Is now based on the latest version.

Version 0.30

- Added PARTFILT.FLT to the archive.

- Added support for ReadOnly partitions. This is needed for PARTFILT.

- IOCTL Calls (category 8) are now passed throught to OS2DASD.

Version 0.40

- The volume label was retrieved from the boot sector. However Win95

  actually stores the Volume label in the root directory. The Volume label

  now is taken from the root directory.

  Also, the label can be set now. (The boot sector is however still updated)

- /Q switch of PARTFILT didn't work. Now it does.

- A problem was in CHGFILEPOINTER that could (theoretically) lead to an

  trap (FAT32: FS_WRITE: No next cluster available").

- Corrected a logical error where renaming a file or directory to an existing

  directory caused the file or directory to be moved into the target 

  directory. Now FAT32.IFS returns an error.

- Changed CHKDSK so that if an error is found in on of the FATs CHKDSK 

  continues, but ignores the /F switch. Previously, CHKDSK would not do any

  additional checks.

- Renaming a file or directory from the workplace shell didn't work because 

  of two problems: 

    - the WPS uses a strange algoritm to determine of the IFS which 

      appearantly failed with FAT32. This has been corrected.

    - FAT32.IFS does not support EA's (yet), the WPS renames a file, tries

      to write EAs and since that fails renames the file back again.

      Now FAT32 returns NO_ERROR on the call used to write EAs.

- CHKDSK now is able to fix cross-linked clusters on the disk.


Version 0.41

- Fixed a problem with numeric tails shortnames. Files alway got ~1 instead

  if an incrementing number. Has been fixed.

Version 0.50

- Fixed a problem where files with longnames could sometimes not be found

  which lead to duplicate filenames.

- Fixed a problem where scandisk would claim that a directory created by

  FAT32.IFS contained invalid blocks.

- Fixed a (BIG) problem with files or directories with long names where

  if such a file was opened in a DOS session and in an OS/2 session 

  simultaniously OS/2 was unable to see that the same file was opened.

- Fixed a problem where read-only executables could not be run.  

- Fixed a problem where the algoritm used to determine the highest available

  cluster number was incorrect.

- Fixed a problem were CHKDSK was unable to fix cross-linked files.

- Since some people complained that FAT32 would sometimes hang, 

  I have modified the internal semaphore mechanism so an error message will

  appear if a semaphore remains blocked for more than a minute.

Version 0.51

- Did a lot of work on Lazy write performance. Cache access is no longer

  protected with a semaphore but with a per sector inuse flag.

- Fixed a problem that caused INSTALL and MINSTALL to abort when FAT32.IFS

  was loaded. The problem had to do with argument checking with FS_IOCTL 


- Fixed a problem that BRIEF, a populair editor under OS/2, trapped or hung

  itself. The problem had to do with returning improperly formatted 

  information when querying EAs (FAT32.IFS does not support EAs!)

- Corrected a serious problem when a single file was opened more than once 

  and the file was modified using one of the instances. The other instance(s)

  didn't pick up the changes and FAT32.IFS might trap. 

Version 0.52

- Didn't handle closes from child processes that inherited open files 

  properly so the final close would fail.


  • 현재 접속자 74 명
  • 오늘 방문자 949 명
  • 어제 방문자 953 명
  • 최대 방문자 4,250 명
  • 전체 방문자 1,195,782 명
  • 전체 게시물 2,513 개
  • 전체 댓글수 4,077 개
  • 전체 회원수 58 명

- 쇼핑몰 : Softbox
- 예전 문서 / Old docs
Facebook Twitter GooglePlus KakaoStory NaverBand