System File Table (Undocumented)


DOS 2.x System File Table Format


     Offset Size		Description

	00   dword	pointer to next system file table; offset of ffffh
			indicates last table in chain
	04   word	number of file descriptors in table
	06  nbytes	file descriptor table of the format (40 bytes each):

     Offset Size		Description

	00   byte	count of handles referring to this file or
			zero if file is no longer open
	01   byte	open mode
	02   byte	file attribute
	03   byte	drive (1=A, 2=B:, ..., 0=char device)
	04 11bytes	filename in FCB format
	0F   word	unknown
	11   word	unknown
	13   dword	file size
	17   word	file date
	19   word	file time
	1B   byte	device attribute
	1C   word	starting cluster of file (block device)
	     dword	pointer to device driver (if char device)
	1E   word	if block device, relative cluster within file of
			the last cluster read; zero if file has never
			been read or written
	20   word	absolute cluster number of current cluster
	22   word	unknown
	24   dword	current file position


DOS 3.x System File Table and FCB Table Format


     Offset Size		Description

	00   dword	pointer to next system file table; offset of ffffh
			indicates last table in chain
	04   word	number of file descriptors in table
	06  nbytes	file descriptor table of the format (53 bytes each):

     Offset Size		Description

	00   word  	count of handles referring to this file or
			zero if file is no longer open
	02   word	open mode, bit 15 set if file id opened via FCB
	04   byte	file attribute
	05   word	device info word
	07   dword	if char device pointer to device driver header
			if block device pointer to DOS Device Control Block
	0B   word	starting cluster of file
	0D   word	file time
	0F   word	file date
	11   dword	file size
	15   dword	current file position
	19   word	if block device, relative cluster within file of
			the last cluster read
	1B   word	absolute cluster number of last cluster read
			zero if file has never been read or written
	1D   word	sector number containing the directory entry
	1F   byte	number of dir entry within sector
	20 11bytes	filename in FCB format
	2B   dword	SHARE pointer to previous SFT sharing same file
	2F   word	SHARE number of network machine opening file
	31   word	PSP segment of file owner
	33   word	offset within SHARE code segment of sharing record
			0000h = none


DOS 4.0+ System File Table and FCB Table


     Offset Size		Description

	00   dword	pointer to next system file table; offset of ffffh
			indicates last table in chain
	04   word	number of file descriptors in table
	06  nbytes	file descriptor table of the format (59 bytes each):

     Offset Size		Description

	00   word   	count of handles referring to this file or
			zero if file is no longer open
	02   word	open mode, bit 15 set if file id opened via FCB
	04   byte	file attribute
	05   word	device info word
	07   dword	if char device pointer to device driver header
			if block device pointer to DOS Device Control Block
			or REDIR data
	0B   word	starting cluster of file
	0D   word	file time
	0F   word	file date
	11   dword	file size
	15   dword	current file position
	19   dword	if network redirector, pointer to REDIRIFS record
	     word	if local block dev, relative cluster within file
			of the last cluster read
	1B   dword	if local, sector number of directory entry
	1F   byte	if local, number of directory entry within sector
	20  11bytes	filename in FCB format
	2B   dword	SHARE pointer to previous SFT sharing same file
	2F   word	SHARE number of network machine opening file
	31   word	PSP segment of file owner
	33   word	offset within SHARE code seg of sharing record
			0000h = none
	35   word	absolute cluster number of last cluster read
			zero if file has never been read or written
	37   dword	pointer to file IFS driver, NULL if native DOS


	- these structures are allocated by DOS during the scanning of the
	  CONFIG.SYS file
	- INT 21,67 can be used to allow an application to have more than
	  20 file handles;  the total number of handles is limited still to
	  the value of FILES=n in CONFIG.SYS
	- the structure of these fields is undocumented;  I do not recommend
	  relying on any of this information, instead use it as an aid in
	  debugging
	- see Bibliography references to Bernd Schemmer and "Data Structures
	  Used in IBM PC Compatibles and the PS/2".
	- see	INT 21,52