Unit Filesystem

From Ultibo.org
Revision as of 03:17, 17 May 2018 by Ultibo (Talk | contribs)

Jump to: navigation, search

Return to Unit Reference


Description


Ultibo FileSystem interface unit

Numbering of Devices, Partitions, Volumes, Drives etc

Example:

Machine with 2 Floppy drives, 2 Fixed drives

Fixed Drive 1 has 2 Partitions (1 Primary and 1 Extended)

Fixed Drive 2 has 1 Partition (1 Primary)

\Floppy0 = Device 00h/Partition 0

\Floppy1 = Device 01h/Partition 0

\Harddisk0\Partition1 = Device 80h/Partition 1

\Harddisk0\Extended1 = Device 80h/Extended 1

\Harddisk0\Partition2 = Device 80h/Partition 2

\Harddisk1\Partition1 = Device 81h/Partition 1

\Volume1 = \Floppy0

\Volume2 = \Floppy1

\Volume3 = \Harddisk0\Partition1

\Volume4 = \Harddisk1\Partition1

\Volume5 = \Harddisk0\Partition2

A: = \Volume1

B: = \Volume2

C: = \Volume3 (Alternate Name = \HarddiskVolume1)

D: = \Volume4 (Alternate Name = \HarddiskVolume2)

E: = \Volume5 (Alternate Name = \HarddiskVolume3)

Constants



FileSystem specific constants FILESYS_*
FILESYS_LOGGING_DESCRIPTION = 'Filesystem Logging';  
 
FILESYS_STORAGE_TIMER_INTERVAL = 500;  


FileSystem lock state FILESYS_LOCK_*
FILESYS_LOCK_NONE = 0;  
FILESYS_LOCK_READ = 1;  
FILESYS_LOCK_WRITE = 2;  
FILESYS_LOCK_AUTO = 3; Not intended for use in all situations, use with extreme caution.


FileSystem cache FILESYS_CACHE_*
FILESYS_CACHE_THREAD_NAME = 'Filesystem Cache'; Thread name for Filesystem cache threads
FILESYS_CACHE_THREAD_PRIORITY = THREAD_PRIORITY_HIGHER; Thread priority for Filesystem cache threads
 
FILESYS_CACHE_TIMER_INTERVAL = 50; 50ms timer interval for Filesystem cache
FILESYS_CACHE_FLUSH_TIMEOUT = 3000; Filesystem cache flush timeout 3 seconds
FILESYS_CACHE_DISCARD_TIMEOUT = 180000; Filesystem cache discard timeout 3 minutes


FileSystem entry timer FILESYS_ENTRY_*
FILESYS_ENTRY_TIMER_INTERVAL = 1000; 1000ms timer interval for Filesystem entries
FILESYS_ENTRY_DELETE_TIMEOUT = 30000; Filesystem entry delete timeout 30 seconds


FileSystem cache timer CACHE_TIMER_*
CACHE_TIMER_KEY_NONE = TIMER_KEY_NONE;  
CACHE_TIMER_KEY_MAX = TIMER_KEY_MAX;  
CACHE_TIMER_KEY_MIN = TIMER_KEY_MIN;  


FileSystem entry timer key ENTRY_TIMER_KEY_*
ENTRY_TIMER_KEY_NONE = TIMER_KEY_NONE;  
ENTRY_TIMER_KEY_MAX = TIMER_KEY_MAX;  
ENTRY_TIMER_KEY_MIN = TIMER_KEY_MIN;  


FileSystem partition, device and volume *_PARTITION, *_DEVICE, *_VOLUME
MIN_FLOPPY_DEVICE = $00;  
MAX_FLOPPY_DEVICE = $7F;  
 
MIN_FIXED_DEVICE = $80;  
MAX_FIXED_DEVICE = $FF; Extends over CDROM/Other
 
MIN_CDROM_DEVICE = $E0;  
MAX_CDROM_DEVICE = $EF;  
 
MIN_OTHER_DEVICE = $F0;  
MAX_OTHER_DEVICE = $FF;  
 
INVALID_PARTITION = -1;  
INVALID_DEVICE = -1;  
INVALID_VOLUME = 0;  
 
MIN_PARTITION = 0;  
MAX_PARTITION = 3;  
MAX_EXTENDED = 1; Only 2 partitions in second level
 
MIN_FLOPPY_DRIVE = MIN_DRIVE;  
MAX_FLOPPY_DRIVE = MIN_DRIVE + 1;  
 
MIN_FIXED_DRIVE = MIN_DRIVE + 2;  
MAX_FIXED_DRIVE = MAX_DRIVE;  
 
MIN_SECTOR_SIZE = 512;  
MAX_SECTOR_SIZE = 4096;  
ISO_SECTOR_SIZE = 2048;  
 
VOLUME_PREFIX = '\Volume'; eg \Volume1
EXTENDED_PREFIX = '\Extended'; eg \Extended1
PARTITION_PREFIX = '\Partition'; eg \Partition1
CONTROLLER_PREFIX = '\Controller'; eg \Controller0
CDROM_DEVICE_PREFIX = '\Cdrom'; eg \Cdrom0
OTHER_DEVICE_PREFIX = '\Other'; eg \Other0
FIXED_DEVICE_PREFIX = '\Harddisk'; eg \Harddisk0
FLOPPY_DEVICE_PREFIX = '\Floppy'; eg \Floppy0
UNKNOWN_DEVICE_PREFIX = '\Unknown'; eg \Unknown0
 
VOLUME_PATH_PREFIX = '\\?'; eg \\?\Volume1\Home
DEVICE_PATH_PREFIX = '\\.'; eg \\.\Harddisk0\Partition1\Home
REPARSE_PATH_PREFIX = '\??\';  
 
BOOT_RECORD_SIGNATURE = $AA55;  
PARTITION_RECORD_SIGNATURE = $AA55;  
BOOT_SECTOR_SIGNATURE = $AA55;  


FileSystem find flag FIND_FLAG_*
FIND_FLAG_NONE = $00000000;  
FIND_FLAG_FILE_NAMES = $00000001;  


FileSystem find wildcard FIND_WILDCARD_*
FIND_WILDCARD_NAME = '*.*';  
FIND_WILDCARD_STREAM = '*';  


File mode fm*Mask
fmOpenMask = $000F;  
fmShareMask = $00F0;  


File attribute fa*
faDot = $01000000;  
faDotDot = $02000000;  
faFile = $04000000;  
faStream = $08000000;  
faFlagName = $00100000; Used for FAT case flags
faFlagExt = $00200000; Used for FAT case flags
faFlagBoth = (faFlagName or faFlagExt);  
faFlagLong = $00400000; Not currently used
faFlagMetafile = $00800000; Used for NTFS Metafiles
 
faFlagMask = $0FFF0000; Used to preserve internal attributes
faFindMask = $0000FFFF; Used to mask internal attributes
faMatchMask = (faFile or faStream or faVolumeID or faDirectory);  
 
Additional File Attribute Flags for NTFS/EXTFS/NSS
faDevice = $00000040; Note: Conflicts with faSymLink in FPC SysUtils (filutilh.inc)
faNormal = $00000080;  
faTemporary = $00000100;  
faSparse = $00000200;  
faReparse = $00000400;  
faCompressed = $00000800;  
faOffline = $00001000;  
faNotIndexed = $00002000;  
faEncrypted = $00004000;  
 
faMftDirectory = $10000000; Used only by FileName Attribute
faMftIndexView = $20000000; Used by both the StandardInformation and FileName attributes
 
Note: NTFS does not store the faVolumeID or faDirectory attributes
 
Additional File Attribute constants
faNone = $00000000;  
faStandard = (faReadOnly or faHidden or faSysFile or faArchive);  
faLongName = (faReadOnly or faHidden or faSysFile or faVolumeID);  
faLongMask = (faReadOnly or faHidden or faSysFile or faVolumeID or faDirectory or faArchive);  


FileSystem volume attribute va*
vaNone = $00000000;  
vaCaseSensitive = $00000001;  
vaCasePreserved = $00000002;  
vaUnicode = $00000004;  
vaPersistentAcls = $00000008;  
vaFileCompression = $00000010;  
vaVolumeQuotas = $00000020;  
vaSparseFiles = $00000040;  
vaReparsePoints = $00000080;  
vaRemoteStorage = $00000100;  
vaLongNamesApi = $00004000;  
vaVolumeCompressed = $00008000;  
vaObjectIds = $00010000;  
vaEncryption = $00020000;  
vaNamedStreams = $00040000;  
vaReadOnly = $00080000;  
 
Additional Volume Attribute constants
vaBootCatalog = $01000000; Used to indicate support for ISO Boot Catalogs
vaVirtualVolume = $02000000; Used to indicate Volume is Virtual or on a Virtual Device
vaFolderEncryption = $04000000; Used to indicate support for Folder Encryption (New files in folder are automatically encrypted)
vaFolderCompression = $08000000; Used to indicate support for Folder Compression (New files in folder are automatically compressed)


FileSystem device attribute da*
daNone = $00000000;  
daWriteable = $00000001;  
daVirtual = $00000002;  


FileSystem image attribute ia*
iaNone = $00000000;  
iaDisk = $00000001; Memory/File/Device (All others always Disk)
iaPartition = $00000002; Memory/File/Device
iaVolume = $00000004; Memory/File/Device
iaDrive = $00000008; Memory/File/Device
iaCDROM = $00000010; Memory/File/Device/Iso
iaDVD = $00000020; Memory/File/Device/Iso
iaFlat = $00000040; Bochs
iaSparse = $00000080; Bochs
iaGrowing = $00000100; Bochs
iaFixed = $00000200; Vpc/Vbox/Vmware
iaDynamic = $00000400; Vpc/Vbox/Vmware
iaSplit = $00000800; Vpc/Vmware/WIM/Ghost/Portlock/Powerquest
iaUndoable = $00001000; Vpc/Vbox/Vmware
 
iaReadable = $00010000; All
iaWriteable = $00020000; All
iaEraseable = $00040000; All


FileSystem catalog attribute ca*
caNone = $00000000;  
caDefault = $00000001; Initial/Default Entry
caBootable = $00000002; Boot Indicator
caNoEmulation = $00000004; No Emulation
caFloppy12M = $00000008; 1.2M
caFloppy144M = $00000010; 1.44M
caFloppy288M = $00000020; 2.88M
caHardDisk = $00000040; Hard Disk


FileSystem miscellaneous NAME_HASH_SIZE*
NAME_HASH_SIZE = 8; Used for Internal Name Hash Generation only


FileSystem partition Id pid*
See http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
 
MAX_PARTITION_ID = 255;  
pidUnused = 0; Empty
pidFAT12 = 1;  
pidXENIXROOT = 2;  
pidXENIXUSR = 3;  
pidFAT16 = 4; under 32M
pidExtended = 5;  
pidFAT16HUGE = 6; over 32M
pidHPFSNTFS = 7;  
pidAIXOS2 = 8;  
pidAIX = 9;  
pidOS2BOOT = 10;  
pidFAT32 = 11;  
pidFAT32LBA = 12;  
pidUnknown013 = 13;  
pidFAT16LBA = 14;  
pidExtLBA = 15;  
pidOPUS = 16;  
pidHIDDEN12 = 17;  
pidCompaqDiag = 18;  
pidUnknown019 = 19;  
pidHIDDEN16 = 20;  
pidUnknown021 = 21;  
pidHIDDEN16HUGE = 22;  
pidHIDDENHPFS = 23;  
pidASTSWAP = 24;  
pidWillowtech = 25;  
pidUnknown026 = 26;  
pidHIDDEN32 = 27;  
pidHIDDEN32LBA = 28;  
pidUnknown029 = 29;  
pidHIDDEN16LBA = 30;  
pidUnknown031 = 31;  
pidWillowsoft = 32;  
pidOxygen = 33;  
pidOxygenExtended = 34;  
pidReserved035 = 35;  
pidNECMSDOS = 36;  
pidUnknown037 = 37;  
pidUnknown038 = 38;  
pidUnknown039 = 39;  
pidUnknown040 = 40;  
pidUnknown041 = 41;  
pidUnknown042 = 42;  
pidUnknown043 = 43;  
pidUnknown044 = 44;  
pidUnknown045 = 45;  
pidUnknown046 = 46;  
pidUnknown047 = 47;  
pidUnknown048 = 48;  
pidReserved049 = 49;  
pidAlienNOS = 50;  
pidReserved051 = 51;  
pidReserved052 = 52;  
pidOS2JFS = 53;  
pidReserved054 = 54;  
pidUnknown055 = 55;  
pidTheos057 = 56;  
pidPlan9 = 57;  
pidTheos058 = 58;  
pidTheos059 = 59;  
pidPowerQuest = 60;  
pidHiddenNetware = 61;  
pidUnknown062 = 62;  
pidUnknown063 = 63;  
pidVENIX286 = 64;  
pidPersonalRISC = 65;  
pidSFS = 66;  
pidPTSDOS = 67;  
pidGoBack = 68;  
pidEUMEL069 = 69;  
pidEUMEL070 = 70;  
pidEUMEL071 = 71;  
pidEUMEL072 = 72;  
pidUnknown073 = 73;  
pidAdaOS = 74;  
pidUnknown075 = 75;  
pidOberon = 76;  
pidQNX4077 = 77;  
pidQNX4078 = 78;  
pidQNX4079 = 79;  
pidOnTrack080 = 80;  
pidNOVELL081 = 81;  
pidCPM = 82;  
pidOnTrack083 = 83;  
pidOnTrack084 = 84;  
pidEZDrive = 85;  
pidGoldenBow = 86;  
pidUnknown087 = 87;  
pidUnknown088 = 88;  
pidUnknown089 = 89;  
pidUnknown090 = 90;  
pidUnknown091 = 91;  
pidPriamEdisk = 92;  
pidUnknown093 = 93;  
pidUnknown094 = 94;  
pidUnknown095 = 95;  
pidUnknown096 = 96;  
pidSpeedStor097 = 97;  
pidUnknown098 = 98;  
pidSysV = 99;  
pidNetware286 = 100;  
pidNWFS = 101; Traditional/Netware 6 Master
pidUnknown102 = 102;  
pidNovell103 = 103;  
pidNovell104 = 104;  
pidNSS = 105; NSS/Netware 6
pidUnknown106 = 106;  
pidUnknown107 = 107;  
pidUnknown108 = 108;  
pidUnknown109 = 109;  
pidUnknown110 = 110;  
pidUnknown111 = 111;  
pidDiskSecure = 112;  
pidUnknown113 = 113;  
pidUnknown114 = 114;  
pidReserved115 = 115;  
pidReserved116 = 116;  
pidPCIX = 117;  
pidReserved118 = 118;  
pidUnknown119 = 119;  
pidUnknown120 = 120;  
pidUnknown121 = 121;  
pidUnknown122 = 122;  
pidUnknown123 = 123;  
pidUnknown124 = 124;  
pidUnknown125 = 125;  
pidUnknown126 = 126;  
pidUnknown127 = 127;  
pidMinix = 128;  
pidLinuxMinix = 129;  
pidLinuxSwap = 130;  
pidLinuxNative = 131;  
pidHIDDENC = 132;  
pidLinuxExtended = 133;  
pidFAT16Stripe = 134;  
pidNTFSStripe = 135;  
pidUnknown136 = 136;  
pidUnknown137 = 137;  
pidUnknown138 = 138;  
pidUnknown139 = 139;  
pidUnknown140 = 140;  
pidUnknown141 = 141;  
pidUnknown142 = 142;  
pidUnknown143 = 143;  
pidUnknown144 = 144;  
pidUnknown145 = 145;  
pidUnknown146 = 146;  
pidAmoeba = 147;  
pidAmoebaBBT = 148;  
pidUnknown149 = 149;  
pidUnknown150 = 150;  
pidUnknown151 = 151;  
pidUnknown152 = 152;  
pidUnknown153 = 153;  
pidUnknown154 = 154;  
pidUnknown155 = 155;  
pidUnknown156 = 156;  
pidUnknown157 = 157;  
pidUnknown158 = 158;  
pidUnknown159 = 159;  
pidPhoenixPM = 160;  
pidReserved161 = 161;  
pidUnknown162 = 162;  
pidReserved163 = 163;  
pidReserved164 = 164;  
pidFreeBSD = 165;  
pidOpenBSD = 166;  
pidNeXTStep = 167;  
pidUnknown168 = 168;  
pidUnknown169 = 169;  
pidUnknown170 = 170;  
pidDarwinBoot = 171;  
pidUnknown172 = 172;  
pidUnknown173= 173;  
pidUnknown174 = 174;  
pidUnknown175 = 175;  
pidUnknown176 = 176;  
pidUnknown177 = 177;  
pidUnknown178 = 178;  
pidUnknown179 = 179;  
pidReserved180 = 180;  
pidUnknown181 = 181;  
pidFAT16MirrorA = 182;  
pidNTFSMirrorA = 183;  
pidBSDIswap = 184;  
pidUnknown185 = 185;  
pidUnknown186 = 186;  
pidUnknown187 = 187;  
pidUnknown188 = 188;  
pidUnknown189 = 189;  
pidUnknown190= 190;  
pidUnknown191 = 191;  
pidUnknown192 = 192;  
pidDRDOSFAT12 = 193;  
pidUnknown194 = 194;  
pidUnknown195 = 195;  
pidDRDOSFAT16 = 196;  
pidUnknown197 = 197;  
pidFAT16MirrorB = 198;  
pidNTFSMirrorB = 199;  
pidUnknown200 = 200;  
pidUnknown201 = 201;  
pidUnknown202 = 202;  
pidUnknown203 = 203;  
pidUnknown204 = 204;  
pidUnknown205 = 205;  
pidUnknown206 = 206;  
pidUnknown207 = 207;  
pidUnknown208 = 208;  
pidUnknown209 = 209;  
pidTinyEFAT = 210;  
pidEFAT = 211;  
pidSecuredEFAT = 212;  
pidOpticalEFAT = 213;  
pidUnknown214 = 214;  
pidUnknown215 = 215;  
pidCPM86 = 216;  
pidUnknown217 = 217;  
pidUnknown218 = 218;  
pidConcurrentCPM = 219;  
pidUnknown220 = 220;  
pidUnknown221 = 221;  
pidUnknown222 = 222;  
pidUnknown223 = 223;  
pidUnknown224 = 224;  
pidSpeedStorFAT12 = 225;  
pidUnknown226 = 226;  
pidUnknown227 = 227;  
pidSpeedStorFAT16 = 228;  
pidReserved229 = 229;  
pidReserved230 = 230;  
pidUnknown231 = 231;  
pidUnknown232 = 232;  
pidUnknown233 = 233;  
pidUnknown234 = 234;  
pidBeOSBFS1 = 235;  
pidUnknown236 = 236;  
pidUnknown237 = 237;  
pidUnknown238 = 238;  
pidUnknown239 = 239;  
pidLinuxRISC = 240;  
pidStorageDimension = 241;  
pidDOS33Secondary = 242;  
pidSpeedStor243 = 243;  
pidSpeedStor244 = 244;  
pidPrologue = 245;  
pidSpeedStor246 = 246;  
pidOSGEFAT = 247;  
pidUnknown248 = 248;  
pidUnknown249 = 249;  
pidBochsX86 = 250;  
pidVMware = 251;  
pidVMwareSwap = 252;  
pidLinuxRAID = 253;  
pidLANstep = 254;  
pidXenixBBT = 255;  
 
PARTITION_NAMES:array[0..MAX_PARTITION_ID] of String = (
'Unused',  
'FAT12',  
'XENIX ROOT',  
'XENIX USR',  
'FAT16 (up to 32M)',  
'Extended',  
'FAT16 (over 32M)',  
'HPFS or NTFS',  
'AIX or OS/2',  
'AIX',  
'OS/2 Boot Manager',  
'FAT32',  
'FAT32 (LBA)',  
'Unknown',  
'FAT16 (LBA)',  
'Extended (LBA)',  
'OPUS',  
'Hidden FAT12',  
'Compaq Diagnostic',  
'Unknown',  
'Hidden FAT16 (<32M)',  
'Unknown',  
'Hidden FAT16 (>32M)',  
'Hidden HPFS',  
'AST SWAP',  
'Willowtech',  
'Unknown',  
'Hidden FAT32',  
'Hidden FAT32 (LBA)',  
'Unknown',  
'Hidden FAT16 (LBA)',  
'Unknown',  
'Willowsoft',  
'Oxygen',  
'Oxygen Extended',  
'Reserved',  
'NEC MS-DOS 3.X',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Reserved',  
'Alien NOS',  
'Reserved',  
'Reserved',  
'OS/2 JFS',  
'Reserved',  
'Unknown',  
'Theos',  
'Plan 9',  
'Theos',  
'Theos',  
'PowerQuest Recovery',  
'Hidden Netware',  
'Unknown',  
'Unknown',  
'VENIX 80286',  
'Personal RISC',  
'SFS',  
'PTS-DOS',  
'GoBack',  
'EUMEL/Elan',  
'EUMEL/Elan',  
'EUMEL/Elan',  
'EUMEL/Elan',  
'Unknown',  
'AdaOS Aquila',  
'Unknown',  
'Oberon',  
'First QNX 4.0',  
'Second QNX 4.0',  
'Third QNX 4.0',  
'OnTrack DM',  
'NOVELL',  
'CP/M',  
'OnTrack DM',  
'OnTrack DM',  
'EZ Drive',  
'GoldenBow',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Priam Edisk',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'SpeedStor',  
'Unknown',  
'Sys V / Mach / HURD',  
'Netware 286',  
'Netware 386',  
'Unknown',  
'Novell',  
'Novell',  
'Netware NSS',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'DiskSecure',  
'Unknown',  
'Unknown',  
'Reserved',  
'Reserved',  
'PC/IX',  
'Reserved',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Minix v1.1-1.4a',  
'Linux / Minix',  
'Linux Swap',  
'Linux Native',  
'Hidden C:',  
'Linux Extended',  
'FAT16 Stripe Set',  
'NTFS Stripe Set',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Amoeba',  
'Amoeba BBT',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Phoenix Power Management',  
'Reserved',  
'Unknown',  
'Reserved',  
'Reserved',  
'FreeBSD',  
'OpenBSD',  
'NeXTStep',  
'Unknown',  
'Unknown',  
'Unknown',  
'Apple Darwin Boot',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Reserved',  
'Unknown',  
'FAT16 Mirror (Master)',  
'NTFS Mirror (Master)',  
'BSDI Swap',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'DR-DOS FAT12',  
'Unknown',  
'Unknown',  
'DR-DOS FAT16',  
'Unknown',  
'FAT16 Mirror (Slave)',  
'NTFS Mirror (Slave)',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Tiny EFAT',  
'EFAT',  
'Secured EFAT',  
'Optical EFAT',  
'Unknown',  
'Unknown',  
'CP/M-86',  
'Unknown',  
'Unknown',  
'Concurrent CP/M',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'SpeedStor FAT12',  
'Unknown',  
'Unknown',  
'SpeedStor FAT16',  
'Reserved',  
'Reserved',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'BeOS BFS-1',  
'Unknown',  
'Unknown',  
'Unknown',  
'Unknown',  
'Linux/PA-RISC',  
'Storage Dimension',  
'DOS 3.3+ Secondary',  
'SpeedStor',  
'SpeedStor',  
'Prologue',  
'SpeedStor',  
'OSG EFAT',  
'Unknown',  
'Unknown',  
'BochsX86',  
'VMware',  
'VMware Swap',  
'Linux RAID',  
'LANstep',  
'Xenix BBT');  


FileSystem device description FILESYS_*_DEVICE_DESCRIPTION
FILESYS_ATA_DEVICE_DESCRIPTION = 'ATA Storage Device';  
FILESYS_ATAPI_DEVICE_DESCRIPTION = 'ATAPI Storage Device';  
FILESYS_SCSI_DEVICE_DESCRIPTION = 'SCSI Storage Device';  
FILESYS_USB_DEVICE_DESCRIPTION = 'USB Storage Device';  
FILESYS_MMC_DEVICE_DESCRIPTION = 'MMC/SD Storage Device';  


FileSystem controller description FILESYS_*_CONTROLLER_DESCRIPTION
FILESYS_ATA_CONTROLLER_DESCRIPTION = 'ATA Storage Controller';  
FILESYS_ATAPI_CONTROLLER_DESCRIPTION = 'ATAPI Storage Controller';  
FILESYS_SCSI_CONTROLLER_DESCRIPTION = 'SCSI Storage Controller';  
FILESYS_USB_CONTROLLER_DESCRIPTION = 'USB Storage Controller';  
FILESYS_MMC_CONTROLLER_DESCRIPTION = 'MMC/SD Storage Controller';  


FileSystem logging FILESYS_LOG_*
FILESYS_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG; FileSystem debugging messages
FILESYS_LOG_LEVEL_INFO = LOG_LEVEL_INFO; FileSystem informational messages, such as a filesystem being mounted or dismounted
FILESYS_LOG_LEVEL_WARN = LOG_LEVEL_WARN; FileSystem warning messages
FILESYS_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR; FileSystem error messages
FILESYS_LOG_LEVEL_NONE = LOG_LEVEL_NONE; No FileSystem messages


Type definitions



Storage device event

PStorageDeviceEvent = ^TStorageDeviceEvent;

TStorageDeviceEvent = record

Timer:TTimerHandle;  
Device:PStorageDevice;  

Cache timer

PCacheTimerItem = ^TCacheTimerItem;

TCacheTimerItem = record

Key:Integer; Ordering key for timer list
Page:TObject; The cache page referenced by this timer list item
Prev:PCacheTimerItem; Previous item in timer list
Next:PCacheTimerItem; Next item in timer list

Entry timer

PEntryTimerItem = ^TEntryTimerItem;

TEntryTimerItem = record

Key:Integer; Ordering key for timer list
Entry:TObject; The disk entry referenced by this timer list item
Prev:PEntryTimerItem; Previous item in timer list

Media type

TMediaType = (mtUNKNOWN,mtINVALID,mtFLOPPY,mtFIXED,mtREMOVABLE,mtCDROM,mtDVD,mtOTHER);

Floppy type

TFloppyType = (ftUNKNOWN,ftINVALID,ft360K,ft12M,ft720K,ft144M,ft288M,ftATAPI);

Image type

TImageType = (itUNKNOWN,itINVALID,itMEMORY,itFILE,itDEVICE,itISO,itBOCHS,itVMWARE,itVPC,itVBOX);

Cache state

TCacheState = (csCLEAN,csDIRTY);

Cache mode

TCacheMode = (cmNONE,cmREADONLY,cmREADWRITE);

Cache page type

TCachePageType = (ptNONE,ptDEVICE);

Cache page state

TCachePageState = (psUNKNOWN,psEMPTY,psCLEAN,psDIRTY);

Cache page content

TCachePageContent = (pcUNKNOWN,pcDATA,pcDIRECTORY,pcENTRY,pcSYSTEM);

Cache statistics

PCacheStatistics = ^TCacheStatistics;

TCacheStatistics = record

Information
PageSize:LongWord;  
PageCount:LongWord;  
CacheSize:LongWord;  
CacheMode:TCacheMode;  
CacheState:TCacheState;  
FlushTimeout:LongWord;  
DiscardTimeout:LongWord;  
Read/Write
ReadCached:Int64;  
ReadDirect:Int64;  
WriteBack:Int64;  
WriteThrough:Int64;  
WriteDirect:Int64;  
Hit/Miss
HitCount:Int64;  
MissCount:Int64;  
Allocate Success/Failure
FailCount:Int64;  
SuccessCount:Int64;  
Page Flush/Discard
FlushCount:Int64;  
DiscardCount:Int64;  
UnknownCount:Int64;  
Page Times
OldestClean:Int64;  
NewestClean:Int64;  
OldestDirty:Int64;  
NewestDirty:Int64;  

Search

TSearchRec = SysUtils.TRawbyteSearchRec;

TSearchRec = record

Note: TSearchRec is always defined in SysUtils
Time: Integer;  
Size: Integer;  
Attr: Integer;  
Name: TFileName;  
ExcludeAttr: Integer;  
FindHandle: THandle;  
FindData: TWin32FindData;  

File search

TFileSearchRec = record

FindHandle:THandle;  
FindData:TWin32FindData;  

Disk search

TDiskSearchRec = record

Name:String;  
MediaType:TMediaType;  
FloppyType:TFloppyType;  
FindHandle:THandle;  
Context:LongWord;  
Verbose:Boolean;  

Partition search

TPartitionSearchRec = record

Name:String;  
Index:LongWord;  
FindHandle:THandle;  
Context:LongWord;  
Verbose:Boolean;  

Volume search

TVolumeSearchRec = record

Name:String;  
Attributes:LongWord;  
VolumeLabel:String;  
VolumeGUID:String;  
VolumeSerial:LongWord;  
DriveType:TDriveType;  
FileSysType:TFileSysType;  
FindHandle:THandle;  
Context:LongWord;  
Verbose:Boolean;  

Drive search

TDriveSearchRec = record

Name:String;  
Attributes:LongWord;  
VolumeLabel:String;  
VolumeGUID:String;  
VolumeSerial:LongWord;  
DriveType:TDriveType;  
FileSysType:TFileSysType;  
FindHandle:THandle;  
Context:LongWord;  
Verbose:Boolean;  

Image search

TImageSearchRec = record

Name:String;  
ImageNo:Integer;  
ImageType:TImageType;  
MediaType:TMediaType;  
FloppyType:TFloppyType;  
Attributes:LongWord;  
SectorSize:Word;  
SectorCount:Int64;  
Cylinders:LongWord;  
Heads:LongWord;  
Sectors:LongWord;  
PartitionId:Byte;  
FindHandle:THandle;  
Context:LongWord;  
Verbose:Boolean;  

Catalog search

TCatalogSearchRec = record

Name:String;  
Path:String;  
CatalogNo:LongWord;  
MediaType:TMediaType;  
FloppyType:TFloppyType;  
Attributes:LongWord;  
SectorSize:Word;  
SectorCount:Int64;  
FindHandle:THandle;  
Context:LongWord;  

Mount search

TMountSearchRec = record

Name:String;  
FindHandle:THandle;  
Context:LongWord;  

Junction search

TJunctionSearchRec = record

Name:String;  
FindHandle:THandle;  
Context:LongWord;  

Stream search

TStreamSearchRec = record

FindHandle:THandle;  
Context:Pointer;  
FindData:TWin32FindStreamData;  

Link search

TLinkSearchRec = record

Name:String;  
FindHandle:THandle;  
Context:Pointer;  

FAT12/FAT16 BIOS parameter block

TBiosPB = packed record

BytesPerSector:Word; 512,1024,2048,4096 - Usually 512
SectorsPerCluster:Byte; 1,2,4,8,16,32,64,128
ReservedSectors:Word; FAT12/16 - Usually 1, FAT32 - Usually 32
NumberOfFats:Byte; Usually 2
RootEntryCount:Word; FAT32 always 0, FAT16 usually 512 (RootEntryCount * 32 must be even multiple of BytesPerSector)
TotalSectors16:Word; Total Sectors on the drive or 0 if TotalSectors32 used
MediaId:Byte; F8 for Fixed media, F0 usually for Removable media
SectorsPerFat16:Word; FAT32 always 0, Number of Sectors per FAT
SectorsPerTrack:Word; Sectors Per Track for Int13
NumberOfHeads:Word; Number of Header for Int13 eg 1.44MB = 2
HiddenSectors:LongWord; Number of Hidden Sectors preceeding Partition (Only valid on Partitioned media)
TotalSectors32:LongWord; Total Sectors on the drive or 0 if TotalSectors16 used

FAT32 BIOS parameter block

TExtBiosPB = packed record

BytesPerSector:Word; 512,1024,2048,4096 - Usually 512
SectorsPerCluster:Byte; 1,2,4,8,16,32,64,128
ReservedSectors:Word; FAT12/16 - Usually 1, FAT32 - Usually 32
NumberOfFats:Byte; Usually 2
RootEntryCount:Word; FAT32 always 0, FAT16 usually 512 (RootEntryCount * 32 must be even multiple of BytesPerSector)
TotalSectors16:Word; Total Sectors on the drive or 0 if TotalSectors32 used
MediaId:Byte; F8 for Fixed media, F0 usually for Removable media
SectorsPerFat16:Word; FAT32 always 0, Number of Sectors per FAT
SectorsPerTrack:Word; Sectors Per Track for Int13
NumberOfHeads:Word; Number of Header for Int13 eg 1.44MB = 2
HiddenSectors:LongWord; Number of Hidden Sectors preceeding Partition (Only valid on Partitioned media)
TotalSectors32:LongWord; Total Sectors on the drive or 0 if TotalSectors16 used
SectorsPerFat32:LongWord; Number of Sectors per FAT
ExtendedFlags:Word; Bits 0-3 -- Zero-based number of active FAT. Only valid if mirroring.

Bits 0-3 - is disabled.

Bits 4-6 - Reserved.

Bit 7 - 0 means the FAT is mirrored at runtime into all FATs.

Bit 7 - 1 means only one FAT is active, it is the one referenced.

Bit 7 - in bits 0-3.

Bits 8-15 -- Reserved.

FileSysVersion:Word; FAT32 Version (Current 0:0)
RootCluster:LongWord; Usually Cluster 2
FileSysInfoSector:Word; Usually 1
BackupBootSector:Word; Usually 6
Reserved:array[0..11] of Byte; Always 0

NTFS BIOS parameter block

TNtfsBiosPB = packed record

BytesPerSector:Word; 512,1024,2048,4096 - Usually 512
SectorsPerCluster:Byte; 1,2,4,8,16,32,64,128 - Usually 8
ReservedSectors:Word; Must always be 0 on NTFS (Win2K Volume Manager ?)
Reserved1:array[0..2] of Byte; Must always be 0 on NTFS
Reserved2:Word; Must always be 0 on NTFS
MediaId:Byte; F8 for Fixed media, F0 usually for Removable media
Reserved3:Word; Must always be 0 on NTFS
SectorsPerTrack:Word; Sectors Per Track for Int13
NumberOfHeads:Word; Number of Header for Int13 eg 1.44MB = 2
HiddenSectors:LongWord; Number of Hidden Sectors preceeding Partition
Reserved4:LongWord; Must always be 0 on NTFS
Reserved5:LongWord; Not used by NTFS - Usually 80008000
TotalSectors:Int64; Total Sectors on the drive
MFTCluster:Int64; Start Cluster of $MFT
MFTMirror:Int64; Start Cluster of $MFTMirr
ClustersPerFile:LongInt; Clusters Per File Record (Can be negative) (F6 = 1024 - See Notes)
ClustersPerIndex:LongInt; Clusters Per Index Record (Can be negative) (F6 = 1024 - See Notes)
VolumeSerial:Int64; Volume Serial Number
Checksum:LongWord; Checksum (Not Used)

Partition entry

TPartitionEntry = packed record

BootIndicator:Byte; 80 for active partition
StartHead:Byte; Either Bits 0-3 only or Bits 0-7 depending on BIOS
StartSector:Byte; Bits 0-5 = Sector, Bits 6-7 = Bits 8-9 of Cylinder
StartCylinder:Byte; Bits 0-7 Only, Bits 8-9 in Sector
TypeIndicator:Byte; See Table in Interrupt List and Below
EndHead:Byte; Either Bits 0-3 only or Bits 0-7 depending on BIOS
EndSector:Byte; Bits 0-5 = Sector, Bits 6-7 = Bits 8-9 of Cylinder
EndCylinder:Byte; Bits 0-7 Only, Bits 8-9 in Sector
SectorOffset:LongWord; Offset in sectors from current position to Start of Partition
SectorCount:LongWord; Size in Sectors of the Partition

Partition table

TPartitionTable = packed record

PartitionEntry:array[MIN_PARTITION..MAX_PARTITION] of TPartitionEntry;  

Master boot code

TMasterBootCode = packed array[0..445] of Byte;

Master boot record

PMasterBootRecord = ^TMasterBootRecord;

TMasterBootRecord = packed record

Note: Standard Master Boot Record
BootCode:TMasterBootCode;  
PartitionTable:TPartitionTable;  
Signature:Word; Magic Number $AA55

Ext master boot code

TExtMasterBootCode = packed array[0..439] of Byte;

Ext master boot record

PExtMasterBootRecord = ^TExtMasterBootRecord;

TExtMasterBootRecord = packed record

Note: NT/2000/XP Master Boot Record
BootCode:TExtMasterBootCode;  
DiskSignature:LongWord;  
Reserved1:Word;  
PartitionTable:TPartitionTable;  
Signature:Word; Magic Number $AA55

Partition record

PPartitionRecord = ^TPartitionRecord;

TPartitionRecord = packed record

Note: Similar to TMasterBootRecord
Dummy:array[0..445] of Byte;  
PartitionTable:TPartitionTable; Only first 2 ever used
Signature:Word; Magic Number $AA55

Sector

PSector = ^TSector;

TSector = packed array[0..511] of Byte;

   

Boot sector jump

TBootSectorJump = packed array[0..2] of Byte;

Boot sector code

TBootSectorCode = packed array[0..447] of Byte;

Boot sector

PBootSector = ^TBootSector;

TBootSector = packed record

Note: FAT12/FAT16 Boot Sector
BootJump:TBootSectorJump; JMP - EBh,??h,90h or E9h,??h,??h
OEMName:array[0..7] of Char; MSWIN4.0/MSWIN4.1/MSDOS5.0
BPB:TBiosPB; See Above
DriveNumber:Byte; BIOS Int13 Drive No 00h, 80h, FFh etc
Reserved1:Byte; Always 00h
BootSignature:Byte; Always 29h
VolumeSerial:LongWord; Serial No (Date/Time when Formatted)
VolumeName:array[0..10] of Char; Volume Label or "NO NAME"
SystemName:array[0..7] of Char; System Type FAT12, FAT16, FAT32 etc
BootCode:TBootSectorCode; Executable Code
Signature:Word; Magic Number $AA55

Ext boot sector jump

TExtBootSectorJump = packed array[0..2] of Byte;

Ext boot sector code

TExtBootSectorCode = packed array[0..419] of Byte;

Ext boot sector

PExtBootSector = ^TExtBootSector;

TExtBootSector = packed record

Note: FAT32 Boot Sector
BootJump:TExtBootSectorJump; JMP - EBh,??h,90h or E9h,??h,??h
OEMName:array[0..7] of Char; MSWIN4.1
BPB:TExtBiosPB; See Above
DriveNumber:Byte; BIOS Int13 Drive No 00h, 80h, FFh etc
Reserved1:Byte; Always 00h
BootSignature:Byte; Always 29h
VolumeSerial:LongWord; Serial No (Date/Time when Formatted)
VolumeName:array[0..10] of Char; Volume Label or "NO NAME"
SystemName:array[0..7] of Char; System Type FAT12, FAT16, FAT32 etc
BootCode:TExtBootSectorCode; Executable Code
Signature:Word; Magic Number $AA55

NTFS boot sector jump

TNtfsBootSectorJump = packed array[0..2] of Byte;

NTFS boot sector code

TNtfsBootSectorCode = packed array[0..425] of Byte;

NTFS boot sector

PNtfsBootSector = ^TNtfsBootSector;

TNtfsBootSector = packed record

Note: NTFS Boot Sector
BootJump:TNtfsBootSectorJump; JMP - EBh,??h,90h
OEMName:array[0..7] of Char; Always NTFS
BPB:TNtfsBiosPB; See Above (73 Bytes BPB and ExtBPB)
BootCode:TNtfsBootSectorCode; Executable Code
Signature:Word; Magic Number $AA55

EXTFS boot sector

PExtfsBootSector = ^TExtfsBootSector;

TExtfsBootSector = packed record

Note: EXTFS Boot Sector
   

FileSystem logging

PFileSysLogging = ^TFileSysLogging;

TFileSysLogging = record

Logging Properties
Logging:TLoggingDevice;  


Class definitions



FileSystem specific classes

TFileSysDriver = class(TObject)
TFileSysList = class(TLinkedObjList)
TFileSysListEx = class(TLinkedObjList)
TFileSysTree = class(TLinkedObjTree)
TDiskDrive = class(TListObject)
TRawHandle = class(TListObject)
TEnumHandle = class(TListObject)
TFileHandle = class(TListObject)
TFindHandle = class(TListObject)
TDiskController = class(TListObject)
TDiskDevice = class(TListObject)
TDiskPartition = class(TListObject)
TDiskVolume = class(TListObject)
TDiskImage = class(TListObject)
TRecognizer = class(TListObject)
TRedirector = class(TListObject)
TDiskPartitioner = class(TObject)
TDiskFormatter = class(TObject)
TDiskDefragger = class(TObject)
TDiskConverter = class(TObject)
TDiskRepairer = class(TObject)
TDiskResizer = class(TObject)
TDiskCopier = class(TObject)
TDiskImager = class(TObject)
TFileSystem = class(TListObject)
TDiskChunk = class(TListObject)
TDiskTable = class(TListObject)
TDiskBlock = class(TListObject)
TDiskEntry = class(TTreeObject)
TDiskCatalog = class(TListObject)
TDiskReparse = class(TObject)
TDiskSecurity = class(TObject)
TDiskAcl = class(TListObject)
TDiskAce = class(TListObject)
TCache = class(TObject)
TCacheEx = class(TCache)
THashCache = class(TObject)
TIncrementalCache = class(TObject)
TCachePage = class(TObject)
THashCachePage = class(TCachePage)
TIncrementalCachePage = class(THashCachePage)
TCacheTimer = class(TObject)
THashCacheTimer = class(TObject)
TIncrementalCacheTimer = class(TObject)
TCacheThread = class(TThread)
THashCacheThread = class(TThread)
TIncrementalCacheThread = class(TThread)
TEntryTimer = class(TObject)
TDefaultRecognizer = class(TRecognizer)
TDefaultPartitioner = class(TDiskPartitioner)
TExtDiskController = class(TDiskController)
TATADiskController = class(TDiskController)
TATAPIDiskController = class(TDiskController)
TSCSIDiskController = class(TDiskController)
TUSBDiskController = class(TExtDiskController)
TMMCDiskController = class(TExtDiskController)


FileSystem advanced classes

TFSHandleStream = class(TStream)
TFSFileStream = class(TFSHandleStream)
TFSHandleStreamEx = class(TStreamEx)
TFSFileStreamEx = class(TFSHandleStreamEx)


Public variables



FileSystem logging

FILESYS_DEFAULT_LOG_LEVEL:LongWord = FILESYS_LOG_LEVEL_DEBUG; Minimum level for FileSystem messages. Only messages with level greater than or equal to this will be printed.
FILESYS_LOG_ENABLED:Boolean;

FileSystem specific variables

FileSysDriver:TFileSysDriver;


Function declarations



Initialization functions

procedure FileSysInit;
Description: To be documented
Note None documented


function FileSysStart:LongWord;
Description: To be documented
Note None documented


function FileSysStop:LongWord;
Description: To be documented
Note None documented


function FileSysStartCompleted:Boolean;
Description: Returns True if the filesystem has been started
Note None documented


procedure FileSysAsyncStart(Data:Pointer);
Description: To be documented
Note None documented


FileSystem functions (Delphi/FreePascal RTL Equivalent)

Drive functions

function FSGetPathDrive(const APath:String):Byte; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveType(ADrive:Byte):TDriveType; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveData(ADrive:Byte):TDriveData; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveAttr(ADrive:Byte):LongWord; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveLabel(ADrive:Byte):String; inline;
Description: To be documented
Note No Volume Support


function FSSetDriveLabel(ADrive:Byte; const ALabel:String):Boolean; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveSerial(ADrive:Byte):LongWord; inline;
Description: To be documented
Note No Volume Support


function FSSetDriveSerial(ADrive:Byte; ASerial:LongWord):Boolean; inline;
Description: To be documented
Note No Volume Support


function FSIsDriveValid(ADrive:Byte):Boolean; inline;
Description: To be documented
Note No Volume Support


function FSGetValidDrives:LongWord; inline;
Description: To be documented
Note No Volume Support


function FSGetValidDriveNames:TStringList; inline;
Description: To be documented
Note No Volume Support


function FSGetValidDriveStrings:String; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveFreeSpace(ADrive:Byte):LongWord; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveFreeSpaceEx(ADrive:Byte):Int64; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveTotalSpace(ADrive:Byte):LongWord; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveTotalSpaceEx(ADrive:Byte):Int64; inline;
Description: To be documented
Note No Volume Support


function FSGetDriveInformation(const APath:String; var AClusterSize:LongWord; var ATotalClusterCount,AFreeClusterCount:Int64):Boolean; inline;
Description: To be documented
Note None documented


function FSGetCurrentDrive:Byte; inline;
Description: To be documented
Note No Volume Support


function FSSetCurrentDrive(const ADrive:String):Boolean; inline;
Description: To be documented
Note No Volume Support


File functions

function FSFileOpen(const AFileName:String; AMode:Integer):THandle; inline;
Description: To be documented
Note None documented


function FSFileCreate(const AFileName:String):THandle; inline;
Description: To be documented
Note None documented


function FSDeleteFile(const AFileName:String):Boolean; inline;
Description: To be documented
Note None documented


procedure FSFileClose(AHandle:Integer); inline;
Description: To be documented
Note None documented


function FSRenameFile(const AOldName,ANewName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSFileSeek(AHandle:THandle; AOffset,AOrigin:LongInt):LongInt; inline;
Description: To be documented
Note None documented


function FSFileFlush(AHandle:Integer):Boolean; inline;
Description: To be documented
Note None documented


function FSFileTruncate(AHandle:Integer):Boolean; inline;
Description: To be documented
Note None documented


function FSSetEndOfFile(AHandle:THandle):Boolean; inline;
Description: To be documented
Note None documented


function FSEndOfFile(AHandle:Integer):Boolean; inline;
Description: To be documented
Note None documented


function FSFilePos(AHandle:THandle):LongInt; inline;
Description: To be documented
Note None documented


function FSFileSize(AHandle:THandle):LongInt; inline;
Description: To be documented
Note None documented


function FSFileAge(const AFileName:String):Integer; inline;
Description: To be documented
Note None documented


function FSFileExists(const AFileName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSFileGetAttr(const AFileName:String):Integer; inline;
Description: To be documented
Note None documented


function FSFileGetDate(AHandle:Integer):Integer; inline;
Description: To be documented
Note None documented


function FSFileSetAttr(const AFileName:String; AAttr:Integer):Integer; inline;
Description: To be documented
Note None documented


function FSFileSetDate(AHandle:Integer; AAge:Integer):Integer; inline;
Description: To be documented
Note None documented


function FSFileRead(AHandle:THandle; var ABuffer; ACount:LongInt):LongInt; inline;
Description: To be documented
Note None documented


function FSFileWrite(AHandle:THandle; const ABuffer; ACount:LongInt):LongInt; inline;
Description: To be documented
Note None documented


Directory functions

function FSCreateDir(const ADirName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSRemoveDir(const ADirName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSRenameDir(const AOldName,ANewName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSGetCurrentDir:String; inline;
Description: To be documented
Note No Volume Support


function FSSetCurrentDir(const ADirName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSDirectoryExists(const ADirName:String):Boolean; inline;
Description: To be documented
Note None documented


procedure FSForceDirectories(ADirName:String); inline;
Description: To be documented
Note None documented


procedure FSDeleteTree(const ADirName:String); inline;
Description: To be documented
Note None documented


Search functions

function FSFindFirst(const APath:String; AAttr:Integer; var ASearchRec:TSearchRec):Integer; inline;
Description: To be documented
Note None documented


function FSFindNext(var ASearchRec:TSearchRec):Integer; inline;
Description: To be documented
Note None documented


procedure FSFindClose(var ASearchRec:TSearchRec); inline;
Description: To be documented
Note None documented


Additional functions

function FSFileCopy(const ASourceFile,ADestFile:String; AFailIfExists:Boolean):Boolean; inline;
Description: To be documented
Note None documented


function FSFileCopyEx(const ASourceFile,ADestFile:String; AFailIfExists:Boolean; AUseSourceDate:Boolean; ADestDate:Integer; AUseSourceAttr:Boolean; ADestAttr:Integer):Boolean; inline;
Description: To be documented
Note None documented


function FSGetShortName(const AFileName:String):String; inline;
Description: To be documented
Note None documented


function FSGetLongName(const AFileName:String):String; inline;
Description: To be documented
Note None documented


function FSGetTrueName(const AFileName:String):String; inline;
Description: To be documented
Note None documented


Extended functions

function FSFileSeekEx(AHandle:THandle; const AOffset:Int64; AOrigin:LongInt):Int64; inline;
Description: To be documented
Note None documented


function FSEndOfFileEx(AHandle:Integer):Boolean; inline;
Description: To be documented
Note None documented


function FSFilePosEx(AHandle:THandle):Int64; inline;
Description: To be documented
Note None documented


function FSFileSizeEx(AHandle:THandle):Int64; inline;
Description: To be documented
Note None documented


function FSFileAgeEx(const AFileName:String):TFileTime; inline;
Description: To be documented
Note None documented


function FSFileGetAttrEx(AHandle:Integer):Integer; inline;
Description: To be documented
Note None documented


function FSFileGetDateEx(AHandle:Integer):TFileTime; inline;
Description: To be documented
Note None documented


function FSFileSetDateEx(AHandle:Integer; AAge:TFileTime):Integer; inline;
Description: To be documented
Note None documented


function FSGetFileTime(AHandle:THandle; ACreateTime,AAccessTime,AWriteTime:PFileTime):Boolean; inline;
Description: To be documented
Note None documented


function FSSetFileTime(AHandle:THandle; ACreateTime,AAccessTime,AWriteTime:PFileTime):Boolean; inline;
Description: To be documented
Note None documented


function FSFindFirstEx(const APath:String; var ASearchRec:TFileSearchRec):Integer; inline;
Description: To be documented
Note None documented


function FSFindNextEx(var ASearchRec:TFileSearchRec):Integer; inline;
Description: To be documented
Note None documented


procedure FSFindCloseEx(var ASearchRec:TFileSearchRec); inline;
Description: To be documented
Note None documented


FileSystem functions (Win32 Compatibility)

Drive functions

function FSDefineDosDevice(const ADeviceName,ATargetPath:String; AFlags:LongWord):Boolean; inline;
Description: To be documented
Note None documented


function FSGetDiskType(const ARootPath:String):LongWord; inline;
Description: Equivalent to Win32 GetDriveType
Note None documented


function FSGetDiskFreeSpace(const ARootPath:String; var ASectorsPerCluster,ABytesPerSector,ANumberOfFreeClusters,ATotalNumberOfClusters:LongWord):Boolean; inline;
Description: To be documented
Note None documented


function FSGetDiskFreeSpaceEx(const APathName:String; var AFreeBytesAvailableToCaller,ATotalNumberOfBytes,ATotalNumberOfFreeBytes:QWord):Boolean; inline;
Description: To be documented
Note None documented


function FSGetLogicalDrives:LongWord; inline;
Description: To be documented
Note None documented


function FSGetLogicalDriveStrings:String; inline;
Description: To be documented
Note None documented


function FSGetVolumeInformation(const ARootPath:String; var AVolumeName:String; var AVolumeSerialNumber,AMaximumComponentLength,AFileSystemFlags:LongWord; var ASystemName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSQueryDosDevice(const ARootPath:String):String; inline;
Description: To be documented
Note None documented


function FSSetVolumeLabel(const AVolume:String; const ALabel:String):Boolean; inline;
Description: To be documented
Note None documented


File functions

function FSAreFileApisANSI:Boolean; inline;
Description: To be documented
Note None documented


function FSCloseFile(AHandle:THandle):Boolean; inline;
Description: Equivalent to Win32 CloseHandle
Note None documented


function FSCopyFile(const AExistingName,ANewName:String; AFailIfExists:Boolean):Boolean; inline;
Description: To be documented
Note None documented


function FSCreateFile(const AFileName:String; AAccessMode,AShareMode,ACreateFlags,AFileAttributes:LongWord):THandle; inline;
Description: To be documented
Note None documented


function FSFindCloseFile(AHandle:THandle):Boolean; inline;
Description: Equivalent to Win32 FindClose
Note None documented


function FSFindFirstFile(const AFileName:String; var AFindData:TWin32FindData):THandle; inline;
Description: To be documented
Note None documented


function FSFindNextFile(AHandle:THandle; var AFindData:TWin32FindData):Boolean; inline;
Description: To be documented
Note None documented


function FSFlushFileBuffers(AHandle:THandle):Boolean; inline;
Description: To be documented
Note None documented


function FSGetFileAttributes(const AFileName:String):LongWord; inline;
Description: To be documented
Note None documented


function FSGetFileInformationByHandle(AHandle:THandle; var AFileInformation:TByHandleFileInformation):Boolean; inline;
Description: To be documented
Note None documented


function FSGetFileSize(AHandle:THandle; var AFileSizeHigh:LongWord):LongWord; inline;
Description: To be documented
Note None documented


function FSGetFullPathName(const AFileName:String):String; inline;
Description: To be documented
Note None documented


function FSGetShortPathName(const ALongPath:String):String; inline;
Description: To be documented
Note None documented


function FSMoveFile(const AExistingName,ANewName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSReadFile(AHandle:THandle; var ABuffer; ABytesToRead:LongWord; var ABytesRead:LongWord):Boolean; inline;
Description: To be documented
Note None documented


function FSSetFileApisToANSI:Boolean; inline;
Description: To be documented
Note None documented


function FSSetFileApisToOEM:Boolean; inline;
Description: To be documented
Note None documented


function FSSetFileAttributes(const AFileName:String; AFileAttributes:LongWord):Boolean; inline;
Description: To be documented
Note None documented


function FSSetFilePointer(AHandle:THandle; ADistanceToMove:LongInt; var ADistanceToMoveHigh:LongInt; AMoveMethod:LongWord):LongWord; inline;
Description: To be documented
Note None documented


function FSSetFilePointerEx(AHandle:THandle; const ADistanceToMove:Int64; var ANewFilePointer:Int64; AMoveMethod:LongWord):Boolean; inline;
Description: To be documented
Note None documented


function FSWriteFile(AHandle:THandle;const ABuffer; ABytesToWrite:LongWord; var ABytesWritten:LongWord):Boolean; inline;
Description: To be documented
Note None documented


function FSGetLongPathName(const AShortPath:String):String; inline;
Description: To be documented
Note None documented


function FSSetFileShortName(const AFileName,AShortName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSSetFileShortNameEx(AHandle:THandle; const AShortName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSCreateHardLink(const ALinkName,AFileName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSCreateSymbolicLink(const ALinkName,ATargetName:String; ADirectory:Boolean):Boolean; inline;
Description: To be documented
Note None documented


Directory functions

function FSCreateDirectory(const APathName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSGetCurrentDirectory:String; inline;
Description: To be documented
Note None documented


function FSRemoveDirectory(const APathName:String):Boolean; inline;
Description: To be documented
Note None documented


function FSSetCurrentDirectory(const APathName:String):Boolean; inline;
Description: To be documented
Note None documented


RTL text IO functions

function SysTextIOReadChar(var ACh:Char; AUserData:Pointer):Boolean;
Description: Handler for platform TextIOReadChar function
Note Not intended to be called directly by applications


function SysTextIOWriteChar(ACh:Char; AUserData:Pointer):Boolean;
Description: Handler for platform TextIOWriteChar function
Note Not intended to be called directly by applications


function SysTextIOWriteBuffer(ABuffer:PChar; ACount:LongInt; AUserData:Pointer):LongInt;
Description: Handler for platform TextIOWriteBuffer function
Note Not intended to be called directly by applications


RTL FileSystem functions

System file functions

procedure SystemDoClose(Handle:THandle);
Description: To be documented
Note None documented


procedure SystemDoErase(Name:PChar; NameChangeable:Boolean);
Description: To be documented
Note None documented


procedure SystemDoRename(Name1,Name2:PChar; Name1Changeable,Name2Changeable:Boolean);
Description: To be documented
Note None documented


function SystemDoWrite(Handle:THandle; Address:Pointer; Len:LongInt):LongInt;
Description: To be documented
Note None documented


function SystemDoRead(Handle:THandle; Address:Pointer; Len:LongInt):LongInt;
Description: To be documented
Note None documented


function SystemDoFilePos(Handle:THandle):LongInt;
Description: To be documented
Note None documented


procedure SystemDoSeek(Handle:THandle; Pos:LongInt);
Description: To be documented
Note None documented


function SystemDoSeekEnd(Handle:THandle):LongInt;
Description: To be documented
Note None documented


function SystemDoFileSize(Handle:THandle):LongInt;
Description: To be documented
Note None documented


procedure SystemDoTruncate(Handle:THandle; Pos:LongInt);
Description: To be documented
Note None documented


procedure SystemDoOpen(var F; Name:PFileTextRecChar; Flags:LongInt; NameChangeable:Boolean);
Description: To be documented
Note FileRec and TextRec have both Handle and Mode as the first items so they could use the same routine for opening/creating.

- When (Flags and $00100) The file will be Appended
- When (Flags and $01000) The file will be Truncated/rewritten
- When (Flags and $10000) There is no check for Close (needed for TextFiles)


System directory functions

procedure SystemDoMkDir(const Dir:RawByteString);
Description: To be documented
Note None documented


procedure SystemDoRmDir(const Dir:RawByteString);
Description: To be documented
Note None documented


procedure SystemDoChDir(const Dir:RawByteString);
Description: To be documented
Note None documented


procedure SystemDoGetDir(Drive:Byte; var Dir:RawByteString);
Description: To be documented
Note None documented


Dos disk functions

function DosDiskFree(Drive:Byte):Int64;
Description: To be documented
Note No Volume Support


function DosDiskSize(Drive:Byte):Int64;
Description: To be documented
Note No Volume Support


Dos FindFirst/FindNext functions

function DosFindMatchingFile(var f:SearchRec):Integer;
Description: Internal Only
Note None documented


function DosFindFirst(const Path:PathStr; Attr:Word; var f:SearchRec):Integer;
Description: To be documented
Note FindFirst/FindNext/FindClose - To be compatible with the DOS. FindFirst/FindNext we always allow faReadOnly and faArchive but only allow other attributes if requested. This is done by matching all files and filtering with FindMatchingFile.


function DosFindNext(var f:SearchRec):Integer;
Description: To be documented
Note None documented


procedure DosFindClose(var f:SearchRec);
Description: To be documented
Note None documented


Dos file functions

function DosGetFTime(var f; var Time:LongInt):Integer;
Description: To be documented
Note None documented


function DosSetFTime(var f; Time:LongInt):Integer;
Description: To be documented
Note None documented


function DosGetFAttr(var f; var Attr:Word):Integer;
Description: To be documented
Note None documented


function DosSetFAttr(var f; Attr:Word):Integer;
Description: To be documented
Note None documented


function DosGetShortName(var p:ShortString):Boolean;
Description: To be documented
Note None documented


function DosGetLongName(var p:ShortString):Boolean;
Description: To be documented
Note None documented


SysUtils file functions

function SysUtilsFileOpen(const FileName:RawByteString; Mode:Integer):THandle;
Description: To be documented
Note None documented


function SysUtilsFileCreate(const FileName:RawByteString; ShareMode:Integer):THandle;
Description: To be documented
Note None documented


function SysUtilsDeleteFile(const FileName:RawByteString):Boolean;
Description: To be documented
Note None documented


procedure SysUtilsFileClose(Handle:THandle);
Description: To be documented
Note None documented


function SysUtilsRenameFile(const OldName,NewName:RawByteString):Boolean;
Description: To be documented
Note None documented


function SysUtilsFileSeek(Handle:THandle; Offset,Origin:LongInt):LongInt;
Description: To be documented
Note None documented


function SysUtilsFileTruncate(Handle:THandle;Size:Int64):Boolean;
Description: To be documented
Note None documented


function SysUtilsFileAge(const FileName:RawByteString):LongInt;
Description: To be documented
Note None documented


function SysUtilsFileExists(const FileName:RawByteString):Boolean;
Description: To be documented
Note None documented


function SysUtilsFileGetAttr(const FileName:RawByteString):LongInt;
Description: To be documented
Note None documented


function SysUtilsFileGetDate(Handle:THandle):LongInt;
Description: To be documented
Note None documented


function SysUtilsFileSetAttr(const FileName:RawByteString; Attr:LongInt):LongInt;
Description: To be documented
Note None documented


function SysUtilsFileSetDate(Handle:THandle; Age:LongInt):LongInt;
Description: To be documented
Note None documented


function SysUtilsFileRead(Handle:THandle; out Buffer; Count:LongInt):LongInt;
Description: To be documented
Note None documented


function SysUtilsFileWrite(Handle:THandle; const Buffer; Count:LongInt):LongInt;
Description: To be documented
Note None documented


function SysUtilsFileSeekEx(Handle:THandle; Offset:Int64; Origin:LongInt):Int64;
Description: To be documented
Note None documented


function SysUtilsInternalFindFirst(const Path:RawByteString; Attr:LongInt; out SearchRec:TSearchRec; var Name:RawByteString):LongInt;
Description: To be documented
Note None documented


function SysUtilsInternalFindNext(var SearchRec:TSearchRec; var Name:RawByteString):LongInt;
Description: To be documented
Note None documented


procedure SysUtilsInternalFindClose(var Handle:THandle);
Description: To be documented
Note None documented


SysUtils disk functions

function SysUtilsDiskFree(Drive:Byte):Int64;
Description: To be documented
Note No Volume Support


function SysUtilsDiskSize(Drive:Byte):Int64;
Description: To be documented
Note No Volume Support


function SysUtilsDirectoryExists(const Directory:RawByteString):Boolean;
Description: To be documented
Note None documented


FileSystem logging functions

function FileSysLoggingStart(Logging:PLoggingDevice):LongWord;
Description: Implementation of LoggingDeviceStart API for FileSystem Logging
Note Not intended to be called directly by applications, use LoggingDeviceStart instead.


function FileSysLoggingStop(Logging:PLoggingDevice):LongWord;
Description: Implementation of LoggingDeviceStop API for FileSystem Logging
Note Not intended to be called directly by applications, use LoggingDeviceStop instead.


function FileSysLoggingOutput(Logging:PLoggingDevice; const Data:String):LongWord;
Description: Implementation of LoggingDeviceOutput API for FileSystem Logging
Note Not intended to be called directly by applications, use LoggingDeviceOutput instead.


function FileSysLoggingSetTarget(Logging:PLoggingDevice; const Target:String):LongWord;
Description: Implementation of LoggingDeviceSetTarget API for FileSystem Logging
Note Not intended to be called directly by applications, use LoggingDeviceSetTarget instead.


FileSystem helper functions

function FileSysRedirectInput(Handle:THandle):Boolean;
Description: Redirect standard input to the file specified by Handle
Handle The file handle to redirect input to (or INVALID_HANDLE_VALUE to stop redirection)
Return True if completed successfully or False if an error occurred
Note Redirects the input of the text file Input which also redirects the input of Read, ReadLn and the standard C library.


function FileSysRedirectOutput(Handle:THandle):Boolean;
Description: Redirect standard output to the file specified by Handle
Handle The file handle to redirect output to (or INVALID_HANDLE_VALUE to stop redirection)
Return True if completed successfully or False if an error occurred
Note Redirects the output of the text files Output, ErrOutput, StdOut and StdErr which also redirects the output of Write, WriteLn and the standard C library.


function FileSysStorageGetMediaType(Storage:PStorageDevice):TMediaType;
Description: To be documented
Note None documented


function FileSysStorageGetController(Storage:PStorageDevice):TDiskController;
Description: To be documented
Note None documented


procedure FileSysStorageDeviceAdd(Event:PStorageDeviceEvent);
Description: To be documented
Note None documented


procedure FileSysStorageDeviceInsert(Event:PStorageDeviceEvent);
Description: To be documented
Note None documented


function FileSysStorageDeviceRemove(Storage:PStorageDevice):LongWord;
Description: To be documented
Note None documented


function FileSysStorageDeviceEject(Storage:PStorageDevice):LongWord;
Description: To be documented
Note None documented


function FileSysStorageDeviceEnum(Storage:PStorageDevice; Data:Pointer):LongWord;
Description: To be documented
Note None documented


function FileSysStorageDeviceNotify(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
Description: To be documented
Note None documented


function ComparePartitions(APartition1,APartition2:Pointer):Integer;
Description: Sort partitions in order of start sector
Note None documented


procedure FileSysLog(Level:Integer;const AText:String);
Description: To be documented
Note None documented


procedure FileSysLogInfo(const AText:String); inline;
Description: To be documented
Note None documented


procedure FileSysLogWarn(const AText:String); inline;
Description: To be documented
Note None documented


procedure FileSysLogError(const AText:String); inline;
Description: To be documented
Note None documented


procedure FileSysLogDebug(const AText:String); inline;
Description: To be documented
Note None documented


procedure CacheCheckTimer(Data:Pointer);
Description: To be documented
Note None documented


procedure EntryCheckTimer(Data:Pointer);
Description: To be documented
Note None documented


procedure EntryProcessTimer(Data:Pointer);
Description: To be documented
Note None documented


function MediaTypeToString(AType:TMediaType):String;
Description: To be documented
Note None documented


function FloppyTypeToString(AType:TFloppyType):String;
Description: To be documented
Note None documented


function ImageTypeToString(AType:TImageType):String;
Description: To be documented
Note None documented


function DriveTypeToString(AType:TDriveType):String;
Description: To be documented
Note None documented


function FileSysTypeToString(AType:TFileSysType):String;
Description: To be documented
Note None documented


function StringToFileSysType(const AFileSysType:String):TFileSysType;
Description: To be documented
Note None documented


function PartitionIdToString(AId:Byte):String;
Description: To be documented
Note None documented


function StringToPartitionId(const APartitionId:String):Byte;
Description: To be documented
Note None documented


function CacheModeToString(ACacheMode:TCacheMode):String;
Description: To be documented
Note None documented


function CacheStateToString(ACacheState:TCacheState):String;
Description: To be documented
Note None documented


function CachePageTimeToDateTime(const APageTime:Int64):TDateTime;
Description: To be documented
Note None documented


Return to Unit Reference