mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.4 KiB
145 lines
4.4 KiB
BREAK <Internal system file table format>
|
|
|
|
|
|
;** SF.INC - System File Table
|
|
;
|
|
; AN000 version 4.00 Jan. 1988
|
|
; AN003 PTM 3680 -- make NAME offset the same as before (<=3.30)
|
|
; AN009 PTM 3839 reorder SFT for MS WINDOWS
|
|
|
|
|
|
;** System File Table SuperStructure
|
|
;
|
|
; The system file table entries are allocated in contiguous groups.
|
|
; There may be more than one such groups; the SF "superstructure"
|
|
; tracks the groups.
|
|
|
|
SF STRUC
|
|
SFLink DD ?
|
|
SFCount DW ? ; number of entries
|
|
SFTable DW ? ; beginning of array of the following
|
|
SF ENDS
|
|
|
|
|
|
;** System file table entry
|
|
;
|
|
; These are the structures which are at SFTABLE in the SF structure.
|
|
|
|
sf_entry STRUC
|
|
sf_ref_count DW ? ; number of processes sharing entry
|
|
; if FCB then ref count
|
|
sf_mode DW ? ; mode of access or high bit on if FCB
|
|
sf_attr DB ? ; attribute of file
|
|
sf_flags DW ? ;Bits 8-15
|
|
; Bit 15 = 1 if remote file
|
|
; = 0 if local file or device
|
|
; Bit 14 = 1 if date/time is not to be
|
|
; set from clock at CLOSE. Set by
|
|
; FILETIMES and FCB_CLOSE. Reset by
|
|
; other reseters of the dirty bit
|
|
; (WRITE)
|
|
; Bit 13 = Pipe bit (reserved)
|
|
;
|
|
; Bits 0-7 (old FCB_devid bits)
|
|
; If remote file or local file, bit
|
|
; 6=0 if dirty Device ID number, bits
|
|
; 0-5 if local file.
|
|
; bit 7=0 for local file, bit 7
|
|
; =1 for local I/O device
|
|
; If local I/O device, bit 6=0 if EOF (input)
|
|
; Bit 5=1 if Raw mode
|
|
; Bit 0=1 if console input device
|
|
; Bit 1=1 if console output device
|
|
; Bit 2=1 if null device
|
|
; Bit 3=1 if clock device
|
|
sf_devptr DD ? ; Points to device header
|
|
sf_time DW ? ; Time associated with file
|
|
sf_date DW ? ; Date associated with file
|
|
sf_size DD ? ; Size associated with file
|
|
sf_position DD ? ; LRU count for FCBs
|
|
|
|
; SHARING INFO
|
|
sf_chain DD ? ; link to next SF
|
|
sf_PID DW ?
|
|
sf_NTHandle DD ? ; NT File Handle
|
|
sf_entry ENDS
|
|
|
|
sf_OpenAge EQU WORD PTR sf_position+2
|
|
sf_LRU EQU WORD PTR sf_position
|
|
|
|
sf_default_number EQU 5h
|
|
|
|
;
|
|
; Note that we need to mark an SFT as being busy for OPEN/CREATE. This is
|
|
; because an INT 24 may prevent us from 'freeing' it. We mark this as such
|
|
; by placing a -1 in the ref_count field.
|
|
;
|
|
|
|
sf_busy EQU -1
|
|
|
|
|
|
; Flag word masks
|
|
sf_isfcb EQU 1000000000000000B
|
|
sf_isnet EQU 1000000000000000B
|
|
sf_close_nodate EQU 0100000000000000B
|
|
sf_pipe EQU 0010000000000000B
|
|
sf_no_inherit EQU 0001000000000000B
|
|
sf_net_spool EQU 0000100000000000B
|
|
sf_scs_console EQU 0000010000000000B ; special for NT DOSEM
|
|
sf_nt_seek EQU 0000001000000000B ; special for NT DOSEM
|
|
sf_nt_pipe_in EQU 0000000100000000B ; for stdin redirection
|
|
; true if seek is needed
|
|
; with next read/write operation
|
|
|
|
devid_file_clean EQU 40h ; true if file and not written
|
|
devid_file_mask_drive EQU 3Fh ; mask for drive number
|
|
|
|
devid_device EQU 80h ; true if a device
|
|
devid_device_EOF EQU 40h ; true if end of file reached
|
|
devid_device_raw EQU 20h ; true if in raw mode
|
|
devid_device_special EQU 10h ; true if special device
|
|
devid_device_clock EQU 08h ; true if clock device
|
|
devid_device_null EQU 04h ; true if null device
|
|
devid_device_con_out EQU 02h ; true if console output
|
|
devid_device_con_in EQU 01h ; true if consle input
|
|
|
|
;
|
|
; structure of devid field as returned by IOCTL is:
|
|
;
|
|
; BIT 7 6 5 4 3 2 1 0
|
|
; |---|---|---|---|---|---|---|---|
|
|
; | I | E | R | S | I | I | I | I |
|
|
; | S | O | A | P | S | S | S | S |
|
|
; | D | F | W | E | C | N | C | C |
|
|
; | E | | | C | L | U | O | I |
|
|
; | V | | | L | K | L | T | N |
|
|
; |---|---|---|---|---|---|---|---|
|
|
; ISDEV = 1 if this channel is a device
|
|
; = 0 if this channel is a disk file
|
|
;
|
|
; If ISDEV = 1
|
|
;
|
|
; EOF = 0 if End Of File on input
|
|
; RAW = 1 if this device is in Raw mode
|
|
; = 0 if this device is cooked
|
|
; ISCLK = 1 if this device is the clock device
|
|
; ISNUL = 1 if this device is the null device
|
|
; ISCOT = 1 if this device is the console output
|
|
; ISCIN = 1 if this device is the console input
|
|
;
|
|
; If ISDEV = 0
|
|
; EOF = 0 if channel has been written
|
|
; Bits 0-5 are the block device number for
|
|
; the channel (0 = A, 1 = B, ...)
|
|
;
|
|
devid_ISDEV EQU 80h
|
|
devid_EOF EQU 40h
|
|
devid_RAW EQU 20h
|
|
devid_SPECIAL EQU 10H
|
|
devid_ISCLK EQU 08h
|
|
devid_ISNUL EQU 04h
|
|
devid_ISCOT EQU 02h
|
|
devid_ISCIN EQU 01h
|
|
|
|
devid_block_dev EQU 1Fh ; mask for block device number
|
|
|