FAT32 Features
The following topics describe the FAT32 file system.
FAT Mirroring
Mirroring |
Description |
When Enabled (bit 0x0080 clear) |
With mirroring enabled, whenever a FAT sector is written, it will also be written to every other FAT. Also, a mirrored FAT sector can be read from any FAT. A FAT32 drive with multiple FATs will behave the same as FAT16 and FAT12 drives with multiple FATs. That is, the multiple FATs are backups of each other. |
When Disabled (bit 0x0080 set) |
With mirroring disabled, only one of the FATs is active. The active FAT is the one specified by bits 0 through 3 of the extdpb_flags member of DPB. The other FATs are ignored.
Disabling mirroring allows better handling of a drive with a bad sector in one of the FATs. If a bad sector exists, access to the damaged FAT can be completely disabled. Then, a new FAT can be built in one of the inactive FATs and then made accessible by changing the active FAT value in extdpb_flags. |
DPB (FAT32)
The DPB was extended to include FAT32 information. Changes are effective for Windows 95 OEM Service Release 2 and later.
- DPB STRUC
- dpb_drive DB ?
- dpb_unit DB ?
- dpb_sector_size DW ?
- dpb_cluster_mask DB ?
- dpb_cluster_shift DB ?
- dpb_first_fat DW ?
- dpb_fat_count DB ?
- dpb_root_entries DW ?
- dpb_first_sector DW ?
- dpb_max_cluster DW ?
- dpb_fat_size DW ?
- dpb_dir_sector DW ?
- dpb_reserved2 DD ?
- dpb_media DB ?
- fdef NOTFAT32
- dpb_first_access DB ?
- else
- dpb_reserved DB ?
- endif
- dpb_reserved3 DD ?
- dpb_next_free DW ?
- dpb_free_cnt DW ?
- ifndef NOTFAT32
- extdpb_free_cnt_hi DW ?
- extdpb_flags DW ?
- extdpb_FSInfoSec DW ?
- extdpb_BkUpBootSec DW ?
- extdpb_first_sector DD ?
- extdpb_max_cluster DD ?
- extdpb_fat_size DD ?
- extdpb_root_clus DD ?
- extdpb_next_free DD ?
- endif
- DPB ENDS
Members
- dpb_drive
- The drive number (0 = A, 1 = B, and so on).
- dpb_unit
- Specifies the unit number. The device driver uses the unit number to distinguish the specified drive from the other drives it supports.
- dpb_sector_size
- The size of each sector, in bytes.
- dpb_cluster_mask
- The number of sectors per cluster minus 1.
- dpb_cluster_shift
- The number of sectors per cluster, expressed as a power of 2.
- dpb_first_fat
- The sector number of the first sector containing the file allocation table (FAT).
- dpb_fat_count
- The number of FATs on the drive.
- dpb_root_entries
- The number of entries in the root directory.
- dpb_first_sector
- The sector number of the first sector in the first cluster.
- dpb_max_cluster
- The number of clusters on the drive plus 1. This member is undefined for FAT32 drives.
- dpb_fat_size
- The number of sectors occupied by each FAT. The value of zero indicates a FAT32 drive. Use the value in extdpb_fat_size instead.
- dpb_dir_sector
- The sector number of the first sector containing the root directory. This member is undefined for FAT32 drives.
- dpb_reserved2
- Reserved member. Do not use.
- dpb_media
- Specifies the media descriptor for the medium in the specified drive.
- reserved
- Reserved member. Do not use.
- dpb_first_access
- Indicates whether the medium in the drive has been accessed. This member is initialized to -1 to force a media check the first time this DPB is used.
- dpb_reserved3
- Reserved member. Do not use.
- dpb_next_free
- The cluster number of the most recently allocated cluster.
- dpb_free_cnt
- The number of free clusters on the medium. This member is 0FFFFh if the number is unknown.
- extdpb_free_cnt_hi
- The high word of free count.
- extdpb_flags
- Flags describing the drive. The low 4 bits of this value contain the 0-based FAT number of the Active FAT. This member can contain a combination of the following values.
Value |
Description |
BGBPB_F_ActiveFATMsk (000Fh) |
Mask for low four bits. |
BGBPB_F_NoFATMirror (0080h) |
Do not mirror active FAT to inactive FATs. |
*Bits 4-6 and 8-15 are reserved.
- extdpb_FSInfoSec
- The sector number of the file system information sector. This member is set to 0FFFFh if there is no FSINFO sector. Otherwise, this value must be non-zero and less than the reserved sector count.
- extdpb_BkUpBootSec
- The sector number of the backup boot sector. This member is set to 0FFFFh if there is no backup boot sector. Otherwise, this value must be non-zero and less than the reserved sector count.
- extdpb_first_sector
- The first sector of the first cluster.
- extdpb_max_cluster
- The number of clusters on the drive plus 1.
- extdpb_fat_size
- The number of sectors occupied by the FAT.
- extdpb_root_clus
- The cluster number of the first cluster in the root directory.
- extdpb_next_free
- The number of the cluster that was most recently allocated.