home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-06-05 | 275.3 KB | 7,355 lines |
- Interrupt List, part 5 of 11
- This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
- --------D-2145-------------------------------
- INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
- AH = 45h
- BX = file handle
- Return: CF clear if successful
- AX = new handle
- CF set on error
- AX = error code (04h,06h) (see #0770 at AH=59h)
- Notes: moving file pointer for either handle will also move it for the other,
- because both will refer to the same system file table
- for DOS versions prior to 3.3, file writes may be forced to disk by
- duplicating the file handle and closing the duplicate
- SeeAlso: AH=3Dh,AH=46h
- --------D-2146-------------------------------
- INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
- AH = 46h
- BX = file handle
- CX = file handle to become duplicate of first handle
- Return: CF clear if successful
- CF set on error
- AX = error code (04h,06h) (see #0770 at AH=59h)
- Notes: closes file with handle CX if it is still open
- DOS 3.30 hangs if BX=CX on entry
- moving file pointer for either handle will also move it for the other,
- because both will refer to the same system file table
- SeeAlso: AH=3Dh,AH=45h
- --------D-2147-------------------------------
- INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
- AH = 47h
- DL = drive number (00h = default, 01h = A:, etc)
- DS:SI -> 64-byte buffer for ASCIZ pathname
- Return: CF clear if successful
- AX = 0100h (undocumented)
- CF set on error
- AX = error code (0Fh) (see #0770 at AH=59h)
- Notes: the returned path does not include a drive or the initial backslash
- many Microsoft products for Windows rely on AX being 0100h on success
- under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
- SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h
- --------D-2148-------------------------------
- INT 21 - DOS 2+ - ALLOCATE MEMORY
- AH = 48h
- BX = number of paragraphs to allocate
- Return: CF clear if successful
- AX = segment of allocated block
- CF set on error
- AX = error code (07h,08h) (see #0770 at AH=59h)
- BX = size of largest available block
- Notes: DOS 2.1-6.0 coalesces free blocks while scanning for a block to
- allocate
- .COM programs are initially allocated the largest available memory
- block, and should free some memory with AH=49h before attempting any
- allocations
- under the FlashTek X-32 DOS extender, EBX contains a protected-mode
- near pointer to the allocated block on a successful return
- SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
- --------D-2149-------------------------------
- INT 21 - DOS 2+ - FREE MEMORY
- AH = 49h
- ES = segment of block to free
- Return: CF clear if successful
- CF set on error
- AX = error code (07h,09h) (see #0770 at AH=59h)
- Notes: apparently never returns an error 07h, despite official docs; DOS 2.1+
- code contains only an error 09h exit
- DOS 2.1-6.0 does not coalesce adjacent free blocks when a block is
- freed, only when a block is allocated or resized
- the code for this function is identical in DOS 2.1-6.0 except for
- calls to start/end a critical section in DOS 3+
- SeeAlso: AH=48h,AH=4Ah
- --------D-214A-------------------------------
- INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
- AH = 4Ah
- BX = new size in paragraphs
- ES = segment of block to resize
- Return: CF clear if successful
- CF set on error
- AX = error code (07h,08h,09h) (see #0770 at AH=59h)
- BX = maximum paragraphs available for specified memory block
- Notes: under DOS 2.1-6.0, if there is insufficient memory to expand the block
- as much as requested, the block will be made as large as possible
- DOS 2.1-6.0 coalesces any free blocks immediately following the block
- to be resized
- SeeAlso: AH=48h,AH=49h,AH=83h
- --------v-214A--BX00B6-----------------------
- INT 21 - VIRUS???
- AH = 4Ah
- BX = 00B6h
- ES = CX
- Return: ???
- Note: this call is intercepted by the Search&Destroy SDRes v27.03 bundled
- with Novell DOS 7, and is presumably some virus's installation check
- SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=FFFFh,AH=D2h"VIRUS"
- --------v-214A--BXFFFF-----------------------
- INT 21 - VIRUS???
- AH = 4Ah
- BX = FFFFh
- CX = 0568h
- SI = 0129h
- DI = 0000h
- ES = BP
- Return: ???
- Note: this call is intercepted by the Search&Destroy SDRes v27.03 bundled
- with Novell DOS 7, and is presumably some virus's installation check
- SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=00B6h
- --------D-214B-------------------------------
- INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
- AH = 4Bh
- AL = type of load
- 00h load and execute
- 01h load but do not execute
- 03h load overlay
- 04h load and execute in background (European MS-DOS 4.0 only)
- "Exec & Go" (see also AH=80h)
- DS:DX -> ASCIZ program name (must include extension)
- ES:BX -> parameter block (see #0687)
- CX = mode (subfunction 04h only)
- 0000h child placed in zombie mode after termination
- 0001h child's return code discarded on termination
- Return: CF clear if successful
- BX,DX destroyed
- if subfunction 01h, process ID set to new program's PSP; get with
- INT 21/AH=62h
- CF set on error
- AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see #0770 at AH=59h)
- Notes: DOS 2.x destroys all registers, including SS:SP
- under ROM-based DOS, if no disk path characters (colons or slashes)
- are included in the program name, the name is searched for in the
- ROM module headers (see #0692) before searching on disk
- for functions 00h and 01h, the calling process must ensure that there
- is enough unallocated memory available; if necessary, by releasing
- memory with AH=49h or AH=4Ah
- for function 01h, the AX value to be passed to the child program is put
- on top of the child's stack
- for function 03h, DOS assumes that the overlay is being loaded into
- memory allocated by the caller
- function 01h was undocumented prior to the release of DOS 5.0
- some versions (such as DR-DOS 6.0) check the parameters and parameter
- block and return an error if an invalid value (such as an offset of
- FFFFh) is found
- background programs under European MS-DOS 4.0 must use the new
- executable format
- .COM-format executables begin running with the following register
- values:
- AL = 00h if first FCB has valid drive letter, FFh if not
- AH = 00h if second FCB has valid drive letter, FFh if not
- CS,DS,ES,SS = PSP segment
- SP = offset of last word available in first 64K segment
- (note: AX is always 0000h under DESQview)
- old-format executables begin running with the following register
- values:
- AL = 00h if first FCB has valid drive letter, FFh if not
- AH = 00h if second FCB has valid drive letter, FFh if not
- DS,ES = PSP segment
- SS:SP as defined in .EXE header
- (note: AX is always 0000h under DESQview)
- new executables begin running with the following register values
- AX = environment segment
- BX = offset of command tail in environment segment
- CX = size of automatic data segment (0000h = 64K)
- ES,BP = 0000h
- DS = automatic data segment
- SS:SP = initial stack
- the command tail corresponds to an old executable's PSP:0081h and
- following, except that the 0Dh is turned into a NUL (00h); new
- format executables have no PSP
- under the FlashTek X-32 DOS extender, only function 00h is supported
- and the pointers are passed in DS:EDX and ES:EBX
- DR-DOS 6 always loads .EXE-format programs with no fixups and
- .COM-format programs starting with 9Ch 55h (PUSHF/PUSH BP) above the
- 64K mark to avoid the EXEPACK bug, by extending the memory block
- containing the program's environment; this code is disabled if the
- name of the parent program as stored in the MCB is 'WIN'.
- BUGS: DOS 2.00 assumes that DS points at the current program's PSP
- Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
- file contains additional data after the actual overlay
- SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E,INT 60/DI=0604h
-
- Format of EXEC parameter block for AL=00h,01h,04h:
- Offset Size Description (Table 0687)
- 00h WORD segment of environment to copy for child process (copy caller's
- environment if 0000h)
- 02h DWORD pointer to command tail to be copied into child's PSP
- 06h DWORD pointer to first FCB to be copied into child's PSP
- 0Ah DWORD pointer to second FCB to be copied into child's PSP
- 0Eh DWORD (AL=01h) will hold subprogram's initial SS:SP on return
- 12h DWORD (AL=01h) will hold entry point (CS:IP) on return
-
- Format of EXEC parameter block for AL=03h:
- Offset Size Description (Table 0688)
- 00h WORD segment at which to load overlay
- 02h WORD relocation factor to apply to overlay if in .EXE format
-
- Format of EXEC parameter block for FlashTek X-32:
- Offset Size Description (Table 0689)
- 00h PWORD 48-bit far pointer to environment string
- 06h PWORD 48-bit far pointer to command tail string
-
- (Table 0690)
- Values for the executable types understood by various environments:
- MZ old-style DOS executable
- NE Windows or OS/2 1.x segmented ("new") executable
- LE Windows virtual device driver (VxD) linear executable
- LX variant of LE used in OS/2 2.x
- W3 Windows WIN386.EXE file; a collection of LE files
- PE Win32 (Windows NT and Win32s) portable executable based on Unix COFF
-
- Format of .EXE file header:
- Offset Size Description (Table 0691)
- 00h 2 BYTEs .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
- 02h WORD number of bytes in last 512-byte page of executable
- 04h WORD total number of 512-byte pages in executable (includes any
- partial last page)
- 06h WORD number of relocation entries
- 08h WORD header size in paragraphs
- 0Ah WORD minimum paragraphs of memory to allocation in addition to
- executable's size
- 0Ch WORD maximum paragraphs to allocate in addition to executable's size
- 0Eh WORD initial SS relative to start of executable
- 10h WORD initial SP
- 12h WORD checksum (one's complement of sum of all words in executable)
- 14h DWORD initial CS:IP relative to start of executable
- 18h WORD offset within header of relocation table
- 40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
- 1Ah WORD overlay number (normally 0000h = main program)
- ---new executable---
- 1Ch 4 BYTEs ???
- 20h WORD behavior bits
- 22h 26 BYTEs reserved for additional behavior info
- 3Ch DWORD offset of new executable (NE,LE,etc) header within disk file,
- or 00000000h if plain MZ executable
- ---Borland TLINK---
- 1Ch 2 BYTEs ??? (apparently always 01h 00h)
- 1Eh BYTE signature FBh
- 1Fh BYTE TLINK version (major in high nybble, minor in low nybble)
- 20h 2 BYTEs ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
- ---ARJ self-extracting archive---
- 1Ch 4 BYTEs signature "RJSX" (older versions, new signature is "aRJsfX" in
- the first 1000 bytes of the file)
- ---LZEXE 0.90 compressed executable---
- 1Ch 4 BYTEs signature "LZ09"
- ---LZEXE 0.91 compressed executable---
- 1Ch 4 BYTEs signature "LZ91"
- ---PKLITE compressed executable---
- 1Ch BYTE minor version number
- 1Dh BYTE bits 0-3: major version
- bit 4: extra compression
- bit 5: huge (multi-segment) file
- 1Eh 6 BYTEs signature "PKLITE" (followed by copyright message)
- ---LHarc 1.x self-extracting archive---
- 1Ch 4 BYTEs unused???
- 20h 3 BYTEs jump to start of extraction code
- 23h 2 BYTEs ???
- 25h 12 BYTEs signature "LHarc's SFX "
- ---LHA 2.x self-extracting archive---
- 1Ch 8 BYTEs ???
- 24h 10 BYTEs signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
- ---TopSpeed C 3.0 CRUNCH compressed file---
- 1Ch DWORD 018A0001h
- 20h WORD 1565h
- ---PKARCK 3.5 self-extracting archive---
- 1Ch DWORD 00020001h
- 20h WORD 0700h
- ---BSA (Soviet archiver) self-extracting archive---
- 1Ch WORD 000Fh
- 1Eh BYTE A7h
- ---LARC self-extracting archive---
- 1Ch 4 BYTEs ???
- 20h 11 BYTEs "SFX by LARC "
- ---LH self-extracting archive---
- 1Ch 8 BYTEs ???
- 24h 8 BYTEs "LH's SFX "
- ---other linkers---
- 1Ch var optional information
- ---
- N N DWORDs relocation items
- Notes: if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
- versions of the MS linker set it that way
- if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
- program is loaded as high in memory as possible
- the maximum allocation is set to FFFFh by default
-
- Format of ROM Module Header:
- Offset Size Description (Table 0692)
- 00h 2 BYTEs ROM signature 55h, AAh
- 02h BYTE size of ROM in 512-byte blocks
- 03h 3 BYTEs POST initialization entry point (near JMP instruction)
- 06h ROM Program Name List [array]
- Offset Size Description
- 00h BYTE length of ROM program's name (00h if end of name list)
- 01h N BYTEs program name
- N+1 3 BYTEs program entry point (near JMP instruction)
-
- Format of new executable header:
- Offset Size Description (Table 0693)
- 00h 2 BYTEs "NE" (4Eh 45h) signature
- 02h 2 BYTEs linker version (major, then minor)
- 04h WORD offset from start of this header to entry table (see #0700)
- 06h WORD length of entry table in bytes
- 08h DWORD file load CRC (0 in Borland's TPW)
- 0Ch BYTE program flags (see #0694)
- 0Dh BYTE application flags (see #0695)
- 0Eh WORD auto data segment index
- 10h WORD initial local heap size
- 12h WORD initial stack size (added to data seg, 0000h if SS <> DS)
- 14h DWORD program entry point (CS:IP), "CS" is index into segment table
- 18h DWORD initial stack pointer (SS:SP), "SS" is segment index
- if SS=automatic data segment and SP=0000h, the stack pointer is
- set to the top of the automatic data segment, just below the
- local heap
- 1Ch WORD segment count
- 1Eh WORD module reference count
- 20h WORD length of nonresident names table in bytes
- 22h WORD offset from start of this header to segment table (see #0698)
- 24h WORD offset from start of this header to resource table
- 26h WORD offset from start of this header to resident names table
- 28h WORD offset from start of this header to module reference table
- 2Ah WORD offset from start of this header to imported names table
- (array of counted strings, terminated with a string of length
- 00h)
- 2Ch DWORD offset from start of file to nonresident names table
- 30h WORD count of moveable entry point listed in entry table
- 32h WORD file alignment size shift count
- 0 is equivalent to 9 (default 512-byte pages)
- 34h WORD number of resource table entries
- 36h BYTE target operating system
- 00h unknown
- 01h OS/2
- 02h Windows
- 03h European MS-DOS 4.x
- 04h Windows 386
- 05h BOSS (Borland Operating System Services)
- 37h BYTE other EXE flags (see #0696)
- 38h WORD offset to return thunks or start of gangload area
- 3Ah WORD offset to segment reference thunks or length of gangload area
- 3Ch WORD minimum code swap area size
- 3Eh 2 BYTEs expected Windows version (minor version first)
- Note: this header is documented in detail in the Windows 3.1 SDK Programmer's
- Reference, Vol 4.
-
- Bitfields for new executable program flags:
- Bit(s) Description (Table 0694)
- 0-1 DGROUP type
- 0 = none
- 1 = single shared
- 2 = multiple (unshared)
- 3 = (null)
- 2 global initialization
- 3 protected mode only
- 4 8086 instructions
- 5 80286 instructions
- 6 80386 instructions
- 7 80x87 instructions
-
- Bitfields for new executable application flags:
- Bit(s) Description (Table 0695)
- 0-2 application type
- 001 full screen (not aware of Windows/P.M. API)
- 010 compatible with Windows/P.M. API
- 011 uses Windows/P.M. API
- 3 is a Family Application (OS/2)
- 5 0=executable, 1=errors in image
- 6 non-conforming program (valid stack is not maintained)
- 7 DLL or driver rather than application
- (SS:SP info invalid, CS:IP points at FAR init routine called with
- AX=module handle which returns AX=0000h on failure, AX nonzero on
- successful initialization)
-
- Bitfields for other new .EXE flags:
- Bit(s) Description (Table 0696)
- 0 supports long filenames
- 1 2.X protected mode
- 2 2.X proportional font
- 3 gangload area
-
- Format of Codeview trailer (at end of executable):
- Offset Size Description (Table 0697)
- 00h WORD signature 4E42h ('NB')
- 02h WORD Microsoft debug info version number
- 04h DWORD Codeview header offset
-
- Format of new executable segment table record:
- Offset Size Description (Table 0698)
- 00h WORD offset in file (shift left by alignment shift to get byte offs)
- 02h WORD length of image in file (0000h = 64K)
- 04h WORD segment attributes (see #0699)
- 06h WORD number of bytes to allocate for segment (0000h = 64K)
- Note: the first segment table entry is entry number 1
-
- Bitfields for segment attributes:
- Bit(s) Description (Table 0699)
- 0 data segment rather than code segment
- 1 unused???
- 2 real mode
- 3 iterated
- 4 movable
- 5 sharable
- 6 preloaded rather than demand-loaded
- 7 execute-only (code) or read-only (data)
- 8 relocations (directly following code for this segment)
- 9 debug info present
- 10,11 80286 DPL bits
- 12 discardable
- 13-15 discard priority
-
- Format of new executable entry table item (list):
- Offset Size Description (Table 0700)
- 00h BYTE number of entry points (00h if end of entry table list)
- 01h BYTE segment number (00h if end of entry table list)
- 02h 3N BYTEs entry records
- Offset Size Description
- 00h BYTE flags
- bit 0: exported
- bit 1: single data
- bits 2-7: unused???
- 01h WORD offset within segment
-
- Format of new executable relocation data (immediately follows segment image):
- Offset Size Description (Table 0701)
- 00h WORD number of relocation items
- 02h 8N BYTEs relocation items
- Offset Size Description
- 00h BYTE relocation type
- 00h LOBYTE
- 02h BASE
- 03h PTR
- 05h OFFS
- 0Bh PTR48
- 0Dh OFFS32
- 01h BYTE flags
- bit 2: additive
- 02h WORD offset within segment
- 04h WORD target address segment
- 06h WORD target address offset
-
- Format of new executable resource data:
- Offset Size Description (Table 0702)
- 00h WORD alignment shift count for resource data
- 02h N RECORDs resources
- Format of resource record:
- Offset Size Description
- 00h WORD type ID
- 0000h if end of resource records
- >= 8000h if integer type
- else offset from start of resource table to type string
- 02h WORD number of resources of this type
- 04h DWORD reserved for runtime use
- 08h N Resources (see #0703)
- Note: resource type and name strings are stored immediately following the
- resource table, and are not null-terminated
-
- Format of new executable resource entry:
- Offset Size Description (Table 0703)
- 00h WORD offset in alignment units from start of file to contents of
- the resource data
- 02h WORD length of resource image in bytes
- 04h WORD flags
- bit 4: moveable
- bit 5: shareable
- bit 6: preloaded
- 06h WORD resource ID
- >= 8000h if integer resource
- else offset from start of resource table to resource string
- 08h DWORD reserved for runtime use
- Notes: resource type and name strings are stored immediately following the
- resource table, and are not null-terminated
- strings are counted strings, with a string of length 0 indicating the
- end of the resource table
-
- Format of new executable module reference table [one bundle of entries]:
- Offset Size Description (Table 0704)
- 00h BYTE number of records in this bundle (00h if end of table)
- 01h BYTE segment indicator
- 00h unused
- FFh movable segment, segment number is in entry
- else segment number of fixed segment
- 02h N RECORDs
- Format of segment record
- Offset Size Description
- 00h BYTE flags
- bit 0: entry is exported
- bit 1: entry uses global (shared) data
- bits 7-3: number of parameter words
- ---fixed segment---
- 01h WORD offset
- ---moveable segment---
- 01h 2 BYTEs INT 3F instruction (CDh 3Fh)
- 03h BYTE segment number
- 05h WORD offset
- Note: table entries are numbered starting from 1
-
- Format of new executable resident/nonresident name table entry:
- Offset Size Description (Table 0705)
- 00h BYTE length of string (00h if end of table)
- 01h N BYTEs ASCII text of string
- N+1 WORD ordinal number (index into entry table)
- Notes: the first string in the resident name table is the module name; the
- first entry in the nonresident name table is the module description
- the strings are case-sensitive; if the executable was linked with
- /IGNORECASE, all strings are in uppercase
-
- Format of Linear Executable (enhanced mode executable) header:
- Offset Size Description (Table 0706)
- 00h 2 BYTEs "LE" (4Ch 45h) signature (Windows)
- "LX" (4Ch 58h) signature (OS/2)
- 02h BYTE byte order (00h = little-endian, nonzero = big-endian)
- 03h BYTE word order (00h = little-endian, nonzero = big-endian)
- 04h DWORD executable format level
- 08h WORD CPU type (see also INT 15/AH=C9h)
- 01h Intel 80286 or upwardly compatible
- 02h Intel 80386 or upwardly compatible
- 03h Intel 80486 or upwardly compatible
- 04h Intel Pentium (80586) or upwardly compatible
- 20h Intel i860 (N10) or compatible
- 21h Intel "N11" or compatible
- 40h MIPS Mark I (R2000, R3000) or compatible
- 41h MIPS Mark II (R6000) or compatible
- 42h MIPS Mark III (R4000) or compatible
- 0Ah WORD target operating system
- 01h OS/2
- 02h Windows
- 03h European DOS 4.0
- 04h Windows 386
- 0Ch DWORD module version
- 10h DWORD module type (see #0707)
- 14h DWORD number of memory pages
- 18h Initial CS:EIP
- DWORD object number
- DWORD offset
- 20h Initial SS:ESP
- DWORD object number
- DWORD offset
- 28h DWORD memory page size
- 2Ch DWORD (Windows LE) bytes on last page
- (OS/2 LX) page offset shift count
- 30h DWORD fixup section size
- 34h DWORD fixup section checksum
- 38h DWORD loader section size
- 3Ch DWORD loader section checksum
- 40h DWORD offset of object table (see #0708)
- 44h DWORD object table entries
- 48h DWORD object page map table offset
- 4Ch DWORD object iterate data map offset
- 50h DWORD resource table offset
- 54h DWORD resource table entries
- 58h DWORD resident names table offset
- 5Ch DWORD entry table offset
- 60h DWORD module directives table offset
- 64h DWORD Module Directives entries
- 68h DWORD Fixup page table offset
- 6Ch DWORD Fixup record table offset
- 70h DWORD imported modules name table offset
- 74h DWORD imported modules count
- 78h DWORD imported procedures name table offset
- 7Ch DWORD per-page checksum table offset
- 80h DWORD data pages offset
- 84h DWORD preload page count
- 88h DWORD non-resident names table offset
- 8Ch DWORD non-resident names table length
- 90h DWORD non-resident names checksum
- 94h DWORD automatic data object
- 98h DWORD debug information offset
- 9Ch DWORD debug information length
- A0h DWORD preload instance pages number
- A4h DWORD demand instance pages number
- A8h DWORD extra heap allocation
- ACh 20 BYTEs reserved
- C0h WORD device ID (MS-Windows VxD only)
- C2h WORD DDK version (MS-Windows VxD only)
- Note: used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
-
- Bitfields for Linear Executable module type:
- Bit(s) Description (Table 0707)
- 2 initialization (only for DLLs) 0 = global, 1 = per-process
- 4 no internal fixups in executable image
- 5 no external fixups in executable image
- 8-10 API compatibility
- 0 = unknown
- 1 = incompatible with PM windowing \
- 2 = compatible with PM windowing > (only for
- 3 = uses PM windowing API / programs)
- 13 module not loadable (only for programs)
- 15-17 module type
- 000 program
- 001 library (DLL)
- 011 protected memory library module
- 100 physical device driver
- 110 virtual device driver
- 30 per-process library termination
- (requires valid CS:EIP, can't be set for .EXE)
-
- Format of object table entry:
- Offset Size Description (Table 0708)
- 00h DWORD virtual size in bytes
- 04h DWORD relocation base address
- 08h DWORD object flags (see #0709)
- 0Ch DWORD page map index
- 10h DWORD page map entries
- 14h 4 BYTEs reserved??? (apparently always zeros)
-
- Bitfields for object flags:
- Bit(s) Description (Table 0709)
- 0 readable
- 1 writable
- 2 executable
- 3 resource
- 4 discardable
- 5 shared
- 6 preloaded
- 7 invalid
- 8-9 type
- 00 normal
- 01 zero-filled
- 10 resident
- 11 resident and contiguous
- 10 resident and long-lockable
- 11 reserved
- 12 16:16 alias required
- 13 "BIG" (Huge: 32-bit)
- 14 conforming
- 15 "OBJECT_I/O_PRIVILEGE_LEVEL"
- 16-31 reserved
-
- Format of object page map table entry:
- Offset Size Description (Table 0710)
- 00h BYTE ??? (usually 00h)
- 01h WORD (big-endian) index to fixup table
- 0000h if no relocation info
- 03h BYTE type (00h hard copy in file, 03h some relocation needed)
-
- Format of resident names table entry:
- Offset Size Description (Table 0711)
- 00h BYTE length of name
- 01h N BYTEs name
- N+1 3 BYTEs ???
-
- Format of LE linear executable entry table:
- Offset Size Description (Table 0712)
- 00h BYTE number of entries in table
- 01h 10 BYTEs per entry
- Offset Size Description
- 00h BYTE bit flags
- bit 0: non-empty bundle
- bit 1: 32-bit entry
- 01h WORD object number
- 03h BYTE entry type flags
- bit 0: exported
- bit 1: uses single data rather than instance
- bit 2: reserved
- bits 3-7: number of stack parameters
- 04h DWORD offset of entry point
- 08h 2 BYTEs ???
- Note: empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
- and do not contain the remaining nine bytes
-
- Format of LX linear executable entry table [array]:
- Offset Size Description (Table 0713)
- 00h BYTE number of bundles following (00h = end of entry table)
- 01h BYTE bundle type
- 00h empty
- 01h 16-bit entry
- 02h 286 callgate entry
- 03h 32-bit entry
- 04h forwarder entry
- bit 7 set if additional parameter typing information is present
- ---bundle type 00h---
- no additional fields
- ---bundle type 01h---
- 02h WORD object number
- 04h BYTE entry flags
- bit 0: exported
- bits 7-3: number of stack parameters
- 05h WORD offset of entry point in object (shifted by page size shift)
- ---bundle type 02h---
- 02h WORD object number
- 04h BYTE entry flags
- bit 0: exported
- bits 7-3: number of stack parameters
- 05h WORD offset of entry point in object
- 07h WORD reserved for callgate selector (used by loader)
- ---bundle type 03h---
- 02h WORD object number
- 04h BYTE entry flags
- bit 0: exported
- bits 7-3: number of stack parameters
- 05h DWORD offset of entry point in object
- ---bundle type 04h---
- 02h WORD reserved
- 04h BYTE forwarder flags
- bit 0: import by ordinal
- bits 7-1 reserved
- 05h WORD module ordinal
- (forwarder's index into Import Module Name table)
- 07h DWORD procedure name offset or import ordinal number
- Note: all fields after the first two bytes are repeated N times
-
- Bitfields for linear executable fixup type:
- Bit(s) Description (Table 0714)
- 7 ordinal is BYTE rather than WORD
- 6 16-rather than 8-object number/module ordinal
- 5 addition with DWORD rather than WORD
- 4 relocation info has size with new two bytes at end
- 3 reserved (0)
- 2 set if add to destination, clear to replace destination
- 1-0 type
- 00 internal fixup
- 01 external fixup, imported by ordinal
- 10 external fixup, imported by name
- 11 internal fixup via entry table
-
- Format of linear executable fixup record:
- Offset Size Description (Table 0715)
- 00h BYTE type
- bits 7-4: modifier (0001 single, 0011 multiple)
- bits 3-0: type
- 0000 byte offset
- 0010 word segment
- 0011 16-bit far pointer (DWORD)
- 0101 16-bit offset
- 0110 32-bit far pointer (PWORD)
- 0111 32-bit offset
- 1000 near call or jump, WORD/DWORD based on seg attrib
- 01h BYTE linear executable fixup type (see #0714)
- ---if single type---
- 02h WORD offset within page
- 04h relocation information
- ---internal fixup---
- BYTE object number
- ---external,ordinal---
- BYTE one-based module number in Import Module table
- BYTE/WORD ordinal number
- WORD/DWORD value to add (only present if modifier bit 4 set)
- ---external,name---
- BYTE one-based module number in Import Module table
- WORD offset in Import Procedure names
- WORD/DWORD value to add (only present if modifier bit 4 set)
- ---if multiple type---
- 02h BYTE number of items
- 03h var relocation info as for "single" type (see above)
- N WORDs offsets of items to relocate
-
- Format of old Phar Lap .EXP file header:
- Offset Size Description (Table 0716)
- 00h 2 BYTEs "MP" (4Dh 50h) signature
- 02h WORD remainder of image size / page size (page size = 512h)
- 04h WORD size of image in pages
- 06h WORD number of relocation items
- 08h WORD header size in paragraphs
- 0Ah WORD minimum number of extra 4K pages to be allocated at the end
- of program, when it is loaded
- 0Ch WORD maximum number of extra 4K pages to be allocated at the end
- of program, when it is loaded
- 0Eh DWORD initial ESP
- 12h WORD word checksum of file
- 14h DWORD initial EIP
- 18h WORD offset of first relocation item
- 1Ah WORD overlay number
- 1Ch WORD ??? (wants to be 1)
-
- Format of new Phar Lap .EXP file header:
- Offset Size Description (Table 0717)
- 00h 2 BYTEs signature ("P2" for 286 .EXP executable, "P3" for 386 .EXP)
- 02h WORD level (01h flat-model file, 02h multisegmented file)
- 04h WORD header size
- 06h DWORD file size in bytes
- 0Ah WORD checksum
- 0Ch DWORD offset of run-time parameters within file
- 10h DWORD size of run-time parameters in bytes
- 14h DWORD offset of relocation table within file
- 18h DWORD size of relocation table in bytes
- 1Ch DWORD offset of segment information table within file
- 20h DWORD size of segment information table in bytes
- 24h WORD size of segment information table entry in bytes
- 26h DWORD offset of load image within file
- 2Ah DWORD size of load image on disk
- 2Eh DWORD offset of symbol table within file
- 32h DWORD size of symbol table in bytes
- 36h DWORD offset of GDT within load image
- 3Ah DWORD size of GDT in bytes
- 3Eh DWORD offset of LDT within load image
- 42h DWORD size of LDT in bytes
- 46h DWORD offset of IDT within load image
- 4Ah DWORD size of IDT in bytes
- 4Eh DWORD offset of TSS within load image
- 52h DWORD size of TSS in bytes
- 56h DWORD minimum number of extra bytes to be allocated at end of program
- (level 1 executables only)
- 5Ah DWORD maximum number of extra bytes to be allocated at end of program
- (level 1 executables only)
- 5Eh DWORD base load offset (level 1 executables only)
- 62h DWORD initial ESP
- 66h WORD initial SS
- 68h DWORD initial EIP
- 6Ch WORD initial CS
- 6Eh WORD initial LDT
- 70h WORD initial TSS
- 72h WORD flags
- bit 0: load image is packed
- bit 1: 32-bit checksum is present
- bits 4-2: type of relocation table
- 74h DWORD memory requirements for load image
- 78h DWORD 32-bit checksum (optional)
- 7Ch DWORD size of stack segment in bytes
- 80h 256 BYTEs reserved (0)
-
- Format of Phar Lap segment information table entry:
- Offset Size Description (Table 0718)
- 00h WORD selector number
- 02h WORD flags
- 04h DWORD base offset of selector
- 08h DWORD minimum number of extra bytes to be allocated to the segment
-
- Format of 386|DOS-Extender run-time parameters:
- Offset Size Description (Table 0719)
- 00h 2 BYTEs signature "DX" (44h 58h)
- 02h WORD minimum number of real-mode params to leave free at run time
- 04h WORD maximum number of real-mode params to leave free at run time
- 06h WORD minimum interrupt buffer size in KB
- 08h WORD maximum interrupt buffer size in KB
- 0Ah WORD number of interrupt stacks
- 0Ch WORD size in KB of each interrupt stack
- 0Eh DWORD offset of byte past end of real-mode code and data
- 12h WORD size in KB of call buffers
- 14h WORD flags
- bit 0: file is virtual memory manager
- bit 1: file is a debugger
- 16h WORD unprivileged flag (if nonzero, executes at ring 1, 2, or 3)
- 18h 104 BYTEs reserved (0)
-
- Format of Phar Lap repeat block header:
- Offset Size Description (Table 0720)
- 00h WORD byte count
- 02h BYTE repeat string length
-
- Format of Borland debugging information header (following load image):
- Offset Size Description (Table 0721)
- 00h WORD signature 52FBh
- 02h WORD version ID
- 04h DWORD size of name pool in bytes
- 08h WORD number of names in namem pool
- 0Ah WORD number of type entries
- 0Ch WORD number of structure members
- 0Eh WORD number of symbols
- 10h WORD number of global symbols
- 12h WORD number of modules
- 14h WORD number of locals (optional)
- 16h WORD number of scopes in table
- 18h WORD number of line-number entries
- 1Ah WORD number of include files
- 1Ch WORD number of segment records
- 1Eh WORD number of segment/file correlations
- 20h DWORD size of load image after removing uninitialized data and debug
- information
- 24h DWORD debugger hook; pointer into debugged program whose meaning
- depends on program flags
- 28h BYTE program flags
- bit 0: case-sensitive link
- bit 1: pascal overlay program
- 29h WORD no longer used
- 2Bh WORD size of data pool in bytes
- 2Dh BYTE padding
- 2Eh WORD size of following header extension (currently 00h, 10h, or 20h)
- 30h WORD number of classes
- 32h WORD number of parents
- 34h WORD number of global classes (currently unused)
- 36h WORD number of overloads (currently unused)
- 38h WORD number of scope classes
- 3Ah WORD number of module classes
- 3Ch WORD number of coverage offsets
- 3Eh DWORD offset relative to symbol base of name pool
- 42h WORD number of browser information records
- 44h WORD number of optimized symbol records
- 46h WORD debugging flags
- 48h 8 BYTEs padding
- Note: additional information on the Borland debugging info may be found in
- Borland's Open Architecture Handbook
- --------U-214B-------------------------------
- INT 21 - ELRES v1.0 only - INSTALLATION CHECK
- AH = 4Bh
- DS:DX = 0000h:0000h
- Return: ES:BX -> ELRES history structure (see #0501 at AH=2Bh/CX=454Ch)
- DX = DABEh (signature, DAve BEnnett)
- Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
- Bennett
- SeeAlso: AH=2Bh/CX=454Ch
- --------v-214B04-----------------------------
- INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
- AX = 4B04h
- Return: CF clear if "MG" resident
- AX = 044Bh if "699"/"Thirteen Minutes" resident
- SeeAlso: AX=4243h,AH=4Ah/BX=FFFFh,AX=4B21h
- --------D-214B05-----------------------------
- INT 21 - DOS 5+ - SET EXECUTION STATE
- AX = 4B05h
- DS:DX -> execution state structure (see #0722)
- Return: CF clear if successful
- AX = 0000h
- CF set on error
- AX = error code (see #0770 at AH=59h)
- Note: used by programs which intercept AX=4B00h to prepare new programs for
- execution (including setting the DOS version number). No DOS, BIOS
- or other software interrupt may be called after return from this call
- before commencement of the child process. If DOS is running in the
- HMA, A20 is turned off on return from this call.
- SeeAlso: AH=4Bh
-
- Format of execution state structure:
- Offset Size Description (Table 0722)
- 00h WORD reserved (00h)
- 02h WORD type flags
- bit 0: program is an .EXE
- bit 1: program is an overlay
- 04h DWORD pointer to ASCIZ name of program file
- 08h WORD PSP segment of new program
- 0Ah DWORD starting CS:IP of new program
- 0Eh DWORD program size including PSP
- --------v-214B20-----------------------------
- INT 21 - VIRUS - "Holocaust"/"Telefonica" - ???
- AX = 4B20h
- SeeAlso: AX=4B04h,AX=4B21h
- --------v-214B21-----------------------------
- INT 21 C - VIRUS - "Holocaust"/"Telefonica" - ???
- AX = 4B21h
- Note: called at completion of virus installation
- SeeAlso: AX=4B04h,AX=4B20h,AX=4B25h
- --------v-214B25-----------------------------
- INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
- AX = 4B25h
- Return: DI = 1234h if resident
- SeeAlso: AX=4B21h,AX=4B40h
- --------v-214B40-----------------------------
- INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
- AX = 4B40h
- Return: AX = 5678h if resident
- SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
- --------v-214B41-----------------------------
- INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
- AX = 4B41h
- ???
- Return: ???
- SeeAlso: AX=4B40h
- --------v-214B4A-----------------------------
- INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
- AX = 4B4Ah
- Return: AL = 57h if resident
- SeeAlso: AX=4B40h,AX=4B4Bh
- --------v-214B4B-----------------------------
- INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
- AX = 4B4Bh
- Return: CF clear if resident
- SeeAlso: AX=4B4Ah,AX=4B4Dh
- --------v-214B4D-----------------------------
- INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
- AX = 4B4Dh
- Return: CF clear if resident
- SeeAlso: AX=4B4Ah,AX=4B50h
- --------v-214B50-----------------------------
- INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
- AX = 4B50h
- Return: AX = 1234h if resident
- SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
- --------v-214B53-----------------------------
- INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
- AX = 4B53h
- Return: CF clear if resident
- SeeAlso: AX=4B50h,AX=4B55h
- --------v-214B55-----------------------------
- INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
- AX = 4B55h
- Return: AX = 1231h if resident
- SeeAlso: AX=4B53h,AX=4B59h
- --------v-214B59-----------------------------
- INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
- AX = 4B59h
- Return: CF clear if resident
- SeeAlso: AX=4B50h,AX=4B5Eh
- --------v-214B5E-----------------------------
- INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
- AX = 4B5Eh
- Return: CF clear if resident
- SeeAlso: AX=4B59h,AX=4B87h
- --------v-214B60-----------------------------
- INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
- AX = 4B60h
- ???
- Return: ???
- SeeAlso: AX=4B50h
- --------v-214B87-----------------------------
- INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
- AX = 4B87h
- Return: AX = 6663h if resident
- SeeAlso: AX=4B5Eh,AX=4B95h
- --------v-214B95-----------------------------
- INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
- AX = 4B95h
- Return: AX = 1973h if resident
- SeeAlso: AX=4B87h,AX=4BA7h
- --------v-214BA7-----------------------------
- INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
- AX = 4BA7h
- Return: AX = B459h if resident
- SeeAlso: AX=4B95h,AX=4BAAh
- --------v-214BAA-----------------------------
- INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
- AX = 4BAAh
- Return: CF clear if resident
- SeeAlso: AX=4BA7h,AX=4BAFh
- --------v-214BAF-----------------------------
- INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
- AX = 4BAFh
- Return: AL = AFh if "Magnitogorsk" resident
- AL = FAh if "948"/"Screenplus1" resident
- SeeAlso: AX=4BAAh,AX=4BDDh
- --------v-214BDD-----------------------------
- INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
- AX = 4BDDh
- Return: AX = 1234h
- SeeAlso: AX=4BAFh,AX=4BFEh
- --------v-214BEE-----------------------------
- INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
- AX = 4BEEh
- Return: AX = status
- 1234h grab was successful
- 2345h failed (INT 21 grabbed previously)
- Program: F-DRIVER.SYS is part of the shareware F-PROT virus/trojan protection
- package by Fridrik Skulason
- Note: when called the first time, this function moves the INT 21 monitoring
- code from its original location in the INT 21 chain to be the first
- thing called by INT 21. This is the mechanism used by F-NET.
- SeeAlso: INT 2F/AX=4653h
- --------k-214BF0-----------------------------
- INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
- AX = 4BF0h
- Return: CF clear if installed
- AX = 899Dh
- Program: DIET is an executable-compression program by Teddy Matsumoto
- SeeAlso: AX=37D0h,AX=4BF1h
- --------k-214BF1-----------------------------
- INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
- AX = 4BF1h
- Return: ???
- SeeAlso: AX=37D0h,AX=4BF0h
- --------v-214BFE-----------------------------
- INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
- AX = 4BFEh
- Return: AX = 1234h if "Hitchcock" resident
- AX = ABCDh if "1193"/"Copyright" resident
- DI = 55BBh if "Dark Avenger-1028" resident
- SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
- --------v-214BFF-----------------------------
- INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
- AX = 4BFFh
- Return: BL = FFh if "USSR-707" resident
- DI = 55AAh if "Justice" resident
- CF clear if "Europe 92" resident
- SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
- --------v-214BFFSI0000-----------------------
- INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
- AX = 4BFFh
- SI = 0000h
- DI = 0000h
- Return: DI = 55AAh if installed
- SeeAlso: AX=4BFFh"Justice",AX=5252h
- --------D-214C-------------------------------
- INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
- AH = 4Ch
- AL = return code
- Return: never returns
- Notes: unless the process is its own parent (see #0498 at AH=26h, offset 16h
- in PSP), all open files are closed and all memory belonging to the
- process is freed
- all network file locks should be removed before calling this function
- SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
- SeeAlso: INT 60/DI=0601h
- ----------214C57-----------------------------
- INT 21 - Headroom - ???
- AX = 4C57h
- DS:DX -> target address
- Note: jumps to target address instead of terminating program
- SeeAlso: AX=5758h
- --------D-214D-------------------------------
- INT 21 - DOS 2+ - GET RETURN CODE (ERRORLEVEL)
- AH = 4Dh
- Return: AH = termination type
- 00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
- 01h control-C abort
- 02h critical error abort
- 03h terminate and stay resident (INT 21/AH=31h or INT 27)
- AL = return code
- Notes: the word in which DOS stores the return code is cleared after being
- read by this function, so the return code can only be retrieved once
- COMMAND.COM stores the return code of the last external command it
- executed as ERRORLEVEL
- this call should not be used if the child was started with AX=4B04h;
- use AH=8Ah instead
- the following sequence will close a Virtual DOS Machine under OS/2 2.0:
- MOV AH,4Dh
- INT 21h
- HLT
- DB 02h,0FDh
- This sequence is the only way to close a specific VDM which was
- booted from floppy or a disk image.
- SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
- --------D-214E-------------------------------
- INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
- AH = 4Eh
- AL = special flag for use by APPEND (see note below)
- CX = file attribute mask (see #0535 at AX=4301h) (bits 0 and 5 ignored)
- 0088h (Novell DOS 7) find first deleted file
- DS:DX -> ASCIZ file specification (may include path and wildcards)
- Return: CF clear if successful
- [DTA] = FindFirst data block (see #0723)
- CF set on error
- AX = error code (02h,03h,12h) (see #0770 at AH=59h)
- Notes: for search attributes other than 08h, all files with at MOST the
- specified combination of hidden, system, and directory attributes
- will be returned. Under DOS 2.x, searching for attribute 08h
- (volume label) will also return normal files, while under DOS 3+
- only the volume label (if any) will be returned.
- this call also returns successfully if given the name of a character
- device without wildcards. DOS 2.x returns attribute 00h, size 0,
- and the current date and time. DOS 3+ returns attribute 40h and the
- current date and time.
- immediately after an INT 2F/AX=B711h (APPEND return found name), the
- name at DS:DX will be overwritten; if AL=00h on entry, the actual
- found pathname will be stored, otherwise, the actual found path
- will be prepended to the original filespec without a path.
- under LANtastic, this call may be used to obtain a list of a server's
- shared resources by searching for "\\SERVER\*.*"; a list of printer
- resources may be obtained by searching for "\\SERVER\@*.*"
- under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
- BUGS: under DOS 3.x and 4.x, the second and subsequent calls to this function
- with a character device name (no wildcards) and search attributes
- which include the volume-label bit (08h) will fail unless there is
- an intervening DOS call which implicitly or explicity performs a
- directory search without the volume-label bit. Such implicit
- searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
- (AH=41h), and RENAME (AH=56h)
- DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
- SeeAlso: AH=11h,AH=4Fh,AX=4301h,AH=71h,INT 2F/AX=111Bh,INT 2F/AX=B711h
-
- Format of FindFirst data block:
- Offset Size Description (Table 0723)
- ---PC-DOS 3.10, PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
- 00h BYTE drive letter (bits 0-6), remote if bit 7 set
- 01h 11 BYTEs search template
- 0Ch BYTE search attributes
- ---DOS 2.x (and some DOS 3.x???)---
- 00h BYTE search attributes
- 01h BYTE drive letter
- 02h 11 BYTEs search template
- ---WILDUNIX.COM---
- 00h 12 BYTEs 15-character wildcard search pattern and drive letter (packed)
- 0Ch BYTE search attributes
- ---DOS 2.x and most 3.x---
- 0Dh WORD entry count within directory
- 0Fh DWORD pointer to DTA???
- 13h WORD cluster number of start of parent directory
- ---PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
- 0Dh WORD entry count within directory
- 0Fh WORD cluster number of start of parent directory
- 11h 4 BYTEs reserved
- ---all versions, documented fields---
- 15h BYTE attribute of file found
- 16h WORD file time (see #0761 at AX=5700h)
- 18h WORD file date (see #0762 at AX=5700h)
- 1Ah DWORD file size
- 1Eh 13 BYTEs ASCIZ filename+extension
- --------f-214E-------------------------------
- INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
- AH = 4Eh
- DS:DX = 0000h:0000h
- Return: AH = 99h if installed
- Program: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
- Hosgood and Terry Barnaby
- --------D-214F-------------------------------
- INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
- AH = 4Fh
- [DTA] = data block from previous FindFirst or FindNext call
- Return: CF clear if successful
- CF set on error
- AX = error code (12h) (see #0770 at AH=59h)
- Note: under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
- the next matching deleted file will be returned
- BUG: DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
- SeeAlso: AH=12h,AH=4Eh,AH=71h,AH=72h
- --------D-2150-------------------------------
- INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
- AH = 50h
- BX = segment of PSP for new process
- Notes: DOS uses the current PSP address to determine which processes own files
- and memory; it corresponds to process identifiers used by other OSs
- under DOS 2.x, this function cannot be invoked inside an INT 28h
- handler without setting the Critical Error flag
- under MS-DOS 3+ and DR-DOS 3.41+, this function does not use any of
- the DOS-internal stacks and may thus be called at any time, even
- during another INT 21h call
- some Microsoft applications such as Quick C 2.51 use segments of 0000h
- and FFFFh and direct access to the SDA (see #0777 at AX=5D06h) to
- test whether they are running under MS-DOS rather than a compatible
- OS; although one should only call this function with valid PSP
- addresses, any program hooking it should be prepared to handle
- invalid addresses
- this function is supported by the OS/2 compatibility box
- this call was undocumented prior to the release of DOS 5.0
- SeeAlso: AH=26h,AH=51h,AH=62h
- --------D-2151-------------------------------
- INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
- AH = 51h
- Return: BX = segment of PSP for current process
- Notes: DOS uses the current PSP address to determine which processes own files
- and memory; it corresponds to process identifiers used by other OSs
- under DOS 2.x, this function cannot be invoked inside an INT 28h
- handler without setting the Critical Error flag
- under DOS 3+, this function does not use any of the DOS-internal stacks
- and may thus be called at any time, even during another INT 21h call
- supported by OS/2 compatibility box
- identical to the documented AH=62h
- this call was undocumented prior to the release of DOS 5.0
- SeeAlso: AH=26h,AH=50h,AH=62h
- --------D-2152-------------------------------
- INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
- AH = 52h
- Return: ES:BX -> DOS list of lists (see #0724)
- Notes: partially supported by OS/2 v1.1 compatibility box (however, most
- pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
- pointer is FFFFh:FFFFh).
- partially supported by the Windows NT DOS box; contains only a
- rudimentary Current Directory Structure (see #0741)
- on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
- Quarterdeck's suggested check for the use of its DOSDATA.SYS or
- DOS-UP.SYS is to test whether the list-of-lists segment is greater
- than the segment of the first memory block; a better check for
- DOS-UP.SYS is INT 21/AX=2B01h/CX=444Dh
- SeeAlso: INT 2F/AX=1203h
-
- Format of List of Lists:
- Offset Size Description (Table 0724)
- -24 WORD (DOS 3.1+) contents of CX from INT 21/AX=5E01h
- -22 WORD (DOS ???+) LRU counter for FCB caching
- -20 WORD (DOS ???+) LRU counter for FCB opens
- -18 DWORD (DOS ???+) address of OEM function handler (see INT 21/AH=F8h)
- FFFFh:FFFFh if not installed or not available
- -14 WORD (DOS ???+) offset in DOS CS of code to return from INT 21 call
- -12 WORD (DOS 3.1+) sharing retry count (see AX=440Bh)
- -10 WORD (DOS 3.1+) sharing retry delay (see AX=440Bh)
- -8 DWORD (DOS 3+) pointer to current disk buffer
- -4 WORD (DOS 3+) pointer in DOS data segment of unread CON input
- when CON is read via a handle, DOS reads an entire line,
- and returns the requested portion, buffering the rest
- for the next read. 0000h indicates no unread input
- -2 WORD segment of first memory control block
- 00h DWORD pointer to first Drive Parameter Block (see #0514 at AH=32h)
- 04h DWORD -> first System File Table (see #0735,#0736,#0737,#0738)
- 08h DWORD pointer to active CLOCK$ device's header (most recently loaded
- driver with CLOCK bit set)
- 0Ch DWORD pointer to active CON device's header (most recently loaded
- driver with STDIN bit set)
- ---DOS 2.x---
- 10h BYTE number of logical drives in system
- 11h WORD maximum bytes/block of any block device
- 13h DWORD pointer to first disk buffer (see #0746,#0747)
- 17h 18 BYTEs actual NUL device driver header (not a pointer!)
- NUL is always the first device on DOS's linked list of device
- drivers. (see #0744)
- ---DOS 3.0---
- 10h BYTE number of block devices
- 11h WORD maximum bytes/block of any block device
- 13h DWORD pointer to first disk buffer (see #0747,#0749)
- 17h DWORD pointer to array of current directory structures (see #0739)
- 1Bh BYTE value of LASTDRIVE command in CONFIG.SYS (default 5)
- 1Ch DWORD pointer to STRING= workspace area
- 20h WORD size of STRING area (the x in STRING=x from CONFIG.SYS)
- 22h DWORD pointer to FCB table
- 26h WORD the y in FCBS=x,y from CONFIG.SYS
- 28h 18 BYTEs actual NUL device driver header (not a pointer!)
- NUL is always the first device on DOS's linked list of device
- drivers. (see #0744)
- ---DOS 3.1-3.3---
- 10h WORD maximum bytes per sector of any block device
- 12h DWORD pointer to first disk buffer in buffer chain (see #0747)
- 16h DWORD pointer to array of current directory structures (see #0739)
- 1Ah DWORD pointer to system FCB tables (see #0736,#0737,#0738)
- 1Eh WORD number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
- 20h BYTE number of block devices installed
- 21h BYTE number of available drive letters (largest of 5, installed
- block devices, and CONFIG.SYS LASTDRIVE=). Also size of
- current directory structure array.
- 22h 18 BYTEs actual NUL device driver header (not a pointer!)
- NUL is always the first device on DOS's linked list of device
- drivers. (see #0744)
- 34h BYTE number of JOIN'ed drives
- ---DOS 4.x---
- 10h WORD maximum bytes per sector of any block device
- 12h DWORD pointer to disk buffer info record (see #0749,#0750)
- Note: although the initialization code in IO.SYS uses this
- pointer, MSDOS.SYS does not, instead using the hardcoded
- address of the info record
- 16h DWORD pointer to array of current directory structures
- (see #0739,#0740)
- 1Ah DWORD pointer to system FCB tables (see #0736,#0737,#0738)
- 1Eh WORD number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
- (always 00h for DOS 5.0)
- 20h BYTE number of block devices installed
- 21h BYTE number of available drive letters (largest of 5, installed
- block devices, and CONFIG.SYS LASTDRIVE=). Also size of
- current directory structure array.
- 22h 18 BYTEs actual NUL device driver header (not a pointer!)
- NUL is always the first device on DOS's linked list of device
- drivers. (see #0744)
- 34h BYTE number of JOIN'ed drives
- 35h WORD pointer within IBMDOS code segment to list of special program
- names (see #0759)
- (always 0000h for DOS 5.0)
- 37h DWORD pointer to FAR routine for resident IFS utility functions
- (see #0756)
- may be called by any IFS driver which does not wish to
- service functions 20h or 24h-28h itself
- 3Bh DWORD pointer to chain of IFS (installable file system) drivers
- 3Fh WORD the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
- 41h WORD number of lookahead buffers (the y in BUFFERS x,y)
- 43h BYTE boot drive (1=A:)
- 44h BYTE flag: 01h to use DWORD moves (80386+), 00h otherwise
- 45h WORD extended memory size in KB
- ---DOS 5.0-6.0---
- 10h 39 BYTEs as for DOS 4.x (see above)
- 37h DWORD pointer to SETVER program list or 0000h:0000h
- 3Bh WORD (DOS=HIGH) offset in DOS CS of function to fix A20 control
- when executing special .COM format
- 3Dh WORD PSP of most-recently EXECed program if DOS in HMA, 0000h if low
- used for maintaining count of INT 21 calls which disable A20
- on return
- 3Fh 8 BYTEs as for DOS 4.x (see above)
- ---Windows NT DOS Box---
- 10h 6 BYTEs ???
- 16h DWORD pointer to array of current directory structures (see #0741)
- 1Ah 6 BYTEs ???
- 20h BYTE number of block devices installed
- 21h BYTE number of local drive letters (= installed block devices)
- Also size of current directory structure array.
- 22h 18 BYTEs actual NUL device driver header (not a pointer!)
- NUL is always the first device on DOS's linked list of device
- drivers. (see #0744)
-
- (Table 0725)
- Values for special flag PSP segments:
- 0000h free
- 0006h DR-DOS XMS UMB
- 0007h DR-DOS excluded upper memory ("hole")
- 0008h belongs to DOS
- FFFAh 386MAX UMB control block (see #0589 at AX=4402h"386MAX")
- FFFDh 386MAX locked-out memory
- FFFEh 386MAX UMB (immediately follows its control block)
- FFFFh 386MAX 6.01 device driver
-
- Format of DOS memory control block (see also below):
- Offset Size Description (Table 0726)
- 00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh
- 01h WORD PSP segment of owner or special flag value (see #0725)
- 03h WORD size of memory block in paragraphs
- 05h 3 BYTEs unused by MS-DOS
- (386MAX) if locked-out block, region start/prev region end
- ---DOS 2.x,3.x---
- 08h 8 BYTEs unused
- ---DOS 4+ ---
- 08h 8 BYTEs ASCII program name if PSP memory block or DR-DOS UMB,
- else garbage
- null-terminated if less than 8 characters
- Notes: the next MCB is at segment (current + size + 1)
- under DOS 3.1+, the first memory block is the DOS data segment,
- containing installable drivers, buffers, etc. Under DOS 4+ it is
- divided into subsegments, each with its own memory control block
- (see #0729), the first of which is at offset 0000h.
- for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
- 08h and 09h. "SC" is system code or locked-out inter-UMB memory,
- "SD" is system data, device drivers, etc.
- Some versions of DR-DOS use only seven characters of the program name,
- placing a NUL in the eighth byte.
- SeeAlso: #0727,#0728,#0729
-
- Format of MS-DOS 5+ UMB control block:
- Offset Size Description (Table 0727)
- 00h BYTE type: 5Ah if last block in chain, 4Dh otherwise
- 01h WORD first available paragraph in UMB if control block at start
- of UMB, 000Ah if control block at end of UMB
- 03h WORD length in paragraphs of following UMB or locked-out region
- 05h 3 BYTEs unused
- 08h 8 BYTEs block type name: "UMB" if start block, "SM" if end block in UMB
-
- Format of STARLITE (General Software's Embedded DOS) memory control block:
- Offset Size Description (Table 0728)
- 00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh
- 01h WORD PSP segment of owner, 0000h if free, 0008h if belongs to DOS
- 03h WORD size of memory block in paragraphs
- 05h BYTE unused
- 06h WORD segment address of next memory control block (0000h if last)
- 08h WORD segment address of previous memory control block or 0000h
- 0Ah 6 BYTEs reserved
-
- Format of DOS 4+ data segment subsegment control blocks:
- Offset Size Description (Table 0729)
- 00h BYTE subsegment type (blocks typically appear in this order)
- "D" device driver
- "E" device driver appendage
- "I" IFS (Installable File System) driver
- "F" FILES= control block storage area (for FILES>5)
- "X" FCBS= control block storage area, if present
- "C" BUFFERS EMS workspace area (if BUFFERS /X option used)
- "B" BUFFERS= storage area
- "L" LASTDRIVE= current directory structure array storage area
- "S" STACKS= code and data area, if present (see #0730,#0731)
- "T" INSTALL= transient code
- 01h WORD paragraph of subsegment start (usually the next paragraph)
- 03h WORD size of subsegment in paragraphs
- 05h 3 BYTEs unused
- 08h 8 BYTEs for types "D" and "I", base name of file from which the driver
- was loaded (unused for other types)
-
- Format of data at start of STACKS code segment (if present):
- Offset Size Description (Table 0730)
- 00h WORD ???
- 02h WORD number of stacks (the x in STACKS=x,y)
- 04h WORD size of stack control block array (should be 8*x)
- 06h WORD size of each stack (the y in STACKS=x,y)
- 08h DWORD pointer to STACKS data segment
- 0Ch WORD offset in STACKS data segment of stack control block array
- 0Eh WORD offset in STACKS data segment of last element of that array
- 10h WORD offset in STACKS data segment of the entry in that array for
- the next stack to be allocated (initially same as value in
- 0Eh and works its way down in steps of 8 to the value in
- 0Ch as hardware interrupts pre-empt each other)
- Note: the STACKS code segment data may, if present, be located as follows:
- DOS 3.2: The code segment data is at a paragraph boundary fairly early
- in the IBMBIO segment (seen at 0070:0190h)
- DOS 3.3: The code segment is at a paragraph boundary in the DOS data
- segment, which may be determined by inspecting the segment
- pointers of the vectors for those of interrupts 02h, 08h-0Eh,
- 70h, 72-77h which have not been redirected by device drivers
- or TSRs.
- DOS 4+ Identified by sub-segment control block type "S" within the DOS
- data segment.
- SeeAlso: INT B4"STACKMAN"
-
- Format of array elements in STACKS data segment:
- Offset Size Description (Table 0731)
- 00h BYTE status: 00h=free, 01h=in use, 03h=corrupted by overflow of
- higher stack.
- 01h BYTE not used
- 02h WORD previous SP
- 04h WORD previous SS
- 06h WORD ptr to word at top of stack (new value for SP). The word at the
- top of the stack is preset to point back to this control
- block.
-
- Format of SHARE.EXE hooks (DOS 3.1-6.00):
- Offset Size Description (Table 0732)
- (offsets from first system file table--pointed at by ListOfLists+04h)
- -3Ch DWORD pointer to FAR routine for ???
- Note: not called by MS-DOS 3.3, set to 0000h:0000h by
- SHARE 3.3+
- -38h DWORD pointer to FAR routine called on opening file
- on call, internal DOS location points at filename
- (see #0777 at AX=5D06h)
- Return: CF clear if successful
- CF set on error
- AX = DOS error code (24h) (see #0770 at AH=59h)
- Note: SHARE directly accesses DOS-internal data to get name of
- file just opened
- -34h DWORD pointer to FAR routine called on closing file
- ES:DI -> system file table
- Note: does something to every Record Lock Record for file
- -30h DWORD pointer to FAR routine to close all files for given computer
- (called by AX=5D03h)
- -2Ch DWORD pointer to FAR routine to close all files for given process
- (called by AX=5D04h)
- -28h DWORD pointer to FAR routine to close file by name
- (called by AX=5D02h)
- DS:SI -> DOS parameter list (see #0776 at AX=5D00h)
- DPL's DS:DX -> name of file to close
- Return: CF clear if successful
- CF set on error
- AX = DOS error code (03h) (see #0770 at AH=59h)
- -24h DWORD pointer to FAR routine to lock region of file
- call with BX = file handle
- ---DOS 3.x---
- CX:DX = starting offset
- SI:AX = size
- ---DOS 4+---
- DS:DX -> lock range
- DWORD start offset
- DWORD size in bytes
- Return: CF set on error
- AL = DOS error code (21h) (see #0770 at AH=59h)
- Note: not called if file is marked as remote
- -20h DWORD pointer to FAR routine to unlock region of file
- call with BX = file handle
- ---DOS 3.x---
- CX:DX = starting offset
- SI:AX = size
- ---DOS 4+---
- DS:DX -> lock range
- DWORD start offset
- DWORD size in bytes
- Return: CF set on error
- AL = DOS error code (21h) (see #0770 at AH=59h)
- Note: not called if file is marked as remote
- -1Ch DWORD pointer to FAR routine to check if file region is locked
- call with ES:DI -> system file table entry for file
- CX = length of region from current position in file
- Return: CF set if any portion of region locked
- AX = 0021h
- -18h DWORD pointer to FAR routine to get open file list entry
- (called by AX=5D05h)
- call with DS:SI -> DOS parameter list (see #0776 at AX=5D00h)
- DPL's BX = index of sharing record
- DPL's CX = index of SFT in SFT chain of sharing rec
- Return: CF set on error or not loaded
- AX = DOS error code (12h) (see #0770 at AH=59h)
- CF clear if successful
- ES:DI -> filename
- CX = number of locks owned by specified SFT
- BX = network machine number
- DX destroyed
- -14h DWORD pointer to FAR routine for updating FCB from SFT???
- call with DS:SI -> unopened FCB
- ES:DI -> system file table entry
- Return: BL = C0h???
- Note: copies following fields from SFT to FCB:
- starting cluster of file 0Bh 1Ah
- sharing record offset 33h 1Ch
- file attribute 04h 1Eh
- -10h DWORD pointer to FAR routine to get first cluster of FCB file ???
- call with ES:DI -> system file table entry
- DS:SI -> FCB
- Return: CF set if SFT closed or sharing record offsets
- mismatched
- CF clear if successful
- BX = starting cluster number from FCB
- -0Ch DWORD pointer to FAR routine to close file if duplicate for process
- DS:SI -> system file table
- Return: AX = number of handle in JFT which already uses SFT
- Note: called during open/create of a file
- Note: if SFT was opened with inheritance enabled and sharing
- mode 111, does something to all other SFTs owned by
- same process which have the same file open mode and
- sharing record
- -08h DWORD pointer to FAR routine for closing file
- Note: closes various handles referring to file most-recently
- opened
- -04h DWORD pointer to FAR routine to update directory info in related SFT
- entries
- call with ES:DI -> system file table entry for file (see #0737)
- AX = subfunction (apply to each related SFT)
- 00h: update time stamp (offset 0Dh) and date
- stamp (offset 0Fh)
- 01h: update file size (offset 11h) and starting
- cluster (offset 0Bh). Sets last-accessed
- cluster fields to start of file if file
- never accessed
- 02h: as function 01h, but last-accessed fields
- always changed
- 03h: do both functions 00h and 02h
- Note: follows ptr at offset 2Bh in system file table entries
- Note: NOP if opened with no-inherit or via FCB
- Notes: most of the above hooks (except -04h, -14h, -18h, and -3Ch) assume
- either that SS=DOS DS or SS=DS=DOS DS and directly access
- DOS-internal data
- sharing hooks are not supported by DR-DOS 5-6; they appear to be
- supported by Novell DOS 7, with a segment of 0000h indicating the
- DOS data segment
- SeeAlso: #0733,#0734
-
- Format of sharing record:
- Offset Size Description (Table 0733)
- 00h BYTE flag
- 00h free block
- 01h allocated block
- FFh end marker
- 01h WORD size of block
- 03h BYTE checksum of pathname (including NUL)
- if sum of ASCII values is N, checksum is (N/256 + N%256)
- 04h WORD offset in SHARE's DS of first Record Lock Record (see #0734)
- 06h DWORD pointer to start of system file table chain for file
- 0Ah WORD unique sequence number
- 0Ch var ASCIZ full pathname
- Note: not supported by DR-DOS SHARE 1.1 and 2.0; will reportedly be
- supported by Novell DOS 7
- SeeAlso: #0732,#0734
-
- Format of SHARE.EXE Record Lock Record:
- Offset Size Description (Table 0734)
- 00h WORD offset in SHARE's DS of next lock table in list or 0000h
- 02h DWORD offset in file of start of locked region
- 06h DWORD offset in file of end of locked region
- 0Ah DWORD pointer to System File Table entry for this file
- 0Eh WORD PSP segment of lock's owner
- ---DOS 5+ ---
- 10h WORD lock type: (00h lock all, 01h lock writes only)
- SeeAlso: #0732,#0733,#0735,#0738
-
- Format of DOS 2.x system file tables:
- Offset Size Description (Table 0735)
- 00h DWORD pointer to next file table (offset FFFFh if last)
- 04h WORD number of files in this table
- 06h 28h bytes per file
- Offset Size Description
- 00h BYTE number of file handles referring to this file
- 01h BYTE file open mode (see #0521 at AH=3Dh)
- 02h BYTE file attribute
- 03h BYTE drive (0 = character device, 1 = A, 2 = B, etc)
- 04h 11 BYTEs filename in FCB format (no path,no period,blank-padded)
- 0Fh WORD ???
- 11h WORD ???
- 13h DWORD file size???
- 17h WORD file date in packed format (see #0762 at AX=5700h)
- 19h WORD file time in packed format (see #0761 at AX=5700h)
- 1Bh BYTE device attribute (see #0538 at AX=4400h)
- ---character device---
- 1Ch DWORD pointer to device driver
- ---block device---
- 1Ch WORD starting cluster of file
- 1Eh WORD relative cluster in file of last cluster accessed
- ------
- 20h WORD absolute cluster number of current cluster
- 22h WORD ???
- 24h DWORD current file position???
- SeeAlso: #0736,#0737,#0738
-
- Format of DOS 3.0 system file tables and FCB tables:
- Offset Size Description (Table 0736)
- 00h DWORD pointer to next file table (offset FFFFh if last)
- 04h WORD number of files in this table
- 06h 38h bytes per file
- Offset Size Description
- 00h-1Eh as for DOS 3.1+ (see #0737)
- 1Fh WORD byte offset of directory entry within sector
- 21h 11 BYTEs filename in FCB format (no path/period, blank-padded)
- 2Ch DWORD (SHARE.EXE) pointer to previous SFT sharing same file
- 30h WORD (SHARE.EXE) network machine number which opened file
- (Windows Enhanced mode DOSMGR uses the virtual machine
- ID as the machine number; see INT 2F/AX=1683h)
- 32h WORD PSP segment of file's owner (first three entries for
- AUX/CON/PRN contain segment of IO.SYS startup code)
- 34h WORD (SHARE.EXE) offset in SHARE code seg of share record
- 36h WORD ??? apparently always 0000h
- SeeAlso: #0735,#0737,#0738
-
- Format of DOS 3.1-3.3x, DR-DOS 5.0-6.0 system file tables and FCB tables:
- Offset Size Description (Table 0737)
- 00h DWORD pointer to next file table (offset FFFFh if last)
- 04h WORD number of files in this table
- 06h 35h bytes per file
- Offset Size Description
- 00h WORD number of file handles referring to this file
- 02h WORD file open mode (see #0521 at AH=3Dh)
- bit 15 set if this file opened via FCB
- 04h BYTE file attribute (see #0535 at AX=4301h)
- 05h WORD device info word (see #0538 at AX=4400h)
- bit 15 set if remote file
- bit 14 set means do not set file date/time on closing
- bit 12 set means don't inherit on EXEC
- bits 5-0 drive number for disk files
- 07h DWORD pointer to device driver header if character device
- else pointer to DOS Drive Parameter Block
- (see #0514 at AH=32h)
- 0Bh WORD starting cluster of file
- 0Dh WORD file time in packed format (see #0761 at AX=5700h)
- not used for character devices in DR-DOS
- 0Fh WORD file date in packed format (see #0762 at AX=5700h)
- not used for character devices in DR-DOS
- 11h DWORD file size
- ---system file table---
- 15h DWORD current offset in file (may be larger than size of
- file; INT 21/AH=42h does not check new position)
- ---FCB table---
- 15h WORD counter for last I/O to FCB
- 17h WORD counter for last open of FCB
- (these are separate to determine the times of the
- latest I/O and open)
- ---
- 19h WORD relative cluster within file of last cluster accessed
- 1Bh WORD absolute cluster number of last cluster accessed
- 0000h if file never read or written???
- 1Dh WORD number of sector containing directory entry
- 1Fh BYTE number of dir entry within sector (byte offset/32)
- 20h 11 BYTEs filename in FCB format (no path/period, blank-padded)
- 2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file
- 2Fh WORD (SHARE.EXE) network machine number which opened file
- (Windows Enhanced mode DOSMGR uses the virtual machine
- ID as the machine number; see INT 2F/AX=1683h)
- 31h WORD PSP segment of file's owner (see #0498 at AH=26h)
- (first three entries for AUX/CON/PRN contain segment
- of IO.SYS startup code)
- 33h WORD offset within SHARE.EXE code segment of
- sharing record (see #0733) 0000h = none
- SeeAlso: #0735,#0736,#0738
-
- Format of DOS 4.0-6.0 system file tables and FCB tables:
- Offset Size Description (Table 0738)
- 00h DWORD pointer to next file table (offset FFFFh if last)
- 04h WORD number of files in this table
- 06h 3Bh bytes per file
- Offset Size Description
- 00h WORD number of file handles referring to this file
- FFFFh if in use but not referenced
- 02h WORD file open mode (see #0521 at AH=3Dh)
- bit 15 set if this file opened via FCB
- 04h BYTE file attribute (see #0535 at AX=4301h)
- 05h WORD device info word (see also #0538 at AX=4400h)
- bit 15 set if remote file
- bit 14 set means do not set file date/time on closing
- bit 13 set if named pipe
- bit 12 set if no inherit
- bit 11 set if network spooler
- bit 7 set if device, clear if file (only if local)
- bits 6-0 as for AX=4400h
- 07h DWORD pointer to device driver header if character device
- else pointer to DOS Drive Parameter Block
- (see #0514 at AH=32h) or REDIR data
- 0Bh WORD starting cluster of file (local files only)
- 0Dh WORD file time in packed format (see #0761)
- 0Fh WORD file date in packed format (see #0762)
- 11h DWORD file size
- 15h DWORD current offset in file (SFT)
- LRU counters (FCB table, two WORDs)
- ---local file---
- 19h WORD relative cluster within file of last cluster accessed
- 1Bh DWORD number of sector containing directory entry
- 1Fh BYTE number of dir entry within sector (byte offset/32)
- ---network redirector---
- 19h DWORD pointer to REDIRIFS record
- 1Dh 3 BYTEs ???
- ------
- 20h 11 BYTEs filename in FCB format (no path/period, blank-padded)
- 2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file
- 2Fh WORD (SHARE.EXE) network machine number which opened file
- (Windows Enhanced mode DOSMGR uses the virtual machine
- ID as the machine number; see INT 2F/AX=1683h)
- 31h WORD PSP segment of file's owner (see #0498 at AH=26h)
- (first three entries for AUX/CON/PRN contain segment
- of IO.SYS startup code)
- 33h WORD offset within SHARE.EXE code segment of
- sharing record (see #0692) 0000h = none
- 35h WORD (local) absolute cluster number of last clustr accessed
- (redirector) ???
- 37h DWORD pointer to IFS driver for file, 0000000h if native DOS
- Note: the OS/2 2.0 DOS Boot Session does not properly fill in the filename
- field due to incomplete support for SFTs; the OS/2 2.0 DOS Window
- does not appear to support SFTs at all
- SeeAlso: #0735,#0736,#0737
-
- Format of current directory structure (CDS) (array, LASTDRIVE entries):
- Offset Size Description (Table 0739)
- 00h 67 BYTEs ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network)
- 43h WORD drive attributes (see also note below and AX=5F07h)
- bit 15: uses network redirector \ invalid if 00, installable
- bit 14: physical drive / file system if 11
- bit 13: JOIN'ed \ path above is true path that would be
- bit 12: SUBST'ed / needed if not under SUBST or JOIN
- bit 7: remote drive hidden from redirector's assign-list and
- exempt from network connection make/break commands;
- set for CD-ROM drives
- 45h DWORD pointer to Drive Parameter Block for drive
- (see #0514 at AH=32h)
- ---local drives---
- 49h WORD starting cluster of current directory
- 0000h = root, FFFFh = never accessed
- 4Bh WORD ??? seems to be FFFFh always
- 4Dh WORD ??? seems to be FFFFh always
- ---network drives---
- 49h DWORD pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
- (DOS 4 only) available for use by IFS driver
- 4Dh WORD stored user data from INT 21/AX=5F03h
- ------
- 4Fh WORD offset in current directory path of backslash corresponding to
- root directory for drive
- this value specifies how many characters to hide from the
- "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
- drive letter and colon, SUBST, JOIN, and networks change it
- so that only the appropriate portion of the true path is
- visible to the user
- ---DOS 4+ ---
- 51h BYTE (DOS 4 only, remote drives) device type
- 04h network drive
- 52h DWORD pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
- this drive, 00000000h if native DOS
- 56h WORD available for use by IFS driver
- Notes: the path for invalid drives is normally set to X:\, but may be empty
- after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
- normally, only one of bits 13&12 may be set together with bit 14, but
- DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
- 0001 SUBST, 0101 ASSIGN (see #0740)
- SeeAlso: #0740
-
- Format of DR-DOS 5.0-6.0 current directory structure entry (array):
- Offset Size Description (Table 0740)
- 00h 67 BYTEs ASCIZ pathname of actual root directory for this logical drive
- 43h WORD drive attributes
- 1000h SUBSTed drive
- 3000h??? JOINed drive
- 4000h physical drive
- 5000h ASSIGNed drive
- 7000h JOINed drive
- 8000h network drive
- 45h BYTE physical drive number (0=A:) if this logical drive is valid
- 46h BYTE ??? apparently flags for JOIN and ASSIGN
- 47h WORD cluster number of start of parent directory (0000h = root)
- 49h WORD entry number of current directory in parent directory
- 4Bh WORD cluster number of start of current directory
- 4Dh WORD used for media change detection (details not available)
- 4Fh WORD cluster number of SUBST/JOIN "root" directory
- 0000h if physical root directory
- SeeAlso: #0739
-
- Format of Windows NT Current Directory Structure (CDS) (array):
- Offset Size Description (Table 0741)
- 00h 67 BYTEs ASCIZ path in form X:\ (does not show either current directory
- or network path)
- 43h 4 BYTEs ???
- Note: the WinNT CDS contains only as many entries as there are local drives,
- not LASTDRIVE entries.
-
- Bitfields for device attributes (character device):
- Bit(s) Description (Table 0742)
- 15 set (indicates character device)
- 14 IOCTL supported (see AH=44h)
- 13 (DOS 3+) output until busy supported
- 12 reserved
- 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
- 10-8 reserved
- 7 (DOS 5+) Generic IOCTL check call supported (driver command 19h)
- (see AX=4410h,AX=4411h)
- 6 (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
- (see AX=440Ch,AX=440Dh)
- 5 reserved
- 4 device is special (use INT 29 "fast console output")
- 3 device is CLOCK$ (all reads/writes use transfer record described
- below)
- 2 device is NUL
- 1 device is standard output
- 0 device is standard input
- Note: for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
- version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
- 010 = European DOS 4.0)
- SeeAlso: #0743,#0744
-
- Bitfields for device attributes (block device):
- Bit(s) Description (Table 0743)
- 15 clear (indicates block device)
- 14 IOCTL supported
- 13 non-IBM format
- 12 network device (device is remote)
- 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
- 10 reserved
- 9 direct I/O not allowed??? (set by DOS 3.3 DRIVER.SYS for "new" drives)
- 8 ??? set by DOS 3.3 DRIVER.SYS for "new" drives
- 7 (DOS 5+) Generic IOCTL check call supported (driver command 19h)
- (see AX=4410h,AX=4411h)
- 6 (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
- implies support for commands 17h and 18h
- (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
- 5-2 reserved
- 1 driver supports 32-bit sector addressing (DOS 3.31+)
- 0 reserved
- Note: for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
- version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
- 010 = European DOS 4.0)
- SeeAlso: #0742,#0744
-
- Format of DOS device driver header:
- Offset Size Description (Table 0744)
- 00h DWORD pointer to next driver, offset=FFFFh if last driver
- 04h WORD device attributes (see #0742,#0743)
- 06h WORD device strategy entry point
- call with ES:BX -> request header (see INT 2F/AX=0802h)
- 08h WORD device interrupt entry point
- ---character device---
- 0Ah 8 BYTEs blank-padded character device name
- ---block device---
- 0Ah BYTE number of subunits (drives) supported by driver
- 0Bh 7 BYTEs unused
- ---
- 12h WORD (CD-ROM driver) reserved, must be 0000h
- appears to be another device chain
- 14h BYTE (CD-ROM driver) drive letter (must initially be 00h)
- 15h BYTE (CD-ROM driver) number of units
- 16h 6 BYTEs (CD-ROM driver) signature 'MSCDnn' where 'nn' is version
- (currently '00')
-
- Format of CLOCK$ transfer record:
- Offset Size Description (Table 0745)
- 00h WORD number of days since 1-Jan-1980
- 02h BYTE minutes
- 03h BYTE hours
- 04h BYTE hundredths of second
- 05h BYTE seconds
-
- Format of DOS 2.x disk buffer:
- Offset Size Description (Table 0746)
- 00h DWORD pointer to next disk buffer, offset = FFFFh if last
- least-recently used buffer is first in chain
- 04h BYTE drive (0=A, 1=B, etc), FFh if not in use
- 05h 3 BYTEs unused??? (seems always to be 00h 00h 01h)
- 08h WORD logical sector number
- 0Ah BYTE number of copies to write (1 for non-FAT sectors)
- 0Bh BYTE sector offset between copies if multiple copies to be written
- 0Ch DWORD pointer to DOS Drive Parameter Block (see #0514 at AH=32h)
- 10h buffered data
- SeeAlso: #0747,#0749,#0750,#0752
-
- Format of DOS 3.x disk buffer:
- Offset Size Description (Table 0747)
- 00h DWORD pointer to next disk buffer, offset = FFFFh if last
- least-recently used buffer is first in chain
- 04h BYTE drive (0=A,1=B, etc), FFh if not in use
- 05h BYTE buffer flags (see #0748)
- 06h WORD logical sector number
- 08h BYTE number of copies to write (1 for non-FAT sectors)
- 09h BYTE sector offset between copies if multiple copies to be written
- 0Ah DWORD pointer to DOS Drive Parameter Block (see #0514 at AH=32h)
- 0Eh WORD unused??? (almost always 0)
- 10h buffered data
- SeeAlso: #0746,#0749,#0750,#0752
-
- Bitfields for DOS 3.x disk buffer flags:
- Bit(s) Description (Table 0748)
- 7 ???
- 6 buffer dirty
- 5 buffer has been referenced
- 4 ???
- 3 sector in data area
- 2 sector in a directory, either root or subdirectory
- 1 sector in FAT
- 0 boot sector??? (guess)
- SeeAlso: #0753
-
- Format of DOS 4.00 (pre UR 25066) disk buffer info:
- Offset Size Description (Table 0749)
- 00h DWORD pointer to array of disk buffer hash chain heads (see #0751)
- 04h WORD number of disk buffer hash chains (referred to as NDBCH below)
- 06h DWORD pointer to lookahead buffer, zero if not present
- 0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
- 0Ch BYTE 00h if buffers in EMS (/X), FFh if not
- 0Dh WORD EMS handle for buffers, zero if not in EMS
- 0Fh WORD EMS physical page number used for buffers (usually 255)
- 11h WORD ??? seems always to be 0001h
- 13h WORD segment of EMS physical page frame
- 15h WORD ??? seems always to be zero
- 17h 4 WORDs EMS partial page mapping information???
- SeeAlso: #0746,#0747,#0750,#0754
-
- Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
- Offset Size Description (Table 0750)
- 00h DWORD pointer to array of disk buffer hash chain heads (see #0751)
- 04h WORD number of disk buffer hash chains (referred to as NDBCH below)
- 06h DWORD pointer to lookahead buffer, zero if not present
- 0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
- 0Ch BYTE 01h, possibly to distinguish from pre-UR 25066 format
- 0Dh WORD ??? EMS segment for BUFFERS (only with /XD)
- 0Fh WORD ??? EMS physical page number of EMS seg above (only with /XD)
- 11h WORD ??? EMS segment for ??? (only with /XD)
- 13h WORD ??? EMS physical page number of above (only with /XD)
- 15h BYTE ??? number of EMS page frames present (only with /XD)
- 16h WORD segment of one-sector workspace buffer allocated in main memory
- if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
- into EMS
- 18h WORD EMS handle for buffers, zero if not in EMS
- 1Ah WORD EMS physical page number used for buffers (usually 255)
- 1Ch WORD ??? appears always to be 0001h
- 1Eh WORD segment of EMS physical page frame
- 20h WORD ??? appears always to be zero
- 22h BYTE 00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
- SeeAlso: #0746,#0747,#0749,#0754
-
- Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
- Offset Size Description (Table 0751)
- 00h WORD EMS logical page number in which chain is resident, -1 if not
- in EMS
- 02h DWORD pointer to least recently used buffer header. All buffers on
- this chain are in the same segment.
- 06h BYTE number of dirty buffers on this chain
- 07h BYTE reserved (00h)
- Notes: buffered disk sectors are assigned to chain N where N is the sector's
- address modulo NDBCH, 0 <= N <= NDBCH-1
- each chain resides completely within one EMS page
- this structure is in main memory even if buffers are in EMS
-
- Format of DOS 4.0-6.0 disk buffer:
- Offset Size Description (Table 0752)
- 00h WORD forward ptr, offset only, to next least recently used buffer
- 02h WORD backward pointer, offset only
- 04h BYTE drive (0=A,1=B, etc) if bit 7 clear
- SFT index if bit 7 set
- FFh if not in use
- 05h BYTE buffer flags (see #0753)
- 06h DWORD logical sector number (local buffers only)
- 0Ah BYTE number of copies to write
- for FAT sectors, same as number of FATs
- for data and directory sectors, usually 1
- 0Bh WORD offset in sectors between copies to write for FAT sectors
- 0Dh DWORD pointer to DOS Drive Parameter Block (see #0514 at AH=32h)
- 11h WORD size of data in buffer if remote buffer (see flags above)
- 13h BYTE reserved (padding)
- 14h buffered data
- Note: for DOS 4.x, all buffered sectors which have the same hash value
- (computed as the sum of high and low words of the logical sector
- number divided by the number of disk buffer chains) are on the same
- doubly-linked circular chain; for DOS 5+, only a single circular
- chain exists.
- the links consist of offset addresses only, the segment being the same
- for all buffers in the chain.
- SeeAlso: #0746,#0747,#0749
-
- Bitfields for DOS 4.0-6.0 disk buffer flags:
- Bit(s) Description (Table 0753)
- 7 remote buffer
- 6 buffer dirty
- 5 buffer has been referenced (reserved in DOS 5+)
- 4 search data buffer (only valid if remote buffer)
- 3 sector in data area
- 2 sector in a directory, either root or subdirectory
- 1 sector in FAT
- 0 reserved
- SeeAlso: #0748
-
- Format of DOS 5.0-6.0 disk buffer info:
- Offset Size Description (Table 0754)
- 00h DWORD pointer to least-recently-used buffer header (may be in HMA)
- (see #0752)
- 04h WORD number of dirty disk buffers
- 06h DWORD pointer to lookahead buffer, zero if not present
- 0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
- 0Ch BYTE buffer location
- 00h base memory, no workspace buffer
- 01h HMA, workspace buffer in base memory
- 0Dh DWORD pointer to one-segment workspace buffer in base memory
- 11h 3 BYTEs unused
- 14h WORD ???
- 16h BYTE flag: INT 24 fail while making an I/O status call
- 17h BYTE temp storage for user memory allocation strategy during EXEC
- 18h BYTE counter: number of INT 21 calls for which A20 is off
- 19h BYTE bit flags
- bit 0: ???
- bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
- WINA20.SYS when MS Windows 3.0 starts)
- bit 2: in EXEC state (INT 21/AX=4B05h)
- 1Ah WORD offset of unpack code start (used only during INT 21/AX=4B05h)
- 1Ch BYTE bit 0 set iff UMB MCB chain linked to normal MCB chain
- 1Dh WORD minimum paragraphs of memory required by program being EXECed
- 1Fh WORD segment of first MCB in upper memory blocks or FFFFh if DOS
- memory chain in base 640K only (first UMB MCB usually at
- 9FFFh, locking out video memory with a DOS-owned memory
- block)
- 21h WORD paragraph from which to start scanning during memory allocation
- SeeAlso: #0749,#0750
-
- Format of IFS driver list:
- Offset Size Description (Table 0755)
- 00h DWORD pointer to next driver header
- 04h 8 BYTEs IFS driver name (blank padded), as used by FILESYS command
- 0Ch 4 BYTEs ???
- 10h DWORD pointer to IFS utility function entry point (see #0756)
- call with ES:BX -> IFS request (see #0757)
- 14h WORD offset in header's segment of driver entry point
- ???
- SeeAlso: #0756,#0757
-
- (Table 0756)
- Call IFS utility function entry point with:
- AH = 20h miscellaneous functions
- AL = 00h get date
- Return: CX = year
- DH = month
- DL = day
- AL = 01h get process ID and computer ID
- Return: BX = current PSP segment
- DX = active network machine number
- AL = 05h get file system info
- ES:DI -> 16-byte info buffer
- Return: buffer filled
- Offset Size Description
- 00h 2 BYTEs unused
- 02h WORD number of SFTs (actually counts only
- the first two file table arrays)
- 04h WORD number of FCB table entries
- 06h WORD number of proctected FCBs
- 08h 6 BYTEs unused
- 0Eh WORD largest sector size supported
- AL = 06h get machine name
- ES:DI -> 18-byte buffer for name
- Return: buffer filled with name starting at offset 02h
- AL = 08h get sharing retry count
- Return: BX = sharing retry count
- AL = other
- Return: CF set
- AH = 21h get redirection state
- BH = type (03h disk, 04h printer)
- Return: BH = state (00h off, 01h on)
- AH = 22h ??? some sort of time calculation
- AL = 00h ???
- nonzero ???
- AH = 23h ??? some sort of time calculation
- AH = 24h compare filenames
- DS:SI -> first ASCIZ filename
- ES:DI -> second ASCIZ filename
- Return: ZF set if files are same ignoring case and / vs \
- AH = 25h normalize filename
- DS:SI -> ASCIZ filename
- ES:DI -> buffer for result
- Return: filename uppercased, forward slashes changed to backslashes
- AH = 26h get DOS stack
- Return: DS:SI -> top of stack
- CX = size of stack in bytes
- AH = 27h increment InDOS flag
- AH = 28h decrement InDOS flag
- Note: IFS drivers which do not wish to implement functions 20h or 24h-28h may
- pass them on to the default handler pointed at by [LoL+37h]
- SeeAlso: #0755,#0757
-
- Format of IFS request block:
- Offset Size Description (Table 0757)
- 00h WORD total size in bytes of request
- 02h BYTE class of request
- 02h ???
- 03h redirection
- 04h ???
- 05h file access
- 06h convert error code to string
- 07h ???
- 03h WORD returned DOS error code
- 05h BYTE IFS driver exit status
- 00h success
- 01h ???
- 02h ???
- 03h ???
- 04h ???
- FFh internal failure
- 06h 16 BYTEs ???
- ---request class 02h---
- 16h BYTE function code
- 04h ???
- 17h BYTE unused???
- 18h DWORD pointer to ???
- 1Ch DWORD pointer to ???
- 20h 2 BYTEs ???
- ---request class 03h---
- 16h BYTE function code
- 17h BYTE ???
- 18h DWORD pointer to ???
- 1Ch DWORD pointer to ???
- 22h WORD returned ???
- 24h WORD returned ???
- 26h WORD returned ???
- 28h BYTE returned ???
- 29h BYTE unused???
- ---request class 04h---
- 16h DWORD pointer to ???
- 1Ah DWORD pointer to ???
- ---request class 05h---
- 16h BYTE function code
- 01h flush disk buffers
- 02h get disk space
- 03h MKDIR
- 04h RMDIR
- 05h CHDIR
- 06h delete file
- 07h rename file
- 08h search directory
- 09h file open/create
- 0Ah LSEEK
- 0Bh read from file
- 0Ch write to file
- 0Dh lock region of file
- 0Eh commit/close file
- 0Fh get/set file attributes
- 10h printer control
- 11h ???
- 12h process termination
- 13h ???
- ---class 05h function 01h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h 4 BYTEs ???
- 26h BYTE ???
- 27h BYTE ???
- ---class 05h function 02h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h 4 BYTEs ???
- 26h WORD returned total clusters
- 28h WORD returned sectors per cluster
- 2Ah WORD returned bytes per sector
- 2Ch WORD returned available clusters
- 2Eh BYTE returned ???
- 2Fh BYTE ???
- ---class 05h functions 03h,04h,05h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h 4 BYTEs ???
- 26h DWORD pointer to directory name
- ---class 05h function 06h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h 4 BYTEs ???
- 26h WORD attribute mask
- 28h DWORD pointer to filename
- ---class 05h function 07h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h 4 BYTEs ???
- 26h WORD attribute mask
- 28h DWORD pointer to source filespec
- 2Ch DWORD pointer to destination filespec
- ---class 05h function 08h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h 4 BYTEs ???
- 26h BYTE 00h FINDFIRST
- 01h FINDNEXT
- 28h DWORD pointer to FindFirst search data + 01h if FINDNEXT
- 2Ch WORD search attribute if FINDFIRST
- 2Eh DWORD pointer to filespec if FINDFIRST
- ---class 05h function 09h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h DWORD pointer to IFS open file structure (see #0758)
- 26h WORD ??? \ together, specify open vs. create, whether or
- 28h WORD ??? / not to truncate
- 2Ah 4 BYTEs ???
- 2Eh DWORD pointer to filename
- 32h 4 BYTEs ???
- 36h WORD file attributes on call
- returned ???
- 38h WORD returned ???
- ---class 05h function 0Ah---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h DWORD pointer to IFS open file structure (see #0758)
- 26h BYTE seek type (02h = from end)
- 28h DWORD offset on call
- returned new absolute position
- ---class 05h functions 0Bh,0Ch---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h DWORD pointer to IFS open file structure (see #0758)
- 28h WORD number of bytes to transfer
- returned bytes actually transferred
- 2Ah DWORD transfer address
- ---class 05h function 0Dh---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h DWORD pointer to IFS open file structure (see #0758)
- 26h BYTE file handle???
- 27h BYTE unused???
- 28h WORD ???
- 2Ah WORD ???
- 2Ch WORD ???
- 2Eh WORD ???
- ---class 05h function 0Eh---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h DWORD pointer to IFS open file structure (see #0758)
- 26h BYTE 00h commit file
- 01h close file
- 27h BYTE unused???
- ---class 05h function 0Fh---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h 4 BYTEs ???
- 26h BYTE 02h GET attributes
- 03h PUT attributes
- 27h BYTE unused???
- 28h 12 BYTEs ???
- 34h WORD search attributes???
- 36h DWORD pointer to filename
- 3Ah WORD (GET) returned ???
- 3Ch WORD (GET) returned ???
- 3Eh WORD (GET) returned ???
- 40h WORD (GET) returned ???
- 42h WORD (PUT) new attributes
- (GET) returned attributes
- ---class 05h function 10h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h DWORD pointer to IFS open file structure (see #0758)
- 26h WORD ???
- 28h DWORD pointer to ???
- 2Ch WORD ???
- 2Eh BYTE ???
- 2Fh BYTE subfunction
- 01h get printer setup
- 03h ???
- 04h ???
- 05h ???
- 06h ???
- 07h ???
- 21h set printer setup
- ---class 05h function 11h---
- 17h 7 BYTEs ???
- 1Eh DWORD pointer to ???
- 22h DWORD pointer to IFS open file structure (see #0758)
- 26h BYTE subfunction
- 27h BYTE unused???
- 28h WORD ???
- 2Ah WORD ???
- 2Ch WORD ???
- 2Eh BYTE ???
- 2Fh BYTE ???
- ---class 05h function 12h---
- 17h 15 BYTEs unused???
- 26h WORD PSP segment
- 28h BYTE type of process termination
- 29h BYTE unused???
- ---class 05h function 13h---
- 17h 15 BYTEs unused???
- 26h WORD PSP segment
- ---request class 06h---
- 16h DWORD returned pointer to string corresponding to error code at 03h
- 1Ah BYTE returned ???
- 1Bh BYTE unused
- ---request class 07h---
- 16h DWORD pointer to IFS open file structure (see #0758)
- 1Ah BYTE ???
- 1Bh BYTE unused???
- SeeAlso: #0755,#0756,#0758
-
- Format of IFS open file structure:
- Offset Size Description (Table 0758)
- 00h WORD ???
- 02h WORD device info word
- 04h WORD file open mode
- 06h WORD ???
- 08h WORD file attributes
- 0Ah WORD owner's network machine number
- 0Ch WORD owner's PSP segment
- 0Eh DWORD file size
- 12h DWORD current offset in file
- 16h WORD file time
- 18h WORD file date
- 1Ah 11 BYTEs filename in FCB format
- 25h WORD ???
- 27h WORD hash value of SFT address
- (low word of linear address + segment&F000h)
- 29h 3 WORDs network info from SFT
- 2Fh WORD ???
-
- Format of one item in DOS 4+ list of special program names:
- Offset Size Description (Table 0759)
- 00h BYTE length of name (00h = end of list)
- 01h N BYTEs name in format name.ext
- N 2 BYTEs DOS version to return for program (major,minor)
- (see AH=30h,INT 2F/AX=122Fh)
- ---DOS 4 only---
- N+2 BYTE number of times to return fake version number (FFh = always)
- Note: if the name of the executable for the program making the DOS "get
- version" call matches one of the names in this list, DOS returns the
- specified version rather than the true version number
- --------v-215252-----------------------------
- INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
- AX = 5252h
- Return: BX = FFEEh if resident
- SeeAlso: AX=4BFFh"Cascade",AX=58CCh
- --------D-2153-------------------------------
- INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
- AH = 53h
- DS:SI -> BIOS Parameter Block (see #0760)
- ES:BP -> buffer for Drive Parameter Block (see #0514 at AH=32h)
- Return: ES:BP buffer filled
- Note: for DOS 3+, the cluster at which to start searching is set to 0000h
- and the number of free clusters is set to FFFFh (unknown)
-
- Format of BIOS Parameter Block:
- Offset Size Description (Table 0760)
- 00h WORD number of bytes per sector
- 02h BYTE number of sectors per cluster
- 03h WORD number of reserved sectors at start of disk
- 05h BYTE number of FATs
- 06h WORD number of entries in root directory
- 08h WORD total number of sectors
- for DOS 4+, set to zero if partition >32M, then set DWORD at
- 15h to actual number of sectors
- 0Ah BYTE media ID byte
- 0Bh WORD number of sectors per FAT
- ---DOS 3+---
- 0Dh WORD number of sectors per track
- 0Fh WORD number of heads
- 11h DWORD number of hidden sectors
- 15h 11 BYTEs reserved
- ---DOS 4+ ---
- 15h DWORD total number of sectors if word at 08h contains zero
- 19h 6 BYTEs ???
- 1Fh WORD number of cylinders
- 21h BYTE device type
- 22h WORD device attributes (removable or not, etc)
- ---DR-DOS 5+ ---
- 15h DWORD total number of sectors if word at 08h contains zero
- 19h 6 BYTEs reserved
- ---European MS-DOS 4.00---
- 15h DWORD total number of sectors if word at 08h contains zero
- (however, this DOS does not actually implement >32M partitions)
- SeeAlso: #0514
- --------D-2154-------------------------------
- INT 21 - DOS 2+ - GET VERIFY FLAG
- AH = 54h
- Return: AL = verify flag
- 00h off
- 01h on (all disk writes verified after writing)
- SeeAlso: AH=2Eh
- --------D-2155-------------------------------
- INT 21 - DOS 2+ internal - CREATE CHILD PSP
- AH = 55h
- DX = segment at which to create new PSP
- SI = (DOS 3+) value to place in memory size field at DX:[0002h]
- Return: CF clear if successful
- Notes: creates a "child" PSP rather than making an exact copy of the current
- PSP; the new PSP's parent pointer is set to the current PSP and the
- reference count for each inherited file is incremented
- (DOS 2+) sets current PSP to DX
- (DOS 3+) marks "no inherit" file handles as closed in child PSP
- SeeAlso: AH=26h,AH=50h
- --------D-2156-------------------------------
- INT 21 - DOS 2+ - "RENAME" - RENAME FILE
- AH = 56h
- DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
- ES:DI -> ASCIZ new filename (no wildcards)
- CL = attribute mask (server call only, see below)
- Return: CF clear if successful
- CF set on error
- AX = error code (02h,03h,05h,11h) (see #0770)
- Notes: allows move between directories on same logical volume
- this function does not set the archive attribute
- (see #0535 at AX=4301h), which results in incremental backups not
- backing up the file under its new name
- open files should not be renamed
- (DOS 3+) allows renaming of directories
- (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
- error 12h (no more files) is returned on success, and both source and
- destination specs must be canonical (as returned by AH=60h).
- Wildcards in the destination are replaced by the corresponding char
- of each source file being renamed. Under DOS 3.x, the call will fail
- if the destination wildcard is *.* or equivalent; under DR-DOS 5.0,
- the call will fail if any wildcards are used. When invoked via
- AX=5D00h, only those files matching the attribute mask in CL are
- renamed.
- under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
- and the new-name pointer is in ES:EDI (DS must equal ES)
- BUG: under DR-DOS 3.41, this function will generate a new directory entry
- with the new name (including any wildcards) which can only be removed
- with a sector editor when invoked via AX=5D00h
- SeeAlso: AH=17h,AX=4301h,AX=5D00h,AH=60h,AH=71h
- --------D-215700-----------------------------
- INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
- AX = 5700h
- BX = file handle
- Return: CF clear if successful
- CX = file's time (see #0761)
- DX = file's date (see #0762)
- CF set on error
- AX = error code (01h,06h) (see #0770)
- Note: under DR-DOS 3.41 and 5.0, this function returns 0 (no date/time) for
- character devices; MS-DOS returns date and time of opening
- SeeAlso: AX=5701h
-
- Bitfields for file time:
- Bit(s) Description (Table 0761)
- 15-11 hours (0-23)
- 10-5 minutes
- 4-0 seconds/2
-
- Bitfields for file date:
- Bit(s) Description (Table 0762)
- 15-9 year - 1980
- 8-5 month
- 4-0 day
- --------D-215701-----------------------------
- INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
- AX = 5701h
- BX = file handle
- CX = new time (see #0761)
- DX = new date (see #0762)
- Return: CF clear if successful
- CF set on error
- AX = error code (01h,06h) (see #0770)
- SeeAlso: AX=5700h
- --------D-215702-----------------------------
- INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTES FOR FILE
- AX = 5702h
- BX = file handle
- CX = size of result buffer or 0000h
- DS:SI -> EAP list (see #0763)
- ES:DI -> buffer for returned EAV list (see #0766)
- Return: CF clear if successful
- CX = size of returned data
- CF set on error
- AX = error code (see #0770)
- Desc: get the current value of one or more extended attributes
- Notes: if CX=0000h on entry, ES:DI is ignored and no data is actually
- returned, only the amount of data which is available
- the default DOS 4 behavior is to return a single word of 0000h (no
- structures) in the result buffer if CX>=0002h on entry
- SeeAlso: AX=5703h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
-
- Format of EAP (extended attribute properties) list:
- Offset Size Description (Table 0763)
- 00h WORD number of EAP structures following
- 02h var array of EAP structures (see #0764)
- SeeAlso: #0766
-
- Format of EAP (extended attribute property) structure:
- Offset Size Description (Table 0764)
- 00h BYTE attribute type
- 01h boolean (either 00h or 01h)
- 02h number (BYTE, WORD, or DWORD)
- 03h string
- 04h date stamp
- 05h time stamp
- 01h WORD EAP flags (see #0765)
- 03h BYTE size of reference string (name)
- 04h N BYTEs reference string
-
- Bitfields for EAP flags:
- Bit(s) Description (Table 0765)
- 12 unchangeable
- 13 ignore
- 14 unchangeable
- 15 used by COMMAND.COM for code page, but not understood by ATTRIB
-
- Format of EAV (extended attribute value) list:
- Offset Size Description (Table 0766)
- 00h WORD number of EAV structures following
- 02h var array of Extended Attribute Value structures (see #0767)
- SeeAlso: #0763
-
- Format of Extended Attribute Value structures:
- Offset Size Description (Table 0767)
- 00h 4 BYTEs ???
- 04h BYTE size of reference string
- 05h WORD size of value
- 07h var reference string
- var value
- --------O-215702-----------------------------
- INT 21 - OS/2 v1.1+ Family API - DosQFileInfo
- AX = 5702h
- BX = file handle
- CX = size of buffer for information
- DX = level of information
- ES:DI -> buffer for information
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
- --------O-215702BXFFFF-----------------------
- INT 21 - OS/2 v1.1+ Compatibility Box Family API - DosQPathInfo
- AX = 5702h
- BX = FFFFh
- CX = size of buffer for information
- DX = level of information (0002h)
- DS:SI -> filename
- ES:DI -> buffer for FAPI path information (see #0768)
- Return: CF clear if successful
- AL = 00h
- CF set on error
- AX = error code
- SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
-
- Format of FAPI path information:
- Offset Size Description (Table 0768)
- 00h 22 BYTEs ???
- 16h DWORD extended attribute size (none present if less than 5)
- --------D-215703-----------------------------
- INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTE PROPERTIES
- AX = 5703h
- BX = file handle
- CX = size of result buffer or 0000h
- ES:DI -> result buffer
- Return: CF clear if successful
- CX = size of returned data
- CF set on error
- AX = error code (see #0770)
- ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
- Desc: get a list of the extended attributes which are defined for the
- specified file
- Notes: if CX=0000h on entry, ES:DI is ignored and no data is actually
- returned, only the amount of data which is available
- the default DOS 4 behavior is to return a trivial EAP list consisting
- of the single word 0000h (no EAP structures) if CX>=0002h on entry
- SeeAlso: AX=5702h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
- --------O-215703-----------------------------
- INT 21 - OS/2 v1.1+ Family API - DosSetFileInfo
- AX = 5703h
- BX = file handle
- CX = size of information buffer
- DX = level of information
- ES:DI -> information buffer
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
- --------O-215703BXFFFF-----------------------
- INT 21 - OS/2 v1.1+ Family API - DosSetPathInfo
- AX = 5703h
- BX = FFFFh
- CX = size of information buffer
- DX = level of information
- DS:SI -> filename
- ES:DI -> information buffer
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
- --------D-215704-----------------------------
- INT 21 - DOS 4.x only - SET EXTENDED ATTRIBUTES
- AX = 5704h
- BX = file handle
- ES:DI -> EAV list (see #0766)
- Return: CF clear if successful
- CF set on error
- AX = error code (see #0770)
- Note: the default DOS 4 behavior is to do nothing and return successfully
- SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
- ----------215757BX5757-----------------------
- INT 21 U - IBM Genie - Resident Manager - INSTALLATION CHECK
- AX = 5757h
- BX = 5757h
- Return: AX = 0000h if installed
- BX = ???
- DX = ???
- DS:SI -> list of 27 DWORD entry point addresses
- Program: IBM Genie is a set of utility TSRs by Helix Software
- Note: other functions possible if BX <> 5757h, but details not yet available
- ----------215758-----------------------------
- INT 21 U - Headroom - API
- AX = 5758h
- BL = function
- 00h ???
- 01h get Headroom location
- Return: CF clear if installed
- AX = PSP segment of Headroom TSR
- BX = paragraphs of memory used by Headroom
- CF set if not (normal DOS return)
- Note: this function is also used as an installation check
- 02h get INT 21 handler
- Return: CF clear
- ES:BX -> Headroom's INT 21 handler
- Note: also sets unknown flag
- 03h launch application???
- DS:SI -> 233-byte application record
- Return: ???
- 04h ???
- ???
- Return: CF clear
- 05h get swap directory
- Return: CF clear
- DX:AX -> ASCIZ swap directory name
- 06h ???
- DX = ???
- Return: CF clear
- 07h ???
- 08h ???
- 09h get current application
- Return: BX = application number
- 0Ah ???
- DX = application number
- DS:SI = ???
- Return: ???
- 0Bh ???
- 0Ch ???
- DX = application number
- ???
- Return: ???
- 0Dh ???
- DX = application number
- ???
- Return: ???
- 0Eh get ???
- Return: CF clear
- AX = ???
- 0Fh set ??? flag
- 10h clear ??? flag
- 11h find application by name
- DS:SI -> ASCIZ application name
- Return: CF clear
- AX = application number or FFFFh if not loaded
- 12h ???
- DX = application number
- Return: CF clear
- ???
- 13h ???
- Return: CF clear
- 14h ???
- same as function 13h
- 15h set ???
- DX = ???
- 16h get ???
- Return: AX = ??? set by function 15h
- 17h get ???
- Return: BX = ???
- CX = ??? (may be pointer in BX:CX)
- 18h BUG: branches incorrectly due to fencepost error
- Program: Headroom is a TSR/task switcher by Helix Software
- SeeAlso: AX=4C57h,AX=5757h,INT 2F/AX=5758h
- --------D-2158-------------------------------
- INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY
- AH = 58h
- AL = subfunction
- 00h get allocation strategy
- Return: AX = current strategy (see #0769)
- 01h set allocation strategy
- BL = new allocation strategy (see #0769)
- BH = 00h (DOS 5+)
- Return: CF clear if successful
- CF set on error
- AX = error code (01h) (see #0770)
- Notes: the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
- 2 or greater means last fit
- the Get subfunction returns the last value set
- setting an allocation strategy involving high memory does not
- automatically link in the UMB memory chain; this must be done
- explicitly with AX=5803h in order to actually allocate high memory
- a program which changes the allocation strategy should restore it
- before terminating
- Toshiba MS-DOS 2.11 supports subfunctions 00h and 01h
- DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
- SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
-
- (Table 0769)
- Values for DOS memory allocation strategy:
- 00h low memory first fit
- 01h low memory best fit
- 02h low memory last fit
- ---DOS 5+ ---
- 40h high memory first fit
- 41h high memory best fit
- 42h high memory last fit
- 80h first fit, try high then low memory
- 81h best fit, try high then low memory
- 82h last fit, try high then low memory
- --------D-2158-------------------------------
- INT 21 - DOS 5+ - GET OR SET UMB LINK STATE
- AH = 58h
- AL = subfunction
- 02h get UMB link state
- Return: AL = current link state
- 00h UMBs not part of DOS memory chain
- 01h UMBs in DOS memory chain
- 03h set UMB link state
- BX = new link state
- 0000h remove UMBs from DOS memory chain
- 0001h add UMBs to DOS memory chain
- Return: CF clear if successful
- CF set on error
- AX = error code (01h) (see #0770)
- Note: a program which changes the UMB link state should restore it before
- terminating
- --------v-2158CC-----------------------------
- INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
- AX = 58CCh
- Return: CF clear if resident
- SeeAlso: AX=5252h,AX=58DDh,AX=6969h
- --------v-2158DD-----------------------------
- INT 21 - VIRUS - "1067"/"Headcrash" - GET ORIGINAL INT 21h VECTOR
- AX = 58DDh
- Return: CX = code segment of virus
- ES:BX = old INT 21h vector
- SeeAlso: AX=5252h,AX=58CCh,AX=6969h
- --------D-2159--BX0000-----------------------
- INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
- AH = 59h
- BX = 0000h
- Return: AX = extended error code (see #0770)
- BH = error class (see #0772)
- BL = recommended action (see #0773)
- CH = error locus (see #0774)
- ES:DI may be pointer (see #0771, error code list below)
- CL, DX, SI, BP, and DS destroyed
- Notes: functions available under DOS 2.x map the true DOS 3+ error code into
- one supported under DOS 2.x
- you should call this function to retrieve the true error code when an
- FCB or DOS 2.x call returns an error
- under DR-DOS 5.0, this function does not use any of the DOS-internal
- stacks and may thus be called at any time
- SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh
-
- (Table 0770)
- Values for DOS extended error code:
- 00h (0) no error
- 01h (1) function number invalid
- 02h (2) file not found
- 03h (3) path not found
- 04h (4) too many open files (no handles available)
- 05h (5) access denied
- 06h (6) invalid handle
- 07h (7) memory control block destroyed
- 08h (8) insufficient memory
- 09h (9) memory block address invalid
- 0Ah (10) environment invalid (usually >32K in length)
- 0Bh (11) format invalid
- 0Ch (12) access code invalid
- 0Dh (13) data invalid
- 0Eh (14) reserved
- 0Fh (15) invalid drive
- 10h (16) attempted to remove current directory
- 11h (17) not same device
- 12h (18) no more files
- ---DOS 3+---
- 13h (19) disk write-protected
- 14h (20) unknown unit
- 15h (21) drive not ready
- 16h (22) unknown command
- 17h (23) data error (CRC)
- 18h (24) bad request structure length
- 19h (25) seek error
- 1Ah (26) unknown media type (non-DOS disk)
- 1Bh (27) sector not found
- 1Ch (28) printer out of paper
- 1Dh (29) write fault
- 1Eh (30) read fault
- 1Fh (31) general failure
- 20h (32) sharing violation
- 21h (33) lock violation
- 22h (34) disk change invalid (ES:DI -> media ID structure)(see #0771)
- 23h (35) FCB unavailable
- 24h (36) sharing buffer overflow
- 25h (37) (DOS 4+) code page mismatch
- 26h (38) (DOS 4+) cannot complete file operation (out of input)
- 27h (39) (DOS 4+) insufficient disk space
- 28h-31h reserved
- 32h (50) network request not supported
- 33h (51) remote computer not listening
- 34h (52) duplicate name on network
- 35h (53) network name not found
- 36h (54) network busy
- 37h (55) network device no longer exists
- 38h (56) network BIOS command limit exceeded
- 39h (57) network adapter hardware error
- 3Ah (58) incorrect response from network
- 3Bh (59) unexpected network error
- 3Ch (60) incompatible remote adapter
- 3Dh (61) print queue full
- 3Eh (62) queue not full
- 3Fh (63) not enough space to print file
- 40h (64) network name was deleted
- 41h (65) network: Access denied
- 42h (66) network device type incorrect
- 43h (67) network name not found
- 44h (68) network name limit exceeded
- 45h (69) network BIOS session limit exceeded
- 46h (70) temporarily paused
- 47h (71) network request not accepted
- 48h (72) network print/disk redirection paused
- 49h (73) network software not installed
- (LANtastic) invalid network version
- 4Ah (74) unexpected adapter close
- (LANtastic) account expired
- 4Bh (75) (LANtastic) password expired
- 4Ch (76) (LANtastic) login attempt invalid at this time
- 4Dh (77) (LANtastic v3+) disk limit exceeded on network node
- 4Eh (78) (LANtastic v3+) not logged in to network node
- 4Fh (79) reserved
- 50h (80) file exists
- 51h (81) reserved
- 52h (82) cannot make directory
- 53h (83) fail on INT 24h
- 54h (84) (DOS 3.3+) too many redirections
- 55h (85) (DOS 3.3+) duplicate redirection
- 56h (86) (DOS 3.3+) invalid password
- 57h (87) (DOS 3.3+) invalid parameter
- 58h (88) (DOS 3.3+) network write fault
- 59h (89) (DOS 4+) function not supported on network
- 5Ah (90) (DOS 4+) required system component not installed
- 64h (100) (MSCDEX) unknown error
- 65h (101) (MSCDEX) not ready
- 66h (102) (MSCDEX) EMS memory no longer valid
- 67h (103) (MSCDEX) not High Sierra or ISO-9660 format
- 68h (104) (MSCDEX) door open
-
- Format of media ID structure:
- Offset Size Description (Table 0771)
- 00h 12 BYTEs ASCIZ volume label of required disk
- 0Ch DWORD serial number (DOS 4+)
-
- (Table 0772)
- Values for DOS Error Class:
- 01h out of resource (storage space or I/O channels)
- 02h temporary situation (file or record lock)
- 03h authorization (denied access)
- 04h internal (system software bug)
- 05h hardware failure
- 06h system failure (configuration file missing or incorrect)
- 07h application program error
- 08h not found
- 09h bad format
- 0Ah locked
- 0Bh media error
- 0Ch already exists
- 0Dh unknown
-
- (Table 0773)
- Values for DOS Suggested Action:
- 01h retry
- 02h delayed retry
- 03h prompt user to reenter input
- 04h abort after cleanup
- 05h immediate abort
- 06h ignore
- 07h retry after user intervention
-
- (Table 0774)
- Values for DOS Error Locus:
- 01h unknown or not appropriate
- 02h block device (disk error)
- 03h network related
- 04h serial device (timeout)
- 05h memory related
- --------D-2159--BX0001-----------------------
- INT 21 - European MS-DOS 4.0 - GET HARD ERROR INFORMATION
- AH = 59h
- BX = 0001h
- Return: ES:DI -> hard error information packet (see #0775) for most recent
- hard (critical) error
- SeeAlso: AH=59h/BX=0000h,AH=95h,INT 24
-
- Format of European MS-DOS 4.0 hard error information packet:
- Offset Size Description (Table 0775)
- 00h WORD contents of AX at system entry
- 02h WORD Process ID which encountered error
- 04h WORD contents of AX at time of error
- 06h BYTE error type
- 00h physical I/O error
- 01h disk change request
- 02h file sharing violation
- 03h FCB problem
- 04h file locking violation
- 05h bad FAT
- 06h network detected error
- 07h BYTE INT 24 error code
- 08h WORD extended error code (see #0770)
- 0Ah DWORD pointer to associated device
- --------D-215A-------------------------------
- INT 21 - DOS 3+ - CREATE TEMPORARY FILE
- AH = 5Ah
- CX = file attribute (see #0535 at AX=4301h)
- DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
- generated filename
- Return: CF clear if successful
- AX = file handle opened for read/write in compatibility mode
- DS:DX pathname extended with generated name for temporary file
- CF set on error
- AX = error code (03h,04h,05h) (see #0770)
- Desc: creates a file with a unique name which must be explicitly deleted
- BUGS: COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
- wraps around to the end of the segment
- MS-DOS 5.00 revisions A and B and PC-DOS 5.00 revision A reportedly
- hang the system if the specified path is the root directory and the
- root directory is full (no free directory entries)
- Note: under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
- SeeAlso: AH=3Ch,AH=5Bh
- --------D-215B-------------------------------
- INT 21 - DOS 3+ - CREATE NEW FILE
- AH = 5Bh
- CX = file attribute (see #0535 at AX=4301h)
- DS:DX -> ASCIZ filename
- Return: CF clear if successful
- AX = file handle opened for read/write in compatibility mode
- CF set on error
- AX = error code (03h,04h,05h,50h) (see #0770)
- Notes: unlike AH=3Ch, this function will fail if the specified file exists
- rather than truncating it; this permits its use in creating semaphore
- files because it is an atomic "test and set" operation
- under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
- SeeAlso: AH=3Ch,AH=5Ah
- --------D-215C-------------------------------
- INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
- AH = 5Ch
- AL = subfunction
- 00h lock region of file
- 01h unlock region of file
- BX = file handle
- CX:DX = start offset of region within file
- SI:DI = length of region in bytes
- Return: CF clear if successful
- CF set on error
- AX = error code (01h,06h,21h,24h) (see #0770)
- Notes: error returned unless SHARE or network installed
- an unlock call must specify the same region as some prior lock call
- locked regions become entirely inaccessible to other processes
- duplicate handles created with AH=45h or AH=46h inherit locks, but
- handles inherited by child processes (see AH=4Bh) do not
- under DR-DOS 3.41 and 5.0, if a process opens a file without the no-
- inherit flag and then starts a child, any locks set by the parent
- are ignored, and the child will only get an error if it tries to
- lock an area previously locked by the parent process
- SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
- --------D-215D00-----------------------------
- INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
- AX = 5D00h
- DS:DX -> DOS parameter list (see #0776)
- DPL contains all register values for a call to INT 21h
- Return: as appropriate for function being called
- Notes: does not check AH. Out of range values will crash the system
- executes using specified computer ID and process ID
- sharing delay loops skipped
- a special sharing mode is enabled to handle FCBs opened across network
- wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) under
- MS-DOS; under DR-DOS 3.41, wildcards corrupt the filesystem; and
- under DR-DOS 5.0-6.0, the call returns error code 03h due to improper
- support for the server function call (see below)
- an extra file attribute parameter is enabled for OPEN (AH=3Dh),
- DELETE (AH=41h), and RENAME (AH=56h)
- functions which take filenames require canonical names (as returned
- by AH=60h); this is apparently to prevent multi-hop file forwarding
- BUGS: the OS/2 2.0 DOS Boot Session incorrectly maps DOS drive letters,
- seemingly ignoring HPFS drives
- DR-DOS 5.0-6.0 merely recursively call INT 21 after loading the
- registers from the DPL, leading to problems for peer-to-peer
- networks
- SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
-
- Format of DOS parameter list:
- Offset Size Description (Table 0776)
- 00h WORD AX
- 02h WORD BX
- 04h WORD CX
- 06h WORD DX
- 08h WORD SI
- 0Ah WORD DI
- 0Ch WORD DS
- 0Eh WORD ES
- 10h WORD reserved (0)
- 12h WORD computer ID (0 = current system)
- 14h WORD process ID (PSP segment on specified computer)
- Note: under Windows Enhanced mode, the computer ID is normally the virtual
- machine ID (see INT 2F/AX=1683h), though this can reportedly be
- changed by setting UniqueDOSPSP= in SYSTEM.INI
- --------D-215D01-----------------------------
- INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
- AX = 5D01h
- DS:DX -> DOS parameter list (see #0776), only computer ID and
- process ID fields used
- Return: CF set on error
- AX = error code (see #0770)
- CF clear if successful
- Notes: flushes buffers and updates directory entries for each file which has
- been written to; if remote file, calls INT 2F/AX=1107h
- the computer ID and process ID are stored but ignored under DOS 3.3
- not supported by DR-DOS 3.41 and 5.0; returns error code 01h
- SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
- --------D-215D02-----------------------------
- INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
- AX = 5D02h
- DS:DX -> DOS parameter list (see #0776), only fields DX, DS,
- computer ID, and process ID used
- DPL's DS:DX -> ASCIZ name of file to close
- Return: CF set on error
- AX = error code (see #0770)
- CF clear if successful
- Notes: error unless SHARE is loaded (calls [SysFileTable-28h])
- (see #0732 at AH=52h)
- name must be canonical fully-qualified, such as returned by AH=60h
- not supported by DR-DOS 3.41 and 5.0; returns error code 01h
- SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
- --------D-215D03-----------------------------
- INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
- AX = 5D03h
- DS:DX -> DOS parameter list (see #0776), only computer ID used
- Return: CF set on error
- AX = error code (see #0770)
- CF clear if successful
- Notes: error unless SHARE is loaded (calls [SysFileTable-30h])
- (see #0732 at AH=52h)
- not supported by DR-DOS 3.41 and 5.0; returns error code 01h
- SeeAlso: AX=5D02h,AX=5D04h
- --------D-215D04-----------------------------
- INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
- AX = 5D04h
- DS:DX -> DOS parameter list (see #0776), only computer ID and
- process ID fields used
- Return: CF set on error
- AX = error code (see #0770)
- CF clear if successful
- Notes: error unless SHARE is loaded (calls [SysFileTable-2Ch])
- (see #0732 at AH=52h)
- not supported by DR-DOS 3.41 and 5.0; returns error code 01h
- SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
- --------D-215D05-----------------------------
- INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
- AX = 5D05h
- DS:DX -> DOS parameter list (see #0776)
- DPL's BX = index of sharing record (see #0733 at AH=52h)
- DPL's CX = index of SFT in sharing record's SFT list
- Return: CF clear if successful
- ES:DI -> ASCIZ filename
- BX = network machine number of SFT's owner
- CX = number of locks held by SFT's owner
- CF set if either index out of range
- AX = 0012h (no more files)
- Notes: error unless SHARE is loaded (calls [SysFileTable-18h])
- (see #0732 at AH=52h)
- names are always canonical fully-qualified, such as returned by AH=60h
- not supported by DR-DOS 3.41 and 5.0, but does not return an error
- SeeAlso: AH=5Ch,AH=60h
- --------D-215D06-----------------------------
- INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
- AX = 5D06h
- Return: CF set on error
- AX = error code (see #0770)
- CF clear if successful
- DS:SI -> nonreentrant data area (includes all three DOS stacks)
- (critical error flag is first byte) (see #0777)
- CX = size in bytes of area which must be swapped while in DOS
- DX = size in bytes of area which must always be swapped
- Notes: the Critical Error flag is used in conjunction with the InDOS flag
- (see AH=34h) to determine when it is safe to enter DOS from a TSR
- setting CritErr flag allows use of functions 50h/51h from INT 28h under
- DOS 2.x by forcing use of correct stack
- swapping the data area allows reentering DOS unless DOS is in a
- critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
- under DOS 4.0, AX=5D0Bh should be used instead of this function
- SHARE and other DOS utilities consult the byte at offset 04h in the
- DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
- in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
- DR-DOS 3.41+ supports this function, but the SDA format beyond the
- first 18h bytes is completely different from MS-DOS
- SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
-
- Format of DOS 3.10-3.30 Swappable Data Area:
- Offset Size Description (Table 0777)
- -34 BYTE (DOS 3.10+) printer echo flag (00h off, FFh active)
- -31 BYTE (DOS 3.30) current switch character
- -28 BYTE (DOS 3.30) incremented on each INT 21/AX=5E01h call
- -27 16 BYTEs (DOS 3.30) machine name set by INT 21/AX=5E01h
- -11 5 WORDs zero-terminated list of offsets which need to be patched to
- enable critical-section calls (see INT 2A/AH=80h)
- -1 BYTE unused padding
- ---start of actual SDA---
- 00h BYTE critical error flag ("ErrorMode")
- 01h BYTE InDOS flag (count of active INT 21 calls)
- 02h BYTE drive on which current critical error occurred, or FFh
- (DR-DOS sets to drive number during INT 24, 00h otherwise)
- 03h BYTE locus of last error
- 04h WORD extended error code of last error
- 06h BYTE suggested action for last error
- 07h BYTE class of last error
- 08h DWORD ES:DI pointer for last error
- 0Ch DWORD current DTA
- 10h WORD current PSP
- 12h WORD stores SP across an INT 23
- 14h WORD return code from last process termination (zerod after reading
- with AH=4Dh)
- 16h BYTE current drive
- 17h BYTE extended break flag
- ---remainder need only be swapped if in DOS---
- 18h WORD value of AX on call to INT 21
- 1Ah WORD PSP segment for sharing/network
- 1Ch WORD network machine number for sharing/network (0000h = us)
- 1Eh WORD first usable memory block found when allocating memory
- 20h WORD best usable memory block found when allocating memory
- 22h WORD last usable memory block found when allocating memory
- 24h WORD memory size in paragraphs (used only during initialization)
- 26h WORD last entry checked during directory search
- 28h BYTE flag: INT 24 returned Fail
- 29h BYTE flags: allowable INT 24 actions (passed to INT 24 in AH)
- 2Ah BYTE directory flag (00h directory, 01h file)
- 2Bh BYTE flag: FFh if Ctrl-Break termination, 00h otherwise
- 2Ch BYTE flag: allow embedded blanks in FCB
- 2Dh BYTE padding (unused)
- 2Eh BYTE day of month
- 2Fh BYTE month
- 30h WORD year - 1980
- 32h WORD number of days since 1-1-1980
- 34h BYTE day of week (0 = Sunday)
- 35h BYTE flag: console swapped during read from device
- 36h BYTE flag: safe to call INT 28 if nonzero
- 37h BYTE flag: if nonzero, INT 24 Abort turned into INT 24 Fail
- (set only during process termination)
- 38h 26 BYTEs device driver request header (see INT 2F/AX=0802h)
- 52h DWORD pointer to device driver entry point (used in calling driver)
- 56h 22 BYTEs device driver request header for I/O calls
- 6Ch 14 BYTEs device driver request header for disk status check
- 7Ah DWORD pointer to device I/O buffer???
- 7Eh WORD ???
- 80h WORD ???
- 82h BYTE type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
- 83h BYTE padding (unused)
- 84h 3 BYTEs 24-bit user number (see AH=30h)
- 87h BYTE OEM number (see #0513 at AH=30h)
- 88h WORD offset to error code conversion table for INT 25/INT 26
- 8Ah 6 BYTEs CLOCK$ transfer record (see #0745 at AH=52h)
- 90h BYTE device I/O buffer for single-byte I/O functions
- 91h BYTE padding??? (unused)
- 92h 128 BYTEs buffer for filename
- 112h 128 BYTEs buffer for filename
- 192h 21 BYTEs findfirst/findnext search data block (see #0723 at AH=4Eh)
- 1A7h 32 BYTEs directory entry for found file (see #0475 at AH=11h)
- 1C7h 81 BYTEs copy of current directory structure for drive being accessed
- 218h 11 BYTEs FCB-format filename for device name comparison
- 223h BYTE terminating NUL for above filename
- 224h 11 BYTEs wildcard destination specification for rename (FCB format)
- 22Fh BYTE terminating NUL for above spec
- 230h BYTE ???
- 231h WORD destination file/directory starting sector
- 233h 5 BYTEs ???
- 238h BYTE extended FCB file attribute
- 239h BYTE type of FCB (00h regular, FFh extended)
- 23Ah BYTE directory search attributes
- 23Bh BYTE file open/access mode
- 23Ch BYTE file found/delete flag
- bit 0: file found
- bit 4: file deleted
- 23Dh BYTE flag: device name found on rename, or file not found
- 23Eh BYTE splice flag (file name and directory name together)
- 23Fh BYTE flag indicating how DOS function was invoked
- (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
- 240h BYTE sector position within cluster
- 241h BYTE flag: translate sector/cluster (00h no, 01h yes)
- 242h BYTE flag: 00h if read, 01h if write
- 243h BYTE current working drive number
- 244h BYTE cluster factor
- 245h BYTE flag: cluster split mode
- 246h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on)
- 247h BYTE canonicalized filename referred to existing file/dir if FFh
- 248h BYTE volume ID flag
- 249h BYTE type of process termination (00h-03h) (see AH=4Dh)
- 24Ah BYTE file create flag (00h = no, search only)
- 24Bh BYTE value with which to replace first byte of deleted file's name
- (normally E5h, but 00h as described under INT 21/AH=13h)
- 24Ch DWORD pointer to Drive Parameter Block for critical error invocation
- temp: used during process termination
- 250h DWORD pointer to stack frame containing user registers on INT 21
- 254h WORD stores SP across INT 24
- 256h DWORD pointer to DOS Drive Parameter Block for ???
- 25Ah WORD saving partial cluster number
- 25Ch WORD temp: sector of work current cluster
- 25Eh WORD high part of cluster number (only low byte referenced)
- 260h WORD ??? temp
- 262h BYTE Media ID byte returned by AH=1Bh,1Ch
- 263h BYTE padding (unused)
- 264h DWORD pointer to device header when filename is character device
- 268h DWORD pointer to current SFT
- 26Ch DWORD pointer to current directory structure for drive being accessed
- 270h DWORD pointer to caller's FCB
- 274h WORD number of SFT to which file being opened will refer
- 276h WORD temporary storage for file handle
- 278h DWORD pointer to a JFT entry in process handle table
- (see #0498 at AH=26h)
- 27Ch WORD offset in DOS DS of first filename argument
- 27Eh WORD offset in DOS DS of second filename argument
- 280h WORD offset of last component in pathname or FFFFh
- 282h WORD offset of transfer address to add
- 284h WORD last relative cluster within file being accessed
- 286h WORD temp: absolute cluster number being accessed
- 288h WORD directory sector number
- 28Ah WORD ??? current cluster number
- 28Ch WORD current relative sector number within file
- 28Eh WORD current sector number
- 290h WORD current byte offset within sector
- 292h DWORD current offset in file
- 296h DWORD temp: file byte count
- 29Ah WORD temp: file byte count
- 29Ch WORD free file cluster entry
- 29Eh WORD last file cluster entry
- 2A0h WORD next file cluster number
- 2A2h DWORD number of bytes appended to file
- 2A6h DWORD pointer to current work disk buffer
- 2AAh DWORD pointer to working SFT
- 2AEh WORD used by INT 21 dispatcher to store caller's BX
- 2B0h WORD used by INT 21 dispatcher to store caller's DS
- 2B2h WORD temporary storage while saving/restoring caller's registers
- 2B4h DWORD pointer to prev call frame (offset 250h) if INT 21 reentered
- also switched to for duration of INT 24
- 2B8h 21 BYTEs FindFirst search data for source file(s) of a rename operation
- (see #0723 at AH=4Eh)
- 2CDh 32 BYTEs directory entry for file being renamed (see #0475 at AH=11h)
- 2EDh 331 BYTEs critical error stack
- 403h 35 BYTEs scratch SFT
- 438h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26)
- 5B8h 384 BYTEs character I/O stack (functions 01h through 0Ch)
- ---DOS 3.2,3.3x only---
- 738h BYTE device driver lookahead flag (usually printer) (see AH=64h)
- 739h BYTE volume change flag
- 73Ah BYTE flag: virtual open
- 73Bh BYTE ???
- SeeAlso: #0779
- --------D-215D07-----------------------------
- INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
- AX = 5D07h
- Return: DL = mode
- 00h redirected output is combined
- 01h redirected output in separate print jobs
- SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
- --------D-215D08-----------------------------
- INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
- AX = 5D08h
- DL = mode
- 00h redirected output is combined
- 01h redirected output placed in separate jobs, start new print job
- now
- SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
- --------D-215D09-----------------------------
- INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
- AX = 5D09h
- Notes: forces redirected printer output to be printed, and starts a new print
- job
- this function is also supported by 10Net, which calls it Terminate All
- Spool Jobs, and does not flush if in "combine" mode
- SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
- --------D-215D0A-----------------------------
- INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
- AX = 5D0Ah
- DS:DX -> 11-word DOS parameter list (see #0776)
- Return: nothing. next call to AH=59h will return values from fields AX,BX,CX,
- DX,DI, and ES in corresponding registers
- Notes: documented for DOS 5+, but undocumented in earlier versions
- the MS-DOS Programmer's Reference incorrectly states that this call was
- introduced in DOS 4, and fails to mention that the ERROR structure
- passed to this function is a DOS parameter list.
- BUG: DR-DOS 3.41 and 5.0 read the value for ES from the DS field of the DPL;
- fortunately, MS-DOS ignores the DS field, allowing a generic routine
- which sets both DS and ES fields to the same value
- SeeAlso: AH=59h/BX=0000h
- --------D-215D0B-----------------------------
- INT 21 OU - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
- AX = 5D0Bh
- Return: CF set on error
- AX = error code (see #0770)
- CF clear if successful
- DS:SI -> swappable data area list (see #0778)
- Notes: copying and restoring the swappable data areas allows DOS to be
- reentered unless it is in a critical section delimited by calls to
- INT 2A/AH=80h and INT 2A/AH=81h,82h
- SHARE and other DOS utilities consult the byte at offset 04h in the
- DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
- in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
- DOS 5+ use the SDA format listed below, but revert back to the DOS 3.x
- call for finding the SDA (see #0777)
- SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h,INT 2F/AX=1203h
-
- Format of DOS 4.x swappable data area list:
- Offset Size Description (Table 0778)
- 00h WORD count of data areas
- 02h N BYTEs "count" copies of data area record
- Offset Size Description
- 00h DWORD address
- 04h WORD length and type
- bit 15 set if swap always, clear if swap in DOS
- bits 14-0: length in bytes
- SeeAlso: #0779
-
- Format of DOS 4.0-6.0 swappable data area:
- Offset Size Description (Table 0779)
- -34 BYTE printer echo flag (00h off, FFh active)
- -31 BYTE current switch character (ignored by DOS 5+)
- -28 BYTE incremented on each INT 21/AX=5E01h call
- -27 16 BYTEs machine name set by INT 21/AX=5E01h
- -11 5 WORDs zero-terminated list of offsets which need to be patched to
- enable critical-section calls (see INT 2A/AH=80h)
- (all offsets are 0D0Ch, but this list is still present for
- DOS 3.x compatibility)
- -1 BYTE unused padding
- ---start of actual SDA---
- 00h BYTE critical error flag ("ErrorMode")
- 01h BYTE InDOS flag (count of active INT 21 calls)
- 02h BYTE drive on which current critical error occurred or FFh
- 03h BYTE locus of last error
- 04h WORD extended error code of last error
- 06h BYTE suggested action for last error
- 07h BYTE class of last error
- 08h DWORD ES:DI pointer for last error
- 0Ch DWORD current DTA
- 10h WORD current PSP
- 12h WORD stores SP across an INT 23
- 14h WORD return code from last process termination (zerod after reading
- with AH=4Dh)
- 16h BYTE current drive
- 17h BYTE extended break flag
- 18h BYTE flag: code page switching
- 19h BYTE flag: copy of previous byte in case of INT 24 Abort
- ---remainder need only be swapped if in DOS---
- 1Ah WORD value of AX on call to INT 21
- 1Ch WORD PSP segment for sharing/network
- 1Eh WORD network machine number for sharing/network (0000h = us)
- 20h WORD first usable memory block found when allocating memory
- 22h WORD best usable memory block found when allocating memory
- 24h WORD last usable memory block found when allocating memory
- 26h WORD memory size in paragraphs (used only during initialization)
- 28h WORD last entry checked during directory search
- 2Ah BYTE flag: nonzero if INT 24 Fail
- 2Bh BYTE flags: allowable INT 24 responses (passed to INT 24 in AH)
- 2Ch BYTE flag: do not set directory if nonzero
- 2Dh BYTE flag: program aborted by ^C
- 2Eh BYTE flag: allow embedded blanks in FCB
- may also allow use of "*" wildcard in FCBs
- 2Fh BYTE padding (unused)
- 30h BYTE day of month
- 31h BYTE month
- 32h WORD year - 1980
- 34h WORD number of days since 1-1-1980
- 36h BYTE day of week (0 = Sunday)
- 37h BYTE flag: console swapped during read from device
- 38h BYTE flag: safe to call INT 28 if nonzero
- 39h BYTE flag: abort currently in progress, turn INT 24 Abort into Fail
- 3Ah 30 BYTEs device driver request header (see INT 2F/AX=0802h) for
- device calls
- 58h DWORD pointer to device driver entry point (used in calling driver)
- 5Ch 22 BYTEs device driver request header for I/O calls
- 72h 14 BYTEs device driver request header for disk status check
- 80h DWORD pointer to device I/O buffer
- 84h WORD ???
- 86h WORD ??? (0)
- 88h BYTE type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
- 89h DWORD start offset of file region to lock/unlock
- 8Dh DWORD length of file region to lock/unlock
- 91h BYTE padding (unused)
- 92h 3 BYTEs 24-bit user number (see AH=30h)
- 95h BYTE OEM number (see #0513 at AH=30h)
- 96h 6 BYTEs CLOCK$ transfer record (see #0745 at AH=52h)
- 9Ch BYTE device I/O buffer for single-byte I/O functions
- 9Dh BYTE padding???
- 9Eh 128 BYTEs buffer for filename
- 11Eh 128 BYTEs buffer for filename
- 19Eh 21 BYTEs findfirst/findnext search data block (see #0723 at AH=4Eh)
- 1B3h 32 BYTEs directory entry for found file (see #0513 at AH=11h)
- 1D3h 88 BYTEs copy of current directory structure for drive being accessed
- 22Bh 11 BYTEs FCB-format filename for device name comparison
- 236h BYTE terminating NUL for above filename
- 237h 11 BYTEs wildcard destination specification for rename (FCB format)
- 242h BYTE terminating NUL for above filespec
- 243h BYTE ???
- 244h WORD ???
- 246h 5 BYTEs ???
- 24Bh BYTE extended FCB file attributes
- 24Ch BYTE type of FCB (00h regular, FFh extended)
- 24Dh BYTE directory search attributes
- 24Eh BYTE file open/access mode
- 24Fh BYTE ??? flag bits
- reportedly 00h when deleting a file under MSDOS 5.0
- 250h BYTE flag: device name found on rename, or file not found
- 251h BYTE splice flag??? (file name and directory name together)
- 252h BYTE flag indicating how DOS function was invoked
- (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
- 253h BYTE sector position within cluster
- 254h BYTE ??? (flag: translate sector/cluster)
- 255h BYTE ??? (flag: 00h if read, 01h if write)
- 256h BYTE current working drive number
- 257h BYTE cluster factor
- 258h BYTE ???
- 259h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on)
- 25Ah BYTE canonicalized filename referred to existing file/dir if FFh
- 25Bh BYTE volume ID flag
- 25Ch BYTE type of process termination (00h-03h) (see AH=4Dh)
- 25Dh BYTE ???
- 25Eh BYTE ??? file create flag (00h = no, search only)
- 25Fh BYTE ??? (value for deleted file's first byte)
- 260h DWORD pointer to Drive Parameter Block for critical error invocation
- 264h DWORD pointer to stack frame containing user registers on INT 21
- 268h WORD stores SP across INT 24
- 26Ah DWORD pointer to DOS Drive Parameter Block for ???
- 26Eh WORD segment of disk buffer
- 270h WORD ??? (saving partial cluster number)
- 272h WORD ??? (temp: sector of work current cluster)
- 274h WORD ??? (high part of cluster number)
- 276h WORD ??? (temp)
- 278h BYTE Media ID byte returned by AH=1Bh,1Ch
- 279h BYTE ??? (doesn't seem to be referenced)
- 27Ah DWORD pointer to device header if filename is character device
- 27Eh DWORD pointer to current SFT
- 282h DWORD pointer to current directory structure for drive being accessed
- 286h DWORD pointer to caller's FCB
- 28Ah WORD SFT index to which file being opened will refer
- 28Ch WORD temporary storage for file handle
- 28Eh DWORD pointer to a JFT entry in process handle table
- (see #0498 at AH=26h)
- 292h WORD offset in DOS DS of first filename argument
- 294h WORD offset in DOS DS of second filename argument
- 296h WORD ??? (offset of last component in pathname or FFFFh)
- 298h WORD offset of transfer address to add
- 29Ah WORD last relative cluster within file being accessed
- 29Ch WORD temp: absolute cluster number being accessed
- 29Eh WORD directory sector number
- 2A0h WORD ???
- 2A2h WORD ??? directory cluster number
- 2A4h DWORD current relative sector number within file
- 2A8h DWORD ??? (current sector number)
- 2ACh WORD ??? (current byte offset within sector)
- 2AEh DWORD current offset in file
- 2B2h WORD ???
- 2B4h WORD bytes in partial sector
- 2B6h WORD number of sectors
- 2B8h WORD ??? (free file cluster entry)
- 2BAh WORD ??? (last file cluster entry)
- 2BCh WORD ??? (next file cluster number)
- 2BEh DWORD number of bytes appended to file
- 2C2h DWORD pointer to current work disk buffer
- 2C6h DWORD pointer to working SFT
- 2CAh WORD used by INT 21 dispatcher to store caller's BX
- 2CCh WORD used by INT 21 dispatcher to store caller's DS
- 2CEh WORD temporary storage while saving/restoring caller's registers
- 2D0h DWORD pointer to prev call frame (offset 264h) if INT 21 reentered
- also switched to for duration of INT 24
- 2D4h WORD open mode/action for INT 21/AX=6C00h
- 2D6h BYTE ??? (set to 00h by INT 21h dispatcher, 02h when a read is
- performed, and 01h or 03h by INT 21/AX=6C00h)
- 2D7h WORD ??? apparently unused
- 2D9h DWORD stored ES:DI for AX=6C00h
- 2DDh WORD extended file open action code (see #0850 at AX=6C00h)
- 2DFh WORD extended file open attributes (see #0849 at AX=6C00h)
- 2E1h WORD extended file open file mode (see AX=6C00h)
- 2E3h DWORD pointer to filename to open (see AX=6C00h)
- 2E7h WORD ??? temp DX storage or 0000h or temp data buffer size from
- disk buffer
- 2E9h WORD ???
- 2EBh BYTE ???
- 2ECh WORD stores DS during call to [List-of-Lists + 37h]
- 2EEh WORD ???
- 2F0h BYTE ???
- 2F1h WORD ??? bit flags
- 2F3h DWORD pointer to user-supplied filename
- 2F7h DWORD pointer to ???
- 2FBh WORD stores SS during call to [List-of-Lists + 37h]
- 2FDh WORD stores SP during call to [List-of-Lists + 37h]
- 2FFh BYTE flag, nonzero if stack switched in calling [List-of-Lists+37h]
- 300h 21 BYTEs FindFirst search data for source file(s) of a rename operation
- (see #0723 at AH=4Eh)
- 315h 32 BYTEs directory entry for file being renamed (see #0475 at AH=11h)
- 335h 331 BYTEs critical error stack
- 480h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26)
- 600h 384 BYTEs character I/O stack (functions 01h through 0Ch)
- 780h BYTE device driver lookahead flag (usually printer) (see AH=64h)
- 781h BYTE volume change flag
- 782h BYTE flag: virtual open
- 783h BYTE ???
- 784h WORD ???
- 786h WORD ???
- 788h WORD ???
- 78Ah WORD ???
- SeeAlso: #0777,#0778
- --------D-215E00-----------------------------
- INT 21 - DOS 3.1+ network - GET MACHINE NAME
- AX = 5E00h
- DS:DX -> 16-byte buffer for ASCIZ machine name
- Return: CF clear if successful
- CH = validity
- 00h name invalid
- nonzero valid
- CL = NetBIOS number for machine name
- DS:DX buffer filled with blank-paded name
- CF set on error
- AX = error code (01h) (see #0770 at AH=59h)
- Note: supported by OS/2 v1.3+ compatibility box, PC-NFS
- SeeAlso: AX=5E01h
- --------N-215E00-----------------------------
- INT 21 - 10NET v5.0 - GET MACHINE NAME
- AX = 5E00h
- Return: CL = redirector's NetBIOS name number
- ES:DI -> network node ID
- SeeAlso: AX=5E01h"10NET"
- --------D-215E01CH00-------------------------
- INT 21 - DOS 3.1+ network - SET MACHINE NAME
- AX = 5E01h
- CH = 00h undefine name (make it invalid)
- <> 0 define name
- CL = name number
- DS:DX -> 15-character blank-padded ASCIZ name
- SeeAlso: AX=5E00h
- --------N-215E01-----------------------------
- INT 21 - 10NET v5.0 - GET LOCAL 10NET CONFIGURATION TABLE
- AX = 5E01h
- CX = length of buffer
- DS:DX -> buffer for 10Net configuration table
- SeeAlso: AX=5E00h"10NET",INT 6F/AH=02h,INT 6F/AH=03h
-
- Format of 10Net Configuration Table:
- Offset Size Description (Table 0780)
- 00h 8 BYTEs user name
- 08h 15 BYTEs node ID
- 17h 3 BYTEs unique portion of Ethernet address
- 1Ah BYTE Who group number
- 1Bh WORD services mask (see #0782)
- 1Dh DWORD serial number
- 21h BYTE maximum concurrent users with same serial number allowed on net
- 22h BYTE chat mask (see #0783)
- 23h BYTE internal system bits (see #0784)
- 24h 9 BYTEs version number in format MM.mm.xxx
- 2Dh BYTE flag: 01h if machine is a PS/2
- 2Eh BYTE flag: 03h if 80386
- 2Fh BYTE spool termination mode: 01h concatenate, 02h truncate
- (see AX=5D09h)
- 30h WORD autospool timeout in clock ticks
- 32h WORD monitor timeout in clock ticks
- 34h WORD unused
- 36h WORD chat timeout in clock ticks
- 38h WORD netBIOS session timeout in half-seconds
- 3Ah WORD datagram send timeout in seconds
- 3Ch WORD keyboard value for initiating chat mode
- 3Eh WORD Who timeout in clock ticks
- 40h BYTE flag: 01h if server should process rom NetBIOS Post return
- 41h BYTE flag: 01h if FCBs should be recycled
- 42h 3 BYTEs signature "DBG"
- 45h BYTE last interrupt (21h or 6Fh)
- 46h BYTE last INT 21 AH value
- 47h BYTE last INT 6F AH value
- 48h WORD last item posted
- 4Ah WORD last item free-posted
- 4Ch WORD last item handled by server
- 4Eh WORD last redirector send NCB
- 50h WORD last redirector receive NCB
- 52h 4 BYTEs signature "TABL"
- 56h WORD offset of datagram buffer table header
- 58h WORD offset of chat buffer table header
- 5Ah WORD offset of Raw buffer table header
- 5Ch WORD offset of Workstation buffer table header
- 5Eh WORD offset of server receive-any table header
- 60h WORD offset of Tiny buffer table header
- 62h WORD offset of zero-length buffer table (NCBs)
- 64h WORD offset of Rdr (Redirector Mount) table header
- 66h WORD offset of Ntab (Redirector Session) table header
- 68h WORD offset of FCB table header
- 6Ah WORD offset of user file handle table header
- 6Ch WORD offset of workstation printer RDR extension table header
- 6Eh WORD offset of server shared device table header
- 70h WORD offset of server connection table header
- 72h WORD offset of server login table header
- 74h WORD offset of server file table header
- 76h WORD offset of server shared file table header
- 78h WORD offset of server record lock table header
- 7Ah WORD offset of remote printer claim table header
- 7Ch WORD offset of remote printer device table header
- 7Eh WORD offset of print server mount table header
- 80h WORD offset of print server sessions table header
- 82h WORD offset of print server print job structure table header
- 84h WORD offset of print server pooled device table header
- 86h WORD size of workstation buffer
- 88h WORD size of server receive-any buffer
- 8Ah WORD size of server raw I/O buffer
- 8Ch 6 BYTEs reserved
- 92h DWORD pointer to profile pathname
- 96h BYTE datagram retry count
- 97h BYTE NetBIOS LAN adapter number
- 98h 6 BYTEs physical Ethernet address
- 9Eh BYTE NetBIOS server name number
- 9Fh BYTE NetBIOS redirector name number
- A0h BYTE 10Net interrupt number
- A1h BYTE flag: chat is loaded
- A2h BYTE flag: INT 6F APIs permanently loaded
- A3h BYTE flag: file security present
- A4h WORD reserved
- A6h BYTE fixed mount bitmask for drives A:-H:
- A7h BYTE reserved
- A8h WORD 10Net system flags (see #0785)
- AAh BYTE monitor flags (see #0786)
- ABh 5 BYTEs reserved
- B0h WORD offset of monitor timer block
- B2h WORD offset of server timer block
- B4h WORD offset of chat timer block
- B6h WORD timer chain
- B8h 4 BYTEs signature "TALS"
- BCh WORD number of 10Net sends
- BEh WORD number of 10Net receives
- C0h WORD number of no-buffer conditions
- C2h WORD number of dropped posted messages
- C4h WORD number of server NCB errors
- C6h WORD number of redirector NCB errors
- C8h WORD number of datagram send/receive errors
- CAh WORD number of dropped Whos
- CCh WORD number of dropped submits
- CEh WORD number of session aborts
- D0h BYTE number of NetBIOS interface-busy errors
- D1h BYTE last NetBIOS bad post command
- D2h BYTE last NetBIOS bad redirector command
- D3h BYTE do send datagram send/receive error command
- D4h DWORD -> DOS system parameter table
- D8h WORD number of DOS physical drives
- DAh WORD offset of DOS PSP field in DOS data segment
- DCh WORD offset of in-DOS flag in DOS data segment
- DEh WORD DOS data segment
- E0h WORD offset of DOS SFT in DOS data segment
- E2h WORD offset of number-of-physical-units field in DOS data segment
- E4h WORD 10Net code segment
- E6h WORD 10Net data segment
- E8h WORD 10Net common server segment
- EAh WORD 10Net file server segment
- ECh WORD 10Net print server segment
- EEh WORD 10Net remote printer segment
- Note: documentation lists field at offset D0h as a WORD, but all following
- offsets are as though it were a BYTE; if it is indeed a WORD, all
- offsets after D0h must be increased by one byte
-
- Format of 10Net Table Header:
- Offset Size Description (Table 0781)
- -16 4 BYTEs table identifier
- -12 WORD peak number of tables allocated
- -10 WORD number of tables currently in use
- -8 WORD total number of tables
- -6 WORD size of each table
- -4 WORD offset of first allocated table
- -2 WORD offset of first free table
-
- Bitfields for 10NET services mask:
- Bit(s) Description (Table 0782)
- 0 workstation
- 1 file server
- 2 print queue server
- 3 de-spool server
-
- Bitfields for 10NET chat mask:
- Bit(s) Description (Table 0783)
- 0 chat permitted
- 1 bell enabled
- 2 chat keyboard initiated
- 3 in INT 16 handler
- 4 in Get Input
- 5 display has timed out
- 6 chat is idle
-
- Bitfields for 10NET internal system bits:
- Bit(s) Description (Table 0784)
- 0 submit permitted
- 1 submit initiated
- 2 submit executing
- 3 internal client call/chat/spool/autospool
- 4 in spool termination
- 5 print permitted
- 6 waiting for keyboard input
-
- Bitfields for 10NET System Flags:
- Bit(s) Description (Table 0785)
- 0 in NetBIOS
- 1 processing INT 28
- 2 is server
- 3 in net user-DOS function
- 4 in DOS user-DOS function
- 5 in net for user non-DOS function
- 6 in server DOS function
- 7 in server non-DOS function
- 8 in terminate
- 10 in user on server request
- 13 in DOS for user on server
- 14 disable critical error handler
-
- Bitfields for Monitor Flags:
- Bit(s) Description (Table 0786)
- 0 waiting for monitor response
- 4 in monitor get-input routine
- 5 monitor display timeout
- 6 sensing for escape key
- --------D-215E02-----------------------------
- INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
- AX = 5E02h
- BX = redirection list index (see AX=5F02h)
- CX = length of setup string
- DS:SI -> setup string
- Return: CF clear if successful
- CF set on error
- AX = error code (01h) (see #0770 at AH=59h)
- Note: also supported by 10NET v5.0
- SeeAlso: AX=5E03h,INT 2F/AX=111Fh
- --------D-215E03-----------------------------
- INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
- AX = 5E03h
- BX = redirection list index (see AX=5F02h)
- ES:DI -> 64-byte buffer for setup string
- Return: CF clear if successful
- CX = length of setup string
- ES:DI buffer filled
- CF set on error
- AX = error code (01h) (see #0770 at AH=59h)
- Note: also supported by 10NET v5.0, but 10NET is documented as using DS:SI
- instead of ES:DI
- SeeAlso: AX=5E02h,INT 2F/AX=111Fh
- --------D-215E04-----------------------------
- INT 21 - DOS 3.1+ network - SET PRINTER MODE
- AX = 5E04h
- BX = redirection list index (see AX=5F02h)
- DX = mode
- bit 0: set if binary, clear if text (tabs expanded to blanks)
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- Note: calls INT 2F/AX=111Fh with 5E04h on stack
- SeeAlso: AX=5E05h"DOS",INT 2F/AX=111Fh
- --------N-215E04-----------------------------
- INT 21 - 10NET v5.0 - INITIATE PRINT JOB
- AX = 5E04h
- BX = zero-based redirection list index (see AX=5F02h)
- DS:DX -> extended workstation printer setup structure (see #0787)
- Return: CF clear if successful
- CF set on error
- AX = error code (see #0770 at AH=59h)
- SeeAlso: AX=5E05h"10NET",AX=5E06h"10NET"
-
- Format of 10NET extended workstation printer setup structure:
- Offset Size Description (Table 0787)
- 00h BYTE notification flags (see #0788)
- 01h BYTE job control mask (see #0789)
- 02h WORD days to retain file
- 04h WORD test print length
- 06h BYTE number of copies to print
- 07h BYTE compression algorithm
- 08h BYTE tab width (00h = don't expand)
- 09h BYTE initiation type (00h normal, 01h non-spooled)
- 0Ah 38 BYTEs job start operation notification instructions
- 30h 32 BYTEs comment for job
- 50h 64 BYTEs output filename or non-spooled file
-
- Bitfields for 10NET notification flags:
- Bit(s) Description (Table 0788)
- 0 user at print start
- 1 operator at start, with reply
- 2 user at print completion
- 3 operator at completion, with reply
- 4 user on queue switch
- 5 operator on queue switch, with reply
- 6 user on print error
-
- Bitfields for 10NET job control mask:
- Bit(s) Description (Table 0789)
- 0 print banner page
- 1 eject page at end of job
- 2 mark as "held" (queue but don't print)
- 3 rush job (queue at top)
- 4 overwrite file with zeros before deletion
- 5 hyperspool if possible
- --------D-215E05-----------------------------
- INT 21 - DOS 3.1+ network - GET PRINTER MODE
- AX = 5E05h
- BX = redirection list index (see AX=5F02h)
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- DX = printer mode (see AX=5E04h)
- Note: calls INT 2F/AX=111Fh with 5E05h on stack
- SeeAlso: AX=5E04h"DOS",INT 2F/AX=111Fh
- --------N-215E05-----------------------------
- INT 21 - 10NET v5.0 - TERMINATE PRINT JOB
- AX = 5E05h
- BX = zero-based redirection list index (see AX=5F02h)
- Return: CF clear if successful
- CF set on error
- AX = error code (see #0770 at AH=59h)
- Note: this call resets the spool termination mode to "truncate"
- (see AX=5D08h)
- SeeAlso: AX=5E04h"10NET",AX=5E06h
- --------N-215E06-----------------------------
- INT 21 - 10NET v5.0 - GET/SET 10NET WORKSTATION PRINTER SETUP STRUCTURE
- AX = 5E06h
- BX = zero-based redirection list index (see AX=5F02h)
- CX = operation (06h set, 07h get)
- DS:DX -> buffer for setup structure (same as first nine bytes of
- workstation printer setup) (see #0787)
- Return: CF clear if successful
- DS:DX buffer updated on get
- CF set on error
- AX = error code (see #0770 at AH=59h)
- SeeAlso: AX=5E04h"10NET",AX=5E05h"10NET"
- --------D-215F00-----------------------------
- INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
- AX = 5F00h
- BL = redirection type
- 03h printer
- 04h disk drive
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- BH = redirection state
- 00h off
- 01h on
- Note: calls INT 2F/AX=111Eh with AX on top of the stack
- SeeAlso: AX=5F01h,INT 2F/AX=111Eh
- --------D-215F01-----------------------------
- INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
- AX = 5F01h
- BL = redirection type
- 03h printer
- 04h disk drive
- BH = redirection state
- 00h off
- 01h on
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- Notes: when redirection is off, the local device (if any) rather than the
- remote device is used
- calls INT 2F/AX=111Eh with AX on top of the stack
- SeeAlso: AX=5F00h,INT 2F/AX=111Eh
- --------D-215F02-----------------------------
- INT 21 - DOS 3.1+ network - GET REDIRECTION LIST ENTRY
- AX = 5F02h
- BX = zero-based redirection list index
- CX = 0000h (LANtastic)
- DS:SI -> 16-byte buffer for ASCIZ local device name
- ES:DI -> 128-byte buffer for ASCIZ network name
- Return: CF clear if successful
- BH = device status
- 00h valid
- 01h invalid
- BL = device type
- 03h printer
- 04h disk drive
- CX = user data previously set with AX=5F03h
- DS:SI and ES:DI buffers filled
- DX,BP destroyed
- CF set on error
- AX = error code (01h,12h) (see #0770 at AH=59h)
- Notes: this function is passed through to INT 2F/AX=111Eh by the DOS kernel
- error code 12h is returned if BX is greater than the size of the list
- also supported by Banyan VINES, PC-NFS, LANtastic, and 10NET
- SeeAlso: AX=5F03h,INT 2F/AX=111Eh
- --------D-215F03-----------------------------
- INT 21 - DOS 3.1+ network - REDIRECT DEVICE
- AX = 5F03h
- BL = device type
- 03h printer
- 04h disk drive
- CX = user data to save
- 0000h for LANtastic
- 4E57h ("NW") for NetWare 4.0 requester
- DS:SI -> ASCIZ local device name (16 bytes max)
- ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
- Return: CF clear if successful
- CF set on error
- AX = error code (01h,03h,05h,08h,0Fh,12h) (see #0770 at AH=59h)
- Notes: if device type is disk drive, DS:SI must point at either a null string
- or a string consisting the drive letter followed by a colon; if a
- null string, the network attempts to access the destination without
- redirecting a local drive
- the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
- also supported by Banyan VINES, LANtastic, and 10NET
- SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh
- --------D-215F04-----------------------------
- INT 21 - DOS 3.1+ network - CANCEL REDIRECTION
- AX = 5F04h
- DS:SI -> ASCIZ local device name or path
- CX = 4E57h ("NW") for NetWare 4.0 requester
- Return: CF clear if successful
- CF set on error
- AX = error code (01h,03h,05h,08h,0Fh,12h) (see #0770 at AH=59h)
- Notes: the DS:SI string must be either a local device name, a drive letter
- followed by a colon, or a network directory beginning with two
- backslashes
- the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
- also supported by Banyan VINES, LANtastic, and 10NET
- SeeAlso: AX=5F03h,INT 2F/AX=111Eh
- --------D-215F05-----------------------------
- INT 21 - DOS 4+ network - GET EXTENDED REDIRECTION LIST ENTRY
- AX = 5F05h
- BX = redirection list index
- DS:SI -> buffer for ASCIZ source device name
- ES:DI -> buffer for destination ASCIZ network path
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- AX = server's network process ID handle (10NET)
- BH = device status flag (bit 0 clear if valid)
- BL = device type (03h if printer, 04h if drive)
- CX = stored parameter value (user data) from AX=5F03h
- BP = NETBIOS local session number
- DS:SI buffer filled
- ES:DI buffer filled
- Notes: the local session number allows sharing the redirector's session number
- if an error is caused on the NETBIOS LSN, the redirector may be unable
- to correctly recover from errors
- the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
- supported by DR-DOS 5.0
- also supported by 10NET v5.0
- SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
- --------O-215F05-----------------------------
- INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
- AX = 5F05h
- DL = drive number (0=A:)
- DS:SI -> ASCIZ name of the object to map the drive to
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- SeeAlso: AX=5F06h"STARLITE"
- --------N-215F06-----------------------------
- INT 21 U - Network - GET FULL REDIRECTION LIST
- AX = 5F06h
- ???
- Return: ???
- Notes: similar to AX=5F02h and AX=5F05h, but also returns redirections
- excluded from those calls for various reasons
- calls INT 2F/AX=111Eh with AX on top of the stack
- SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
- --------O-215F06-----------------------------
- INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
- AX = 5F06h
- DL = drive to be unmapped (0=A:)
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- SeeAlso: AX=5F05h"STARLITE"
- --------D-215F07-----------------------------
- INT 21 - DOS 5+ - ENABLE DRIVE
- AX = 5F07h
- DL = drive number (0=A:)
- Return: CF clear if successful
- CF set on error
- AX = error code (0Fh) (see #0770 at AH=59h)
- Notes: simply sets the "valid" bit in the drive's CDS
- this function is not supported by Novell DOS 7
- SeeAlso: AH=52h,AX=5F08h"DOS"
- --------O-215F07-----------------------------
- INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
- AX = 5F07h
- DS:SI -> ASCIZ name of object to offer to network
- ES:DI -> ASCIZ name under which object will be known on the network
- MUST begin with three slashes
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- SeeAlso: AX=5F08h"STARLITE"
- --------D-215F08-----------------------------
- INT 21 - DOS 5+ - DISABLE DRIVE
- AX = 5F08h
- DL = drive number (0=A:)
- Return: CF clear if successful
- CF set on error
- AX = error code (0Fh) (see #0770 at AH=59h)
- Notes: simply clears the "valid" bit in the drive's CDS
- this function is not supported by Novell DOS 7
- SeeAlso: AH=52h,AX=5F07h"DOS"
- --------O-215F08-----------------------------
- INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
- AX = 5F08h
- DS:SI -> ASCIZ network name (not local name) of object to unshare
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- SeeAlso: AX=5F07h"STARLITE"
- --------O-215F09-----------------------------
- INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
- AX = 5F09h
- DS:DX -> ASCIZ name of the device driver to attach to
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- Note: the STARLITE distributed file system can attach to multiple networks
- simultaneously
- SeeAlso: AX=5F0Ah
- --------O-215F0A-----------------------------
- INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
- AX = 5F0Ah
- DS:DX -> ASCIZ name of device driver to detach from
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- SeeAlso: AX=5F09h
- --------N-215F30-----------------------------
- INT 21 U - LAN Manager Enhanced DOS - GET REDIRECTOR VERSION
- AX = 5F30h
- Return: AX = version (AH=major,AL=minor)
- --------N-215F32-----------------------------
- INT 21 u - Named Pipes - LOCAL DosQNmPipeInfo
- AX = 5F32h
- BX = handle
- CX = size of _PIPEINFO structure
- DX = level (must be 0001h)
- DS:SI -> _PIPEINFO structure (see #0790)
- Return: CF clear if successful
- _PIPEINFO structure filled in
- CF set on error
- AX = error code
- Note: this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- SeeAlso: AX=5F33h,AX=5F34h
-
- Format of Named Pipes _PIPEINFO structure:
- Offset Size Description (Table 0790)
- 00h WORD size of outgoing buffer
- 02h WORD size of incoming buffer
- 04h BYTE maximum number of instances allowed
- 05h BYTE current number of instances
- 06h BYTE length of the name (including terminating NUL)
- 07h N BYTEs name
- --------N-215F33-----------------------------
- INT 21 u - Named Pipes - LOCAL DosQNmPHandState
- AX = 5F33h
- BX = handle
- Return: CF clear if successful
- AH = pipe mode bit mask (see #0791)
- AL = maximum number of instances
- CF set on error
- AX = error code
- Note: this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- SeeAlso: AX=5F32h,AX=5F34h
-
- Bitfields for Named Pipes pipe mode:
- Bit(s) Description (Table 0791)
- 7 set if nonblocking, clear if blocking
- 6 set if server end, clear if client end
- 2 set if write in message mode, clear if write in byte mode
- 0 set if read in message mode, clear if read in byte mode
- --------N-215F34-----------------------------
- INT 21 u - Named Pipes - LOCAL DosSetNmPHandState
- AX = 5F34h
- BX = handle
- CX = pipe mode bit mask
- bit 15: set if nonblocking, clear if blocking
- bit 8: set if read in message mode, clear if read in byte mode
- Return: CF clear if successful
- CF set if error
- AX = error code
- Note: this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
- --------N-215F35-----------------------------
- INT 21 u - Named Pipes - LOCAL DosPeekNmPipe
- AX = 5F35h
- BX = handle
- CX = buffer length
- DS:SI -> buffer
- Return: CF set on error
- AX = error code
- CF clear if successful (LAN Manager v1-v2)
- AX = 0000h if successful (LAN Manager 3.x)
- ---if successful---
- CX = bytes read
- SI = bytes left in the pipe
- DX = bytes left in the current message
- AX = pipe status (v1-v2) (see #0792)
- DI = pipe status (v3.x)
- Note: this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
-
- (Table 0792)
- Values for pipe status:
- 0001h disconnected
- 0002h listening
- 0003h connected
- 0004h closing
- --------N-215F36-----------------------------
- INT 21 u - Named Pipes - LOCAL DosTransactNmPipe
- AX = 5F36h
- BX = handle
- CX = in buffer length
- DS:SI -> in buffer
- DX = out buffer length
- ES:DI -> out buffer
- Return: CF clear if successful
- CX = bytes read
- CF set on error
- AX = error code
- Note: this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- SeeAlso: AX=5F34h,AX=5F37h
- --------N-215F37-----------------------------
- INT 21 u - Named Pipes - DosCallNmPipe
- AX = 5F37h
- DS:SI -> DosCallNmPipe stack frame (see #0793)
- Return: CF clear if successful
- CX = bytes read
- CF set on error
- AX = error code
- Note: this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- SeeAlso: AX=5F36h,AX=5F38h
-
- Format of Named Pipes DosCallNmPipe stack frame:
- Offset Size Description (Table 0793)
- 00h DWORD timeout
- 04h DWORD -> bytes read WORD (not used!!)
- 08h WORD out buffer length
- 0Ah DWORD address of out buffer
- 0Eh WORD in buffer length
- 10h DWORD address of in buffer
- 14h DWORD address of pipe name
- --------N-215F38-----------------------------
- INT 21 u - Named Pipes - LOCAL DosWaitNmPipe - AWAIT AVAIL. OF PIPE INSTANCE
- AX = 5F38h
- DS:DX -> pipe name
- BX:CX = timeout value
- Return: CF clear if successful
- CF set if error
- AX = error code
- Notes: when a client gets a return code of ERROR_PIPE_BUSY on attempting to
- open a pipe, it should issue this call to wait until the pipe
- instance becomes available again; on return from this call, the
- client must attempt to open the pipe once again
- this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- SeeAlso: AX=5F37h,AX=5F39h
- --------N-215F39-----------------------------
- INT 21 U - Named Pipes - LOCAL DosRawReadNmPipe
- AX = 5F39h
- BX = handle
- CX = buffer length
- DS:DX -> buffer
- Return: CF clear if successful
- CX = bytes read
- CF set if error
- AX = error code
- Notes: this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- not documented in the LAN Manager Toolkit
- SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
- --------N-215F3A-----------------------------
- INT 21 U - Named Pipes - LOCAL DosRawWriteNmPipe
- AX = 5F3Ah
- BX = handle
- CX = buffer length
- DS:DX -> buffer
- Return: CF clear if successful
- CX = bytes written
- CF set if error
- AX = error code
- Notes: this function was introduced by LAN Manager but is also supported by
- the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
- Machines, and others
- not documented in the LAN Manager Toolkit
- SeeAlso: AX=5F39h,AX=5F3Bh,INT 2F/AX=118Fh
- --------N-215F3B-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - NetHandleSetInfo
- AX = 5F3Bh
- BX = handle
- CX = handle_info_1 structure length or sizeof DWORD
- DI = parameter number to set
- 0000h all
- 0001h number of milliseconds
- 0002h number of characters
- DS:DX -> handle_info_1 structure (DI=0000h) (see #0794)
- or DWORD (DI=0001h or 0002h)
- SI = level of information (0001h)
- Return: CF clear if successful
- CX = total bytes available
- CF set if error
- AX = error code
- SeeAlso: AX=5F3Ch
-
- Format of LAN Manager handle_info_1 structure:
- Offset Size Description (Table 0794)
- 00h DWORD number of milliseconds which workstation collects data before
- it sends the data to the named pipe
- 04h DWORD number of characters which workstation collects before it
- sends the data to the named pipe
- --------N-215F3C-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - NetHandleGetInfo
- AX = 5F3Ch
- BX = handle
- CX = length of handle_info_1 structure
- DS:DX -> handle_info_1 structure (see #0794)
- SI = level of information (must be 0001h)
- Return: CF clear if successful
- CX = total bytes available
- CF set if error
- AX = error code
- SeeAlso: AX=5F3Bh
- --------N-215F3D-----------------------------
- INT 21 U - LAN Manager Enhanced DOS - WRITE MAILSLOT???
- AX = 5F3Dh
- ???
- Return: ???
- --------N-215F3E-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetSpecialSMB
- AX = 5F3Eh
- ???
- Return: ???
- Note: This function is not documented anywhere in the LAN Manager 2.x Toolkit
- but was documented in LAN Manager 1.x manuals.
- --------N-215F3F-----------------------------
- INT 21 U - LAN Manager Enhanced DOS - REMOTE API CALL
- AX = 5F3Fh
- CX = api number
- ES:DI -> data descriptor
- ES:SI -> parameter descriptor
- ES:DX -> auxiliary descriptor (if DX <> 0)
- ???
- Return: ???
- --------N-215F40-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetMessageBufferSend
- AX = 5F40h
- DS:DX -> NetMessageBufferSend parameter structure (see #0795)
- Return: AX = error code
-
- Format of LAN Manager NetMessageBufferSend parameter structure:
- Offset Size Description (Table 0795)
- 00h DWORD -> recipient name (name for specific user, name* for domain
- wide name, * for broadcast)
- 04h DWORD -> buffer
- 08h WORD length of buffer
- --------N-215F41-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceEnum
- AX = 5F41h
- BL = level of detail (0000h, 0001h or 0002h)
- CX = buffer length
- ES:DI -> buffer of service_info_0, service_info_1, or service_info_2
- (see #0796,#0797,#0798)
- Return: CF clear if successful
- CX = entries read
- DX = total available
- CF set on error
- AX = error code
-
- Format of LAN Manager service_info_0 structure:
- Offset Size Description (Table 0796)
- 00h 16 BYTEs name
- SeeAlso: #0797,#0798
-
- Format of service_info_1 structure:
- Offset Size Description (Table 0797)
- 00h 16 BYTEs name
- 10h WORD status bitmask (see #0799)
- 12h DWORD status code (see #0800)
- (also see Microsoft LAN Manager Programmer's Reference)
- 16h WORD process id
- SeeAlso: #0796,#0798
-
- Format of service_info_2 structure:
- Offset Size Description (Table 0798)
- 00h 16 BYTEs name
- 10h WORD status bitmask (see #0799)
- 12h DWORD status code (see #0800)
- 16h WORD process id
- 18h 64 BYTEs text
- SeeAlso: #0796,#0797
-
- Bitfields for LAN Manager status bitmask:
- Bit(s) Description (Table 0799)
- 0,1 00 uninstall
- 01 install pending
- 10 uninstall pending
- 11 installed
- 2,3 00 active
- 01 Continue pending
- 10 Pause pending
- 11 paused
- 4 uninstallable
- 5 pausable
- 8 disk redirector paused
- 9 spooled device redirector paused (printing)
- 10 communication device redirector paused
-
- (Table 0800)
- Values for LAN Manager status code:
- high word
- 3051 Bad parameter value
- 3052 A parameter is missing
- 3053 An unknown parameter was specified
- 3054 The resource is insufficient
- 3055 Configuration is faulty
- 3056 An MS-DOS or MS OS/2 error occured
- 3057 An internal error occured
- 3058 An ambiguous parameter name was given
- 3059 A duplicate parameter exists
- 3060 The service was terminated by NetSeviceControl when it did not respond
- 3061 The service program file could not be executed
- 3062 The subservice failed to start
- 3063 There is a conflict in the value or use of these parameters
- 3064 There is a problem with the file
- low word
- 3070 There is insufficient memory
- 3071 There is insufficeient disk space
- 3072 Unable to create thread
- 3073 Unable to create process
- 3074 A security failure occured
- 3075 There is bad or missing default path
- 3076 Network software is not installed
- 3077 Server software is not installed
- 3078 The server could not access the UAS database
- 3079 The action requires user-level security
- 3080 The log directory is invalid
- 3081 The LAN group specificed could not be used
- 3082 The computername is being used as a message alias on another computer
- 3083 The workstation failed to announce the servername
- 3084 The user accounts system is not configured properly
- --------N-215F42-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceControl
- AX = 5F42h
- DH = opcode
- 00h interrogate status
- 01h pause
- 02h continue
- 03h uninstall
- DL = argument
- 01h disk resource
- 02h print resource
- 04h communications resource (not implemented for DOS)
- ES:BX -> NetServiceControl parameter structure (see #0801)
- Return: CF clear if successful
- CF set on error
- AX = error code
-
- Format of LAN Manager NetServiceControl parameter structure:
- Offset Size Description (Table 0801)
- 00h DWORD -> service name
- 04h WORD result buffer size
- 06h DWORD -> result buffer as service_info_2 structure
- --------N-215F43-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL DosPrintJobGetId
- AX = 5F43h
- BX = handle of remote print job
- CX = size of PRIDINFO struture
- ES:DI -> PRIDINFO structure (see #0802)
- Return: CF clear if successful
- PRIDINFO filled in
- CF set on error
- AX = error code
-
- Format of LAN Manager PRIDINFO structure:
- Offset Size Description (Table 0802)
- 00h WORD job id
- 02h 16 BYTEs server name
- 12h 13 BYTEs queue name
- 1Fh 1 BYTE pad
- --------N-215F44-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaGetInfo
- AX = 5F44h
- BX = information level (00h, 01h, or 0Ah)
- CX = buffer size
- ES:DI -> buffer in which to store info
- Return: AX = error code
- DX = amount of buffer used (or required)
- SeeAlso: AX=5F45h,AX=5F49h
- --------N-215F45-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaSetInfo
- AX = 5F45h
- BX = level (0000h or 0001h)
- CX = buffer size
- DX = parameter to set
- ES:DI -> buffer
- Return: CF clear if successful
- CF set if error
- AX = error code
- SeeAlso: AX=5F44h
- --------N-215F46-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseEnum
- AX = 5F46h
- BX = level (0000h or 0001h)
- CX = size of buffer
- ES:DI -> buffer of use_info_0 or use_info_1 structures
- (see #0803,#0804)
- Return: CF clear if successful
- CX = entries read
- DX = total available entries
- CF set if error
- AX = error code
- SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
-
- Format of LAN Manager use_info_0 structure:
- Offset Size Description (Table 0803)
- 00h 9 BYTEs local device name
- 09h BYTE padding
- 0Ah DWORD -> remote device name in UNC form \\server\share
- SeeAlso: #0804
-
- Format of LAN Manager use_info_1 structure:
- Offset Size Description (Table 0804)
- 00h 9 BYTEs Local device name
- 09h BYTE padding
- 0Ah DWORD -> remote device name in UNC form \\server\share
- 0Eh DWORD -> password
- 12h WORD ignored
- 14h WORD use type (-1 wildcard, 0 disk, 1 print, 2 com, 3 ipc)
- 16h WORD ignored
- 18h WORD ignored
- SeeAlso: #0803
- --------N-215F47-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseAdd
- AX = 5F47h
- BX = level (0001h)
- CX = size of use_info_1 structure
- ES:DI -> use_info_1 structure (see #0804)
- Return: CF clear on success
- CF set on error
- AX = error code
- SeeAlso: AX=5F46h,AX=5F48h
- --------N-215F48-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseDel
- AX = 5F48h
- BX = force level
- 0000h no force
- 0001h force
- 0002h lots of force
- ES:DI -> buffer as either the local device name or UNC remote name
- Return: CF clear on success
- CF set on error
- AX = error code
- SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
- --------N-215F49-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - NetUseGetInfo
- AX = 5F49h
- DS:DX -> NetUseGetInfo parameter structure
- Return: CF clear on success
- DX = total available
- CF set on error
- AX = error code
- SeeAlso: AX=5F44h,AX=5F47h
-
- Format of LAN Manager NetUseGetInfo parameter structure:
- Offset Size Description (Table 0805)
- 00h DWORD pointer to either the local device name or UNC remote name
- 04h WORD level of information (0000h or 0001h)
- 06h DWORD pointer to buffer of use_info_0 or use_info_1 structures
- 0Ah WORD length of buffer
- --------N-215F4A-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteCopy
- AX = 5F4Ah
- DS:DX -> NetRemoteCopy parameter structure (see #0806)
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5F4Bh
-
- Format of LAN Manager NetRemoteCopy parameter structure:
- Offset Size Description (Table 0806)
- 00h DWORD -> source name as UNC
- 04h DWORD -> destination name as UNC
- 08h DWORD -> source password
- 0Ch DWORD -> destination password
- 10h WORD destination open bitmap
- if destination path exists
- 0000h open fails
- 0001h file is appended
- 0002h file is overwritten
- if destination path doesn't exist
- 0000h open fails
- 0010h file is created
- 12h WORD copy control bitmap (see #0807)
- 14h DWORD -> copy_info buffer
- 18h WORD length of copy_info buffer
-
- Bitfields for LAN Manager copy control:
- Bit(s) Description (Table 0807)
- 0 destination must be a file
- 1 destination must be a directory
- 2 destination is opened in ascii mode instead of binary
- 3 source is opened in ascii mode instead of binary
- 4 verify all write operations
- --------N-215F4B-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteMove
- AX = 5F4Bh
- DS:DX -> NetRemoteMove parameter structure
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5F4Ah
-
- Format of LAN Manager NetRemoteMove parameter structure:
- Offset Size Description (Table 0808)
- 00h DWORD -> source name as UNC
- 04h DWORD -> destination name as UNC
- 08h DWORD -> source password
- 0Ch DWORD -> destination password
- 10h WORD destination open bitmap
- if destination path exists
- 0000h open fails
- 0001h file is appended
- 0002h file is overwritten
- if destination path doesn't exist
- 0000h open fails
- 0010h file is created
- 12h WORD move control bitmap
- 0001h destination must be a file
- 0002h destination must be a directory
- 14h DWORD -> move_info buffer
- 18h WORD length of move_info buffer
- --------N-215F4C-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServerEnum
- AX = 5F4Ch
- BX = level (0000h or 0001h)
- CX = buffer length
- ES:DI -> buffer in which to store information
- Return: CF clear if successful
- ES:DI -> server_info_X structures (depending on level)
- (see #0809,#0810)
- BX = entries read
- CX = total entries available
- CF set on error
- AX = error code
- Notes: this function is also supported by the Novell DOS Named Pipe Extender
- this function has been obseleted by NetServerEnum2
- SeeAlso: AX=5F53h
-
- Format of LAN Manager server_info_0 structure:
- Offset Size Description (Table 0809)
- 00h 16 BYTEs name
- SeeAlso: #0810
-
- Format of LAN Manager server_info_1 structure:
- Offset Size Description (Table 0810)
- 00h 16 BYTEs name
- 10h BYTE major version in lower nibble
- 11h BYTE minor version
- 12h DWORD server type bitmask (see #0811)
- 16h DWORD -> comment string
- SeeAlso: #0809
-
- Bitfields for LAN Manager server type:
- Bit(s) Description (Table 0811)
- 0 workstation
- 1 server
- 2 SQL server
- 3 primary domain controller
- 4 backup domain controller
- 5 time server
- 6 Apple File Protocol (AFP) server
- 7 Novell server
- 8 Domain Member (v2.1+)
- 9 Print Queue server (v2.1+)
- 10 Dialin server (v2.1+)
- 11 Unix server (v2.1+)
- --------N-215F4D-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - DosMakeMailslot
- AX = 5F4Dh
- BX = message size
- CX = mailslot size (must be bigger than message size by at least 1)
- (minimum 1000h, maximum FFF6h)
- (buffer must be 9 bytes bigger than this)
- DS:SI -> name
- ES:DI -> memory buffer
- Return: CF clear if successful
- AX = handle
- CF set on error
- AX = error code
- SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
- --------N-215F4E-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - DosDeleteMailslot
- AX = 5F4Eh
- BX = handle
- Return: CF clear if successful
- ES:DI -> memory to be freed (allocated during DosMakeMailslot)
- CF set on error
- AX = error code
- SeeAlso: AX=5F4Dh,AX=5F4Fh
- --------N-215F4F-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - DosMailslotInfo
- AX = 5F4Fh
- BX = handle
- Return: CF clear if successful
- AX = max message size
- BX = mailslot size
- CX = next message size
- DX = next message priority
- SI = number of messages waiting
- CF set on error
- AX = error code
- SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
- --------N-215F50-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - DosReadMailslot
- AX = 5F50h
- BX = handle
- DX:CX = timeout
- ES:DI -> buffer
- Return: CF clear if successful
- AX = bytes read
- CX = next item's size
- DX = next item's priority
- CF set on error
- AX = error code
- SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
- --------N-215F51-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - DosPeekMailslot
- AX = 5F51h
- BX = handle
- ES:DI -> buffer
- Return: CF clear if successful
- AX = bytes read
- CX = next item's size
- DX = next item's priority
- CF set on error
- AX = error code
- SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
- --------N-215F52-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - DosWriteMailslot
- AX = 5F52h
- BX = class
- CX = length of buffer
- DX = priority
- ES:DI -> DosWriteMailslot parameter structure (see #0812)
- DS:SI -> mailslot name
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
-
- Format of LAN Manager DosWriteMailslot parameter structure:
- Offset Size Description (Table 0812)
- 00h DWORD timeout
- 04h DWORD -> buffer
- --------N-215F53-----------------------------
- INT 21 u - LAN Manager Enhanced DOS - NetServerEnum2
- AX = 5F53h
- DS:SI -> NetServerEnum2 parameter structure (see #0813)
- Return: CF clear if successful
- BX = entries read
- CX = total entries available
- CF set on error
- AX = error code
- SeeAlso: AX=5F4Ch
-
- Format of LAN Manager NetServerEnum2 parameter structure:
- Offset Size Description (Table 0813)
- 00h WORD level (0000h or 0001h)
- 02h DWORD -> buffer as array of server_info_??? structures
- 06h WORD length of buffer
- 08h DWORD server type bitmask (see #0814)
- 0Ch DWORD -> Domain name (may be 0000h:0000h for all local domains)
-
- Bitfields for LAN Manager server type:
- Bit(s) Description (Table 0814)
- 0 workstation
- 1 server
- 2 SQL server
- 3 primary domain controller
- 4 backup domain controller
- 5 time server
- 6 Apple File Protocol (AFP) server
- 7 Novell server
- 8 Domain Member (v2.1+)
- 9 Print Queue server (v2.1+)
- 10 Dialin server (v2.1+)
- 11 Unix server (v2.1+)
- Note: set all (FFFFFFFFh) for All Types
-
- Format of LAN Manager server_info_0 structure:
- Offset Size Description (Table 0815)
- 00h 16 BYTEs name
-
- Format of LAN Manager server_info_1 structure:
- Offset Size Description (Table 0816)
- 00h 16 BYTEs name
- 10h BYTE major version in lower nibble
- 11h BYTE minor version
- 12h DWORD server type (bits 0-11) (see #0814)
- 16h DWORD -> comment string
- --------N-215F55----------------------------
- INT 21 U - LAN Manager Enhanced DOS - KILL ALL CONNECTIONS???
- AX = 5F55h
- BX = ???
- Return: CF clear if successful
- CF set on error
- AX = error code
- --------N-215F80-----------------------------
- INT 21 - LANtastic - GET LOGIN ENTRY
- AX = 5F80h
- BX = login entry index (0-based)
- ES:DI -> 16-byte buffer for machine name
- Return: CF clear if successful
- buffer filled with machine name ("\\" prefix removed)
- DL = adapter number (v3+)
- CF set on error
- AX = error code
- Note: the login entry index corresponds to the value BX used in AX=5F83h
- SeeAlso: AX=5F83h
- --------N-215F81-----------------------------
- INT 21 - LANtastic - LOGIN TO SERVER
- AX = 5F81h
- ES:DI -> ASCIZ login path followed immediately by ASCIZ password
- BL = adapter number
- FFh try all valid adapters
- 00h-07h try only specified adapter
- Return: CF clear if successful
- CF set on error
- AX = error code
- Notes: login path is of form "\\machine\username"
- if no password is used, the string at ES:DI must be terminated with
- three NULs for compatibility with LANtastic v3.0.
- SeeAlso: AX=5F82h,AX=5F84h
- --------N-215F82-----------------------------
- INT 21 - LANtastic - LOGOUT FROM SERVER
- AX = 5F82h
- ES:DI -> ASCIZ server name (in form "\\machine")
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
- --------N-215F83-----------------------------
- INT 21 - LANtastic - GET USERNAME ENTRY
- AX = 5F83h
- BX = login entry index (0-based)
- ES:DI -> 16-byte buffer for username currently logged into
- Return: CF clear if successful
- DL = adapter number (v3+)
- CF set on error
- AX = error code
- Note: the login entry index corresponds to the value BX used in AX=5F80h
- SeeAlso: AX=5F80h
- --------N-215F84-----------------------------
- INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
- AX = 5F84h
- BX = server index not currently logged into
- ES:DI -> 16-byte buffer for server name which is available for logging
- in to ("\\" prefix omitted)
- Return: CF clear if successful
- DL = adapter number to non-logged in server is on
- CF set on error
- AX = error code
- SeeAlso: AX=5F81h
- --------N-215F85-----------------------------
- INT 21 - LANtastic - CHANGE PASSWORD
- AX = 5F85h
- ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
- Return: CF clear if successful
- CF set on error
- AX = error code
- Notes: must be logged into the named machine
- this function is illegal for group accounts
- --------N-215F86-----------------------------
- INT 21 - LANtastic - DISABLE ACCOUNT
- AX = 5F86h
- ES:DI -> ASCIZ machine name and password in form "\\machine\password"
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: must be logged into the named machine and concurrent logins set to 1
- by NET_MGR. Requires system manager to re-enable account.
- --------N-215F87-----------------------------
- INT 21 - LANtastic v3+ - GET ACCOUNT
- AX = 5F87h
- DS:SI -> 128-byte buffer for account information (see #0817)
- ES:DI -> ASCIZ machine name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- BX destroyed
- Note: must be logged into the specified machine
-
- Format of LANtastic user account structure:
- Offset Size Description (Table 0817)
- 00h 16 BYTEs blank-padded username (zero-padded for v4.x)
- 10h 16 BYTEs reserved (00h)
- 20h 32 BYTEs user description
- 40h BYTE privilege bits (see #0818)
- 41h BYTE maximum concurrent users
- 42h 42 BYTEs bit map for disallowed half hours, beginning on Sunday
- (bit set if half-hour not an allowed time)
- 6Ch WORD internal (0002h)
- 6Eh 2 WORDs last login time
- 72h 2 WORDs account expiration date (MS-DOS-format year/month:day)
- 76h 2 WORDs password expiration date (0 = none)
- 7Ah BYTE number of days to extend password after change (1-31)
- 00h if no extension required
- ---v3.x---
- 7Bh 5 BYTEs reserved
- ---v4.x---
- 7Bh BYTE storage for first letter of user name when deleted (first
- character is changed to 00h when deleting account)
- 7Ch BYTE extended privileges
- 7Dh 3 BYTEs reserved
-
- Bitfields for LANtastic privilege bits:
- Bit(s) Description (Table 0818)
- 7 bypass access control lists
- 6 bypass queue protection
- 5 treat as local process
- 4 bypass mail protection
- 3 allow audit entry creation
- 2 system manager
- 0 user cannot change password
- --------N-215F88-----------------------------
- INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
- AX = 5F88h
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5F82h
- --------N-215F97-----------------------------
- INT 21 - LANtastic - COPY FILE
- AX = 5F97h
- CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
- SI = source file handle
- DI = destination file handle
- Return: CF clear if successful
- DX:AX = number of bytes copied
- CF set on error
- AX = error code
- Note: copy is performed by server
- --------N-215F98-----------------------------
- INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
- AX = 5F98h
- DS:SI -> message buffer (see #0819)
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: v4.1- return no errors
- SeeAlso: AX=5F99h
-
- Format of LANtastic message buffer:
- Offset Size Description (Table 0819)
- 00h BYTE reserved
- 01h BYTE message type
- 00h general
- 01h server warning
- 02h-7Fh reserved
- 80h-FFh user-defined
- 02h 16 BYTEs ASCIZ destination machine name
- 12h 16 BYTEs ASCIZ server name which user must be logged into
- 22h 16 BYTEs ASCIZ user name
- 32h 16 BYTEs ASCIZ originating machine name (filled in when received)
- 42h 80 BYTEs message text
- --------N-215F99-----------------------------
- INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
- AX = 5F99h
- ES:DI -> messsage buffer (see #0819)
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5F98h
- --------N-215F9A-----------------------------
- INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
- AX = 5F9Ah
- Return: CF clear if successful
- DL = bits describing processing of received messages (see #0820)
- CF set on error
- AX = error code
- SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh
-
- Bitfields for unsolicited message processing flags:
- Bit(s) Description (Table 0820)
- 0 beep before message is delivered
- 1 deliver message to message service
- 2 pop up message automatically (v3+)
- --------N-215F9B-----------------------------
- INT 21 - LANtastic - SET MESSAGE PROCESSING FLAGS
- AX = 5F9Bh
- DL = bits describing processing for received unsolicited messages
- (see #0820)
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5F9Ah,AX=5F9Eh
- --------N-215F9C-----------------------------
- INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
- AX = 5F9Ch
- CX = time to leave on screen in clock ticks
- DH = 0-based screen line on which to place message
- Return: CF clear if successful
- CF set on error
- AX = error code (0Bh)
- Notes: the original screen contents are restored when the message is removed
- the message will not appear, and an error will be returned, if the
- screen is in a graphics mode
- SeeAlso: AX=5F9Ah
- --------N-215F9D-----------------------------
- INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
- AX = 5F9Dh
- Return: DL = redirector control bits
- bit 7: set to notify on print job completion
- SeeAlso: AX=5F9Ah,AX=5F9Eh
- --------N-215F9E-----------------------------
- INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
- AX = 5F9Eh
- DL = redirector control bits (see AX=5F9Dh)
- Return: nothing
- SeeAlso: AX=5F9Bh,AX=5F9Dh
- --------N-215FA0-----------------------------
- INT 21 - LANtastic - GET QUEUE ENTRY
- AX = 5FA0h
- BX = queue entry index (0000h is first entry)
- DS:SI -> buffer for queue entry (see #0823)
- ES:DI -> ASCIZ server name in form "\\name"
- Return: CF clear if successful
- CF set on error
- AX = error code
- BX = entry index for next queue entry (BX-1 is current index)
- SeeAlso: AX=5FA1h,AX=5FA2h
-
- (Table 0821)
- Values for status of LANtastic queue entry:
- 00h empty
- 01h being updated
- 02h being held
- 03h waiting for despool
- 04h being despooled
- 05h canceled
- 06h spooled file could not be accessed
- 07h destination could not be accessed
- 08h rush job
-
- (Table 0822)
- Values for type of LANtastic queue entry:
- 00h printer queue file
- 01h message
- 02h local file
- 03h remote file
- 04h to remote modem
- 05h batch processor file
-
- Format of LANtastic queue entry:
- Offset Size Description (Table 0823)
- 00h BYTE status of entry (see #0821)
- 01h DWORD size of spooled file
- 05h BYTE type of entry (see #0822)
- 06h BYTE output control (see #0824)
- 07h WORD number of copies
- 09h DWORD sequence number of queue entry
- 0Dh 48 BYTEs pathname of spooled file
- 3Dh 16 BYTEs user who spooled file
- 4Dh 16 BYTEs name of machine from which file was spooled
- 5Dh WORD date file was spooled (see #0762 at AX=5700h)
- 5Fh WORD time file was spooled (see #0761 at AX=5700h)
- 61h 17 BYTEs ASCIZ destination device or user name
- 72h 48 BYTEs comment field
-
- Bitfields for output control:
- Bit(s) Description (Table 0824)
- 6 don't delete (for mail)
- 5 mail file contains voice mail (v3+)
- 4 mail message has been read
- 3 response has been requested for this mail
- --------N-215FA1-----------------------------
- INT 21 - LANtastic - SET QUEUE ENTRY
- AX = 5FA1h
- BX = handle of opened queue entry
- DS:SI -> queue entry (see #0823)
- Return: CF clear if successful
- CF set on error
- AX = error code
- Notes: the only queue entry fields which may be changed are output control,
- number of copies, destination device, and comment
- the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
- call on the file "\\server\\@MAIL" or "\\server\@name" (for
- printer queue entries)
- SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
- --------N-215FA2-----------------------------
- INT 21 - LANtastic - CONTROL QUEUE
- AX = 5FA2h
- BL = control command
- 00h start despooling (privileged)
- 01h halt despooling (privileged)
- 02h halt despooling at end of job (privileged)
- 03h pause despooler at end of job (privileged)
- 04h print single job (privileged)
- 05h restart current job (privileged)
- 06h cancel the current job
- 07h hold queue entry
- 08h release a held queue entry
- 09h make queue entry a rushed job (privileged)
- CX:DX = sequence number to control (commands 06h-09h)
- DX = physical printer number (commands 00h-05h)
- 00h-02h LPT1-LPT3
- 03h,04h COM1,COM2
- other all printers
- ES:DI -> ASCIZ server name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- --------N-215FA3-----------------------------
- INT 21 - LANtastic v3+ - GET PRINTER STATUS
- AX = 5FA3h
- BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
- DS:SI -> buffer for printer status (see #0825)
- ES:DI -> ASCIZ server name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- BX = next physical printer number
- Note: you must be logged in to the specified server
-
- Format of LANtastic printer status:
- Offset Size Description (Table 0825)
- 00h BYTE printer state (see #0826)
- 01h WORD queue index of print job being despooled
- FFFFh if not despooling--ignore all following fields
- 03h WORD actual characters per second being output
- 05h DWORD number of characters actually output so far
- 09h DWORD number of bytes read from spooled file so far
- 0Dh WORD copies remaining to print
-
- Bitfields for LANtastic printer state:
- Bit(s) Description (Table 0826)
- 7 printer paused
- 0-6 0 printer disabled
- 1 will stop at end of job
- 2 print multiple jobs
- --------N-215FA4-----------------------------
- INT 21 - LANtastic v3+ - GET STREAM INFO
- AX = 5FA4h
- BX = 0-based stream index number
- DS:SI -> buffer for stream information (see #0827)
- ES:DI -> ASCIZ machine name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- BX = next stream number
- SeeAlso: AX=5FA5h
-
- Format of LANtastic stream information:
- Offset Size Description (Table 0827)
- 00h BYTE queueing of jobs for logical printer (0=disabled,other=enabled)
- 01h 11 BYTEs logical printer resource template (may contain ? wildcards)
- --------N-215FA5-----------------------------
- INT 21 - LANtastic v3+ - SET STREAM INFO
- AX = 5FA5h
- BX = 0-based stream index number
- DS:SI -> buffer containing stream information (see #0827)
- ES:DI -> ASCIZ machine name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5FA4h
- --------N-215FA7-----------------------------
- INT 21 - LANtastic - CREATE USER AUDIT ENTRY
- AX = 5FA7h
- DS:DX -> ASCIZ reason code (max 8 bytes)
- DS:SI -> ASCIZ variable reason string (max 128 bytes)
- ES:DI -> ASCIZ machine name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: you must be logged in to the specified server and have the "U"
- privilege to execute this call
- --------N-215FA9-----------------------------
- INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
- AX = 5FA9h
- BX = handle of opened queue entry
- DS:SI -> queue entry (see #0823)
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: functions exactly the same as AX=5FA1h except the spooled filename is
- also set. This call supports direct despooling.
- SeeAlso: AX=5FA1h
- --------N-215FB0-----------------------------
- INT 21 - LANtastic - GET ACTIVE USER INFORMATION
- AX = 5FB0h
- BX = server login entry index
- DS:SI -> buffer for active user entry (see #0828)
- ES:DI -> ASCIZ machine name in form "\\server"
- Return: CF clear if successful
- CF set on error
- AX = error code
- BX = next login index
- SeeAlso: AX=5FB2h
-
- Format of LANtastic active user entry:
- Offset Size Description (Table 0828)
- 00h WORD virtual circuit number
- 02h BYTE login state (see #0829)
- 03h BYTE last command issued (see #0830)
- 04h 5 BYTEs number of I/O bytes (40-bit unsigned number)
- 09h 3 BYTEs number of server requests (24-bit unsigned)
- 0Ch 16 BYTEs name of user who is logged in
- 1Ch 16 BYTEs name of remote logged in machine
- 2Ch BYTE extended privileges (v4+???)
- bit 0: user cannot change his password
- 2Dh WORD time left in minutes (0000h = unlimited) (v4+???)
-
- Bitfields for login state:
- Bit(s) Description (Table 0829)
- 0 fully logged in
- 1 remote program load login
- 2 user has system manager privileges
- 3 user can create audit entries
- 4 bypass mail protection
- 5 treat as local process
- 6 bypass queue protection
- 7 bypass access control lists
-
- (Table 0830)
- Values for last LANtastic command:
- 00h login
- 01h process termination
- 02h open file
- 03h close file
- 04h create file
- 05h create new file
- 06h create unique file
- 07h commit data to disk
- 08h read file
- 09h write file
- 0Ah delete file
- 0Bh set file attributes
- 0Ch lock byte range
- 0Dh unlock byte range
- 0Eh create subdirectory
- 0Fh remove subdirectory
- 10h rename file
- 11h find first matching file
- 12h find next matching file
- 13h get disk free space
- 14h get a queue entry
- 15h set a queue entry
- 16h control the queue
- 17h return login information
- 18h return link description
- 19h seek on file
- 1Ah get server's time
- 1Bh create audit entry
- 1Ch open file in multitude of modes
- 1Dh change password
- 1Eh disable account
- 1Fh local server file copy
- ---v3+---
- 20h get username from account file
- 21h translate server's logical path
- 22h make indirect file
- 23h get indirect file contents
- 24h get physical printer status
- 25h get logical print stream info
- 26h set logical print stream info
- 27h get user's account record
- ---v4+---
- 28h request server shutdown
- 29h cancel server shutdown
- 2Ah stuff server's keyboard
- 2Bh write then commit data to disk
- 2Ch set extended queue entry
- 2Dh terminate user from server
- 2Eh enable/disable logins
- 2Fh flush server caches
- 30h change username
- 31h get extended queue entry
- (same as get queue, but can return named fields blanked)
- --------N-215FB1-----------------------------
- INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
- AX = 5FB1h
- DS:SI -> 64-byte buffer for link description
- ES:DI -> ASCIZ machine and shared directory name in form
- "\\machine\shared-resource"
- Return: CF clear if successful
- CX = access control list privileges for requesting user (see #0831)
- CF set on error
- AX = error code
-
- Bitfields for LANtastic access control list:
- Bit(s) Description (Table 0831)
- 4 (I) allow expansion of indirect files
- 5 (A) allow attribute changing
- 6 (P) allow physical access to device
- 7 (E) allow program execution
- 8 (N) allow file renaming
- 9 (K) allow directory deletion
- 10 (D) allow file deletion
- 11 (L) allow file/directory lookups
- 12 (M) allow directory creation
- 13 (C) allow file creation
- 14 (W) allow open for write and writing
- 15 (R) allow open for read and reading
- --------N-215FB2-----------------------------
- INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
- AX = 5FB2h
- BX = username entry index (0 for first)
- DS:SI -> 16-byte buffer for username
- ES:DI -> ASCIZ server name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- BX = next queue entry index
- SeeAlso: AX=5FB0h
- --------N-215FB3-----------------------------
- INT 21 - LANtastic v3+ - TRANSLATE PATH
- AX = 5FB3h
- DS:SI -> 128-byte buffer for ASCIZ result
- ES:DI -> full ASCIZ path, including server name
- DX = types of translation to be performed
- bit 0: expand last component as indirect file
- bit 1: return actual path relative to server's physical disk
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: always expands any indirect files along the path
- SeeALso: AX=5FB4h,INT 21/AH=60h
- --------N-215FB4-----------------------------
- INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
- AX = 5FB4h
- DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
- ES:DI -> full ASCIZ path of indirect file to create, incl machine name
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: the contents of the indirect file may be any valid server-relative path
- SeeAlso: AX=5FB3h,AX=5FB5h
- --------N-215FB5-----------------------------
- INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
- AX = 5FB5h
- DS:SI -> 128-byte buffer for ASCIZ indirect file contents
- ES:DI -> full ASCIZ path of indirect file
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5FB4h
- --------N-215FB6-----------------------------
- INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
- AX = 5FB6h
- ES:DI -> pointer to ASCIZ default user name, immediately followed by
- ASCIZ password
- BL = adapter number to use for default login attempt
- FFh try all valid adapters
- 00h-05h try adapter 0-5 explicitly
- Return: CF clear if successful
- CF set on error
- AX = error code
- Notes: call with ES:DI -> two nulls to disable auto-login
- SeeAlso: AX=5FB7h
- --------N-215FB7-----------------------------
- INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
- AX = 5FB7h
- ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
- Return: CF clear if successful
- DL = adapter number used for default login attempt
- FFh all valid adapters will be tried
- 00h-05h specified adapter will be tried explicitly
- CF set on error
- AX = error code
- SeeAlso: AX=5F81h,AX=5FB6h
- --------N-215FC0-----------------------------
- INT 21 - LANtastic - GET TIME FROM SERVER
- AX = 5FC0h
- DS:SI -> time block (see #0832)
- ES:DI -> ASCIZ server name to get time from
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AH=E7h
-
- Format of LANtastic time block:
- Offset Size Description (Table 0832)
- 00h WORD year
- 02h BYTE day
- 03h BYTE month
- 04h BYTE minutes
- 05h BYTE hour
- 06h BYTE hundredths of second
- 07h BYTE second
- --------N-215FC8-----------------------------
- INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
- AX = 5FC8h
- ES:DI -> ASCIZ server name in form "\\machine"
- DS:SI -> ASCIZ reason string (80 characters)
- CX = number of minutes until shutdown (0 = immediate)
- DX = option flags (see #0833)
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5FC9h
-
- Bitfields for LANtastic option flags:
- Bit(s) Description (Table 0833)
- 0 auto reboot
- 1 do not notify users
- 2 halt after shutdown
- 3 shutdown due to power fail (used by UPS)
- 4-7 reserved
- 8-14 user definable
- 15 reserved
- --------N-215FC9-----------------------------
- INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
- AX = 5FC9h
- ES:DI -> ASCIZ server name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: you must have the "S" privilege to use this call
- SeeAlso: AX=5FC8h
- --------N-215FCA-----------------------------
- INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
- AX = 5FCAh
- ES:DI -> ASCIZ server name in form "\\machine"
- DS:SI -> ASCIZ string to stuff (128 bytes)
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: you must have the "S" privilege to use this call
- maximum number of characters that can be stuffed is determined by the
- server's RUN BUFFER SIZE.
- SeeAlso: INT 16/AH=05h
- --------N-215FCB-----------------------------
- INT 21 - LANtastic v4.1+ - TERMINATE USER
- AX = 5FCBh
- ES:DI -> ASCIZ server name in form "\\machine"
- DS:SI -> blank-padded username. A null char = wildcard.
- DS:DX -> blank-padded machine name. A null char = wildcard.
- CX = minutes until termination (0 = immediate)
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: you must have the "S" privilege to use this call
- you cannot log yourself out using this call
- SeeAlso: AX=5F82h
- --------N-215FCC-----------------------------
- INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
- AX = 5FCCh
- ES:DI -> ASCIZ server name in form "\\machine"
- CX = bit values (value of bits you want to set) (see #0834)
- DX = bit mask (bits you are interested in, 0 = get only) (see #0834)
- Return: CF clear if successful
- CX = control bits after call (see #0834)
- CF set on error
- AX = error code
- Note: you must have the "S" privilege to SET, anyone can GET.
-
- Bitfields for control bits:
- Bit(s) Description (Table 0834)
- 0 disable logins
- --------N-215FCD-----------------------------
- INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
- AX = 5FCDh
- ES:DI -> ASCIZ server name in form "\\machine"
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: you must have the "S" privilege to use this call.
- --------N-215FD0-----------------------------
- INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
- AX = 5FD0h
- Return: CF clear if successful
- CX = redirected printer timeout in clock ticks of 55ms
- 0000h if timeout disabled
- CF set on error
- AX = error code
- SeeAlso: AX=5FD1h
- --------N-215FD1-----------------------------
- INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
- AX = 5FD1h
- CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
- Return: CF clear if successful
- CF set on error
- AX = error code
- SeeAlso: AX=5FD0h
- --------N-215FE0-----------------------------
- INT 21 C - LANtastic - GET DOS SERVICE VECTOR
- AX = 5FE0h
- Return: CF clear if successful
- ES:BX -> current FAR service routine
- CF set on error
- AX = error code
- Note: the service routine is called by the LANtastic redirector whenever DOS
- may safely be called, permitting external TSRs and drivers to hook
- into LANtastic's DOS busy flag checking
- SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
- --------N-215FE1-----------------------------
- INT 21 - LANtastic - SET DOS SERVICE VECTOR
- AX = 5FE1h
- ES:BX -> FAR routine to call when DOS services are available
- Return: CF clear if successful
- CF set on error
- AX = error code
- Note: new handler must chain to previous handler as its first action
- SeeAlso: AX=5FE0h
- --------N-215FE2-----------------------------
- INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
- AX = 5FE2h
- Return: CF clear if successful
- ES:BX -> current FAR message service routine
- CF set on error
- AX = error code
- SeeAlso: AX=5FE0h,AX=5FE3h
- --------N-215FE3-----------------------------
- INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
- AX = 5FE3h
- ES:BX -> FAR routine for processing network messages
- Return: CF clear if successful
- CF set on error
- AX = error code
- Notes: handler must chain to previous handler as its first action
- on invocation, ES:BX -> just-received message
- SeeAlso: AX=5FE2h
- --------D-2160-------------------------------
- INT 21 - DOS 3.0+ - "TRUENAME" - CANONICALIZE FILENAME OR PATH
- AH = 60h
- DS:SI -> ASCIZ filename or path
- ES:DI -> 128-byte buffer for canonicalized name
- Return: CF set on error
- AX = error code
- 02h invalid component in directory path or drive letter only
- 03h malformed path or invalid drive letter
- ES:DI buffer unchanged
- CF clear if successful
- AH = 00h
- AL = destroyed (00h or 5Ch or last char of current dir on drive)
- buffer filled with qualified name of form D:\PATH\FILE.EXT or
- \\MACHINE\PATH\FILE.EXT
- Desc: determine the canonical name of the specified filename or path,
- corresponding to the undocumented TRUENAME command in COMMAND.COM
- Notes: the input path need not actually exist
- letters are uppercased, forward slashes converted to backslashes,
- asterisks converted to appropriate number of question marks, and
- file and directory names are truncated to 8.3 if necessary. (DR-DOS
- 3.41 and 5.0 do not expand asterisks)
- '.' and '..' in the path are resolved
- filespecs on local drives always start with "d:", those on network
- drives always start with "\\"
- if path string is on a JOINed drive, the returned name is the one that
- would be needed if the drive were not JOINed; similarly for a
- SUBSTed, ASSIGNed, or network drive letter. Because of this, it is
- possible to get a qualified name that is not legal under the current
- combination of SUBSTs, ASSIGNs, JOINs, and network redirections
- under DOS 3.3 through 6.00, a device name is translated differently if
- the device name does not have an explicit directory or the directory
- is \DEV (relative directory DEV from the root directory works
- correctly). In these cases, the returned string consists of the
- unchanged device name and extension appended to the string X:/
- (forward slash instead of backward slash as in all other cases) where
- X is the default or explicit drive letter.
- functions which take pathnames require canonical paths if invoked via
- INT 21/AX=5D00h
- supported by OS/2 v1.1 compatibility box
- NetWare 2.1x does not support characters with the high bit set; early
- versions of NetWare 386 support such characters except in this call.
- In addition, NetWare returns error code 3 for the path "X:\"; one
- should use "X:\." instead.
- for DOS 3.3-6.0, the input and output buffers may be the same, as the
- canonicalized name is built in an internal buffer and copied to the
- specified output buffer as the very last step
- for DR DOS 6.0, this function is not automatically called when on a
- network. Device drivers reportedly cannot make this call from their
- INIT function. Using the same pointer for both input and output
- buffers is not supported in the April 1992 and earlier versions of
- DR DOS
- SeeAlso: AX=5FB3h,INT 2F/AX=1123h,INT 2F/AX=1221h
- --------D-2161-------------------------------
- INT 21 - DOS 3+ - UNUSED
- AH = 61h
- Return: AL = 00h
- Note: this function does nothing and returns immediately
- --------O-2161--BP6467-----------------------
- INT 21 U - OS/2 v1.x FAPI - OS/2 FILE SYSTEM JOIN/SUBST
- AH = 61h
- BP = 6467h ("dg")
- AL = function
- 00h list
- 01h add
- 02h delete
- BX = drive number
- CX = size of buffer
- SI = type (0002h JOIN, 0003h SUBST)
- ES:DI -> buffer
- Return: ???
- Notes: used by JOIN and SUBST to communicate with the OS/2 file system
- also supported by OS/2 v2.0+ Virtual DOS Machines
- --------D-2162-------------------------------
- INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
- AH = 62h
- Return: BX = segment of PSP for current process
- Notes: under DOS 3+, this function does not use any of the DOS-internal stacks
- and may thus be called at any time, even during another INT 21h call
- the current PSP is not necessarily the caller's PSP
- identical to the undocumented AH=51h
- SeeAlso: AH=50h,AH=51h
- --------D-216300-----------------------------
- INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
- AX = 6300h
- Return: CF clear if successful
- DS:SI -> lead byte table (see #0835)
- CF set on error
- AX = error code (01h) (see #0770 at AH=59h)
- Notes: does not preserve any registers other than SS:SP
- the US version of MS-DOS 3.30 treats this as an unused function,
- setting AL=00h and returning immediately
- SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
-
- Format of double-byte character set lead byte table entry:
- Offset Size Description (Table 0835)
- 00h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
- 02h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
- ...
- N 2 BYTEs 00h,00h end flag
- --------D-216300-----------------------------
- INT 21 - Far East DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE
- AX = 6300h
- Return: AL = error code
- 00h successful
- DS:SI -> DBCS table (see #0836)
- all other registers except CS:IP and SS:SP destroyed
- FFh not supported
- Notes: probably identical to AH=63h/AL=00h for DOS 2.25
- the US version of MS-DOS 3.30 treats this as an unused function,
- setting AL=00h and returning immediately
- the US version of DOS 4.0+ accepts this function, but returns an empty
- list
- SeeAlso: AX=6300h"DOS 2.25"
-
- Format of DBCS table:
- Offset Size Description (Table 0836)
- 00h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
- 02h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
- ...
- N 2 BYTEs 00h,00h end flag
- --------D-216301-----------------------------
- INT 21 - DOS 2.25, Far East DOS 3.2+ - SET KOREAN (HANGEUL) INPUT MODE
- AX = 6301h
- DL = new mode
- 00h return only full characters on DOS keyboard input functions
- 01h return partially-formed (interim) characters also
- Return: AL = status
- 00h successful
- FFh invalid mode
- Note: Novell DOS 7 simply stores DL in the caller's PSP (see #0498 at AH=26h)
- SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
- --------D-216302-----------------------------
- INT 21 - DOS 2.25, Far East DOS 3.2+ - GET KOREAN (HANGEUL) INPUT MODE
- AX = 6302h
- Return: AL = status
- 00h successful
- DL = current input mode
- 00h return only full characters (clears interim flag)
- 01h return partial characters (sets interim flag)
- FFh not supported
- Note: Novell DOS 7 simply reads the value out of the caller's PSP, so it
- can return values other than 00h or 01h if the last call to AX=6301h
- used another value
- SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
- --------D-2164-------------------------------
- INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
- AH = 64h
- AL = flag
- 00h (default) call device driver function 5 (non-dest read)
- before INT 21/AH=01h,08h,0Ah
- nonzero don't call driver function 5
- Return: nothing (MS-DOS)
- CF set, AX=error code??? (DR-DOS 5.0, which does not support this call)
- Notes: this function is called by the DOS 3.3+ PRINT.COM
- under MS-DOS, this function does not use any of the DOS-internal stacks
- and may thus be called at any time, even during another DOS call
- SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
- --------O-2164--DX0000-----------------------
- INT 21 U - OS/2 v2.0+ Virtual DOS Machine - ENABLE AUTOMATIC TITLE SWITCH
- AH = 64h
- DX = 0000h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- Note: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- SeeAlso: AH=64h/BX=0001h,INT 21/AH=4Bh
- --------O-2164--DX0001-----------------------
- INT 21 U - OS/2 v2.0+ Virtual DOS Machine - SET SESSION TITLE
- AH = 64h
- DX = 0001h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- ES:DI -> new ASCIZ title (max 12 char) or "" to restore default title
- Note: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- SeeAlso: AH=64h/BX=0000h,AH=64h/BX=0002h,INT 15/AH=12h/BH=05h
- --------O-2164--DX0002-----------------------
- INT 21 U - OS/2 v2.0+ Virtual DOS Machine - GET SESSION TITLE
- AH = 64h
- DX = 0002h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- ES:DI -> 13-byte buffer for current title
- Return: buffer filled (single 00h if title never changed)
- Note: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- SeeAlso: AH=64h/BX=0000h,AH=64h/BX=0001h,INT 15/AH=12h/BH=05h
- --------O-2164--DX0003-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LASTDRIVE
- AH = 64h
- DX = 0003h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- Return: AL = highest drive supported
- Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- used by WinOS2
- --------O-2164--DX0004-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SIZE OF PTDA JFT
- AH = 64h
- DX = 0004h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- Return: AX = number of entries in OS/2 JFT for VDM
- Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- in an OS/2 VDM, the DOS Job File Table in the PSP contains an index
- into the OS/2 JFT in the Per-Task Data Area rather than an SFT index
- because the OS/2 SFT can contain more than 255 entries
- --------O-2164--DX0005-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SECOND SFT FLAGS WORD
- AH = 64h
- DX = 0005h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- DI = DOS file handle
- Return: AX = value of second flags word from OS/2 SFT entry for file
- Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- the OS/2 SFT has two flags words rather than DOS's one word, and this
- function provides access to the word which is not present in DOS
- --------O-2164--DX0006-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - UNLOAD DOSKRNL SYMBOLS & LOAD PROGR
- AH = 64h
- DX = 0006h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- ES:DI -> ASCIZ filespec
- DS = base address for loading
- Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- this function is only supported by the kernel debugging version of
- OS2KRNL
- --------O-2164--DX0007-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET WinOS2 CALL GATE ADDRESS
- AH = 64h
- DX = 0007h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- Return: AX = call gate address
- Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- used by WinOS2 to make direct calls to OS2KRNL, bypassing the overhead
- of DOSKRNL
- --------O-2164--DX0008-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LOADING MESSAGE
- AH = 64h
- DX = 0008h (function number)
- CX = 636Ch (magic value, "cl")
- BX = 0000h (indicates special request)
- Return: DS:DX -> '$'-terminated message "Loading. Please wait."
- Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
- in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
- this function permits National Language Support for the initial message
- displayed while WinOS2 starts a full-screen session
- --------O-2164--CX636C-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API support
- AH = 64h
- CX = 636Ch ("cl")
- BX = API ordinal (see #0837)
- other registers as appropriate for API call
- Return: as appropriate for API call
- SeeAlso: AH=64h/BX=0025h,AH=64h/BX=00B6h,AH=64h/BX=00CBh
-
- (Table 0837)
- Values for OS/2 API ordinal:
- 0025h DOS32StartSession
- 0082h DosGetCP
- 00B6h DosQFSAttach
- 00BFh DosEditName
- 00CBh DosForceDelete
- 0144h Dos32CreateEventSem
- 0145h Dos32OpenEvenSem
- 0146h Dos32CloseEventSem
- 0147h Dos32ResetEventSem
- 0148h Dos32PostEventSem
- 0149h Dos32WaitEventSem
- 014Ah Dos32QueryEventSem
- 014Bh Dos32CreateMutexSem
- 014Ch Dos32OpenMutexSem
- 014Dh Dos32CloseMutexSem
- 014Eh Dos32RequestMutexSem
- 014Fh Dos32ReleaseMutexSem
- 0150h Dos32QueryMutexSem
- 0151h Dos32CreateMuxWaitSem
- 0152h Dos32OpenMuxWaitSem
- 0153h Dos32CloseMuxWaitSem
- 0154h Dos32WaitMuxWaitSem
- 0155h Dos32AddMuxWaitSem
- 0156h Dos32DeleteMuxWaitSem
- 0157h Dos32QueryMuxWaitSem
- --------O-2164--BX0025-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DOS32StartSession
- AH = 64h
- BX = 0025h (API ordinal)
- CX = 636Ch ("cl")
- DS:SI -> STARTDATA structure (see #0838)
- Return: AX = return code
- SeeAlso: AH=64h/CX=636Ch,AH=64h/BX=00B6h
-
- Format of OS/2 Virtual DOS Machine STARTDATA structure:
- Offset Size Description (Table 0838)
- 00h WORD length of structure (must be 0018h,001Eh,0020h,0032h,or 003Ch)
- 02h WORD relation of new process to caller (00h independent, 01h child)
- 04h WORD fore/background (00h foreground, 01h background)
- 06h WORD trace options (00h-02h, 00h = no trace)
- 08h DWORD pointer to ASCIZ program title (max 62 chars) or 0000h:0000h
- 0Ch DWORD pointer to ASCIZ program name (max 128 chars) or 0000h:0000h
- 10h DWORD pointer to ASCIZ program args (max 144 chars) or 0000h:0000h
- 14h DWORD "TermQ" (currently reserved, must be 00000000h)
- 18h DWORD pointer to environment (max 486 bytes) or 0000h:0000h
- 1Ch WORD inheritance (00h or 01h)
- 1Eh WORD session type
- 00h OS/2 session manager determines type (default)
- 01h OS/2 full-screen
- 02h OS/2 window
- 03h PM
- 04h VDM full-screen
- 07h VDM window
- 20h DWORD pointer to ASCIZ icon filename (max 128 chars) or 0000h:0000h
- 24h DWORD "PgmHandle" (currently reserved, must be 00000000h)
- 28h WORD "PgmControl"
- 2Ah WORD initial column
- 2Ch WORD initial row
- 2Eh WORD initial width
- 30h WORD initial height
- 32h WORD reserved (0)
- 34h DWORD "ObjectBuffer" (currently reserved, must be 00000000h)
- 38h DWORD "ObjectBufferLen" (currently reserved, must be 00000000h)
- --------O-2164--BX00B6-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DosQFSAttach
- AH = 64h
- BX = 00B6h (API ordinal)
- CX = 636Ch (magic value "cl")
- DS = user's data segment
- ES:DI -> FSQAttachStruc (see #0839)
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- AX = 0000h
- data buffer filled
- SeeAlso: AH=64h/CX=636Ch
-
- Format of OS/2 Virtual DOS Machine FSQAttachStruc:
- Offset Size Description (Table 0839)
- 00h DWORD reserved
- 04h DWORD pointer to the offset of the data buffer length
- 08h DWORD pointer to the offset of the data buffer
- 0Ch WORD FSA Info level
- 0Eh WORD ordinal index into table
- 10h DWORD pointer to the offset of the device name
- Notes: The segment value of the buffer, buffer length, and device
- name MUST all be the same. It is defined on entry in the DS
- register. The details of each info level are defined in the
- OS/2 CP Reference.
- --------O-2164--BX00CB-----------------------
- INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DosForceDelete
- AH = 64h
- BX = 00CBh (API ordinal)
- CX = 636Ch (magic value "cl")
- DS:DX -> ASCIZ filename
- Return: CF clear if successful
- AX destroyed
- CF set on error
- AX = error code (02h,03h,05h) (see #0770 at AH=59h)
- Desc: delete a file without saving it to the undelete directory
- SeeAlso: AH=41h,AH=64h/CX=636Ch
- --------D-2165-------------------------------
- INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
- AH = 65h
- AL = info ID
- 01h get general internationalization info
- 02h get pointer to uppercase table
- 04h get pointer to filename uppercase table
- 05h get pointer to filename terminator table
- 06h get pointer to collating sequence table
- 07h (DOS 4+) get pointer to Double-Byte Character Set table
- BX = code page (FFFFh=global code page)
- DX = country ID (FFFFh=current country)
- ES:DI -> country information buffer (see #0840)
- CX = size of buffer (>= 5)
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- CX = size of country information returned
- ES:DI -> country information
- Notes: AL=05h appears to return same info for all countries and codepages; it
- has been documented for DOS 5+, but was undocumented in ealier
- versions
- NLSFUNC must be installed to get info for countries other than the
- default
- subfunctions 02h and 04h are identical under OS/2
- SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h,INT 2F/AX=14FEh
-
- Format of country information:
- Offset Size Description (Table 0840)
- 00h BYTE info ID
- ---if info ID = 01h---
- 01h WORD size
- 03h WORD country ID
- 05h WORD code page
- 07h 34 BYTEs country-dependent info (see AH=38h)
- ---if info ID = 02h---
- 01h DWORD pointer to uppercase table (see #0841)
- ---if info ID = 04h---
- 01h DWORD pointer to filename uppercase table (see #0842)
- ---if info ID = 05h---
- 01h DWORD pointer to filename character table (see #0843)
- ---if info ID = 06h---
- 01h DWORD pointer to collating table (see #0844)
- ---if info ID = 07h (DOS 4+)---
- 01h DWORD pointer to DBCS lead byte table (see #0845)
-
- Format of uppercase table:
- Offset Size Description (Table 0841)
- 00h WORD table size
- 02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh
-
- Format of filename uppercase table:
- Offset Size Description (Table 0842)
- 00h WORD table size
- 02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh
-
- Format of filename terminator table:
- Offset Size Description (Table 0843)
- 00h WORD table size (not counting this word)
- 02h BYTE ??? (01h for MS-DOS 3.30-6.00)
- 03h BYTE lowest permissible character value for filename
- 04h BYTE highest permissible character value for filename
- 05h BYTE ??? (00h for MS-DOS 3.30-6.00)
- 06h BYTE first excluded character in range \ all characters in this
- 07h BYTE last excluded character in range / range are illegal
- 08h BYTE ??? (02h for MS-DOS 3.30-6.00)
- 09h BYTE number of illegal (terminator) characters
- 0Ah N BYTEs characters which terminate a filename: ."/\[]:|<>+=;,
- Note: partially documented for DOS 5+, but undocumented for earlier versions
-
- Format of collating table:
- Offset Size Description (Table 0844)
- 00h WORD table size
- 02h 256 BYTEs values used to sort characters 00h to FFh
-
- Format of DBCS lead byte table:
- Offset Size Description (Table 0845)
- 00h WORD length
- 02h 2N BYTEs start/end for N lead byte ranges
- WORD 0000h (end of table)
- --------D-2165-------------------------------
- INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
- AH = 65h
- AL = function
- 20h capitalize character
- DL = character to capitalize
- Return: DL = capitalized character
- 21h capitalize string
- DS:DX -> string to capitalize
- CX = length of string
- 22h capitalize ASCIZ string
- DS:DX -> ASCIZ string to capitalize
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- Note: these calls have been documented for DOS 5+, but were undocumented in
- DOS 4.x.
- --------D-216523-----------------------------
- INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
- AX = 6523h
- DL = character
- DH = second character of double-byte character (if applicable)
- Return: CF set on error
- CF clear if successful
- AX = type
- 00h no
- 01h yes
- 02h neither yes nor no
- --------D-2165-------------------------------
- INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
- AH = 65h
- AL = function
- A0h capitalize filename character
- DL = character to capitalize
- Return: DL = capitalized character
- A1h capitalize counted filename string
- DS:DX -> filename string to capitalize
- CX = length of string
- A2h capitalize ASCIZ filename
- DS:DX -> ASCIZ filename to capitalize
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- Note: nonfunctional in DOS 4.00 through 6.00 due to a bug (the code sets a
- pointer depending on the high bit of AL, but doesn't clear the
- bit before branching by function number).
- --------D-216601-----------------------------
- INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
- AX = 6601h
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- BX = active code page (see #0846)
- DX = system code page (see #0846)
- SeeAlso: AX=6602h
- --------D-216602-----------------------------
- INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
- AX = 6602h
- BX = active code page (see #0846)
- DX = system code page (active page at boot time)
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- SeeAlso: AX=6601h,INT 2F/AX=14FFh
-
- (Table 0846)
- Values for code page:
- 437 US
- 850 Multilingual
- 852 Slavic/Latin II (DOS 5+)
- 857 Turkish
- 860 Portugal
- 861 Iceland
- 863 Canada (French)
- 865 Norway/Denmark
- --------D-2167-------------------------------
- INT 21 - DOS 3.3+ - SET HANDLE COUNT
- AH = 67h
- BX = size of new file handle table for process
- Return: CF clear if successful
- CF set on error
- AX = error code (see #0770 at AH=59h)
- Desc: adjust the size of the per-process open file table, thus raising or
- lowering the limit on the number of files the caller can open
- simultaneously
- Notes: if BX <= 20, no action is taken if the handle limit has not yet been
- increased, and the table is copied back into the PSP if the limit
- is currently > 20 handles
- for file handle tables of > 20 handles, DOS 3.30 never reuses the
- same memory block, even if the limit is being reduced; this can lead
- to memory fragmentation as a new block is allocated and the existing
- one freed
- only the first 20 handles are copied to child processes in DOS 3.3-6.0
- increasing the file handles here will not, in general, increase the
- number of files that can be opened using the runtime library of a
- high-level language such as C
- BUGS: the original release of DOS 3.30 allocates a full 64K for the handle
- table on requests for an even number of handles
- DR-DOS 3.41 and 5.0 will lose track of any open file handles beyond
- the portion of the JFT retained after the call; MS-DOS will indicate
- error 04h if any of the JFT entries to be removed are open
- SeeAlso: AH=26h,AH=86h
- --------D-2168-------------------------------
- INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
- AH = 68h
- BX = file handle
- Return: CF clear if successful
- all data still in DOS disk buffers is written to disk immediately,
- and the file's directory entry is updated
- CF set on error
- AX = error code (see #0770 at AH=59h)
- SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h
- --------D-2169-------------------------------
- INT 21 U - DOS 4+ internal - GET/SET DISK SERIAL NUMBER
- AH = 69h
- AL = subfunction
- 00h get serial number
- 01h set serial number
- BL = drive (0=default, 1=A, 2=B, etc)
- DS:DX -> disk info (see #0847)
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- AX destroyed
- (AL = 00h) buffer filled with appropriate values from extended BPB
- (AL = 01h) extended BPB on disk set to values from buffer
- Notes: does not generate a critical error; all errors are returned in AX
- error 0005h given if no extended BPB on disk
- does not work on network drives (error 0001h)
- buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
- extended BPB on disk
- this function is supported under Novell NetWare versions 2.0A through
- 3.11; the returned serial number is the one a DIR would display,
- the volume label is the NetWare volume label, and the file system
- is set to "FAT16".
- the serial number is computed from the current date and time when the
- disk is created; the first part is the sum of the seconds/hundredths
- and month/day, the second part is the sum of the hours/minutes and
- year
- the volume label which is read or set is the one stored in the extended
- BPB on disks formatted with DOS 4.0+, rather than the special root
- directory entry used by the DIR command in COMMAND.COM (use AH=11h
- to find that volume label)
- SeeAlso: AX=440Dh
-
- Format of disk info:
- Offset Size Description (Table 0847)
- 00h WORD info level (zero)
- 02h DWORD disk serial number (binary)
- 06h 11 BYTEs volume label or "NO NAME " if none present
- 11h 8 BYTEs (AL=00h only) filesystem type--string "FAT12 " or "FAT16 "
- --------O-2169-------------------------------
- INT 21 - DR-DOS 5.0 - NULL FUNCTION
- AH = 69h
- Return: AL = 00h
- SeeAlso: AH=18h
- --------v-216969-----------------------------
- INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
- AX = 6969h
- Return: AX = 0666h if resident
- SeeAlso: AX=58CCh,AH=76h"VIRUS"
- --------d-2169FFDX0000-----------------------
- INT 21 U - CUBIT v4.00 - GET CUBIT INT 21 HANDLER
- AX = 69FFh
- DX = 0000h
- BX = CB00h (magic value)
- Return: ES:BX -> CUBITR.EXE handler for INT 21
- Note: the installation check consists of testing that the first eight bytes
- at the returned interrupt handler are EBh 07h "CUBITR" (a short
- jump around the signature followed by the signature); the byte
- following the signature (i.e. ES:[BX+8]) indicates whether CUBITR
- is active (01h) or disabled (00h)
- SeeAlso: AX=69FFh/DX=CFBFh
- Index: installation check;CUBIT
- --------d-2169FFDXCFBF-----------------------
- INT 21 U - CUBIT v4.00 - UNINSTALL
- AX = 69FFh
- DX = CFBFh
- CX = EFCFh
- BX = CB00h (magic value)
- Return: ES:BX -> CUBITR.EXE handler for INT 21
- CX = status
- 2020h successful
- 2222h failed
- Note: if DX is neither 0000h nor CFBFh on entry, some other code is executed
- SeeAlso: AX=69FFh/DX=0000h
- --------D-216A-------------------------------
- INT 21 U - DOS 4+ - COMMIT FILE
- AH = 6Ah
- BX = file handle
- Return: CF clear if successful
- AH = 68h
- CF set on error
- AX = error code (06h) (see #0770 at AH=59h)
- Note: identical to AH=68h in DOS 5.0-6.0; not known whether this is the case
- in DOS 4.x
- SeeAlso: AH=68h
- --------D-216B-------------------------------
- INT 21 U - DOS 4.0 internal - IFS IOCTL
- AH = 6Bh
- AL = subfunction
- 00h ???
- DS:SI -> Current Directory Structure???
- CL = drive (1=A:)
- 01h ???
- DS:SI -> ???
- CL = file handle???
- 02h ???
- DS:SI -> Current Directory Structure???
- DI = ???
- CX = drive (1=A:)
- Return: CF set on error
- AX = error code (see #0770 at INT 21/AH=59h)
- CF clear if successful
- Note: passed through to INT 2F/AX=112Fh with AX on top of stack
- SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
- --------D-216B-------------------------------
- INT 21 U - DOS 5+ - NULL FUNCTION
- AH = 6Bh
- Return: AL = 00h
- Note: this function does nothing and returns immediately
- SeeAlso: AH=6Bh"DOS 4"
- --------D-216C00-----------------------------
- INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
- AX = 6C00h
- BL = open mode as in AL for normal open (see also AH=3Dh)
- bit 7: inheritance
- bits 4-6: sharing mode
- bit 3 reserved
- bits 0-2: access mode
- BH = flags
- bit 6 = auto commit on every write (see also AH=68h)
- bit 5 = return error rather than doing INT 24h
- CX = create attribute (see #0849)
- DL = action if file exists/does not exist (see #0850)
- DH = 00h (reserved)
- DS:SI -> ASCIZ file name
- Return: CF set on error
- AX = error code (see #0770 at AH=59h)
- CF clear if successful
- AX = file handle
- CX = status (see #0848)
- Notes: the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
- and DL=12h
- DR-DOS reportedly does not support this function and does not return
- an "invalid function call" error when this function is used.
- BUG: this function has bugs (at least in DOS 5.0 and 6.2) when used with
- drives handled via the network redirector (INT 2F/AX=112Eh):
- - CX (attribute) is not passed to the redirector if DL=11h,
- - CX does not return the status, it is returned unchanged because
- DOS does a PUSH CX/POP CX when calling the redirector.
- SeeAlso: AH=3Ch,AH=3Dh,AX=6C01h,AH=71h,INT 2F/AX=112Eh
-
- (Table 0848)
- Values for extended open function status:
- 01h file opened
- 02h file created
- 03h file replaced
-
- Bitfields for file create attribute:
- Bit(s) Description (Table 0849)
- 6-15 reserved
- 5 archive
- 4 reserved
- 3 volume label
- 2 system
- 1 hidden
- 0 readonly
-
- Bitfields for action:
- Bit(s) Description (Table 0850)
- 7-4 action if file does not exist
- 0000 fail
- 0001 create
- 3-0 action if file exists
- 0000 fail
- 0001 open
- 0010 replace/open
- --------O-216C01-----------------------------
- INT 21 U - OS/2 v2.0 - "DosOpen2"
- AX = 6C01h
- ???
- Return: ???
- Note: this function is similar to AX=6C00h, but supports OS/2's extended
- attributes
- SeeAlso: AX=5704h,AX=6C00h,AH=6Fh"OS/2"
- --------D-216D-------------------------------
- INT 21 U - DOS 5+ ROM - FIND FIRST ROM PROGRAM
- AH = 6Dh
- DS:DX -> ASCIZ program name (may contain wildcrds)
- Return: CF clear if found
- [DTA] = ROM search structure (see #0851)
- CF set if not found
- AX = error code
- 0002h name not found in ROM
- 0003h name contains colon or backslash
- Notes: the '*' wildcard matches all remaining characters in a ROM program's
- name; any following characters in the search mask are ignored up to
- another asterisk, which must be matched by an asterisk in the
- found program's name.
- the search mask and program names may contain multiple periods
- SeeAlso: AH=1Ah,AH=4Eh,AH=6Eh,AX=6F00h,AX=6F02h
-
- Format of ROM search structure:
- Offset Size Description (Table 0851)
- 00h 13 BYTEs ASCIZ name of found ROM program
- 0Dh DWORD address at which to resume search (do not modify)
- 11h var ASCIZ search mask passed in (do not modify)
- --------O-216D-------------------------------
- INT 21 U - OS/2 v1.x FAPI - "DosMkDir2"
- AH = 6Dh
- ???
- Return: ???
- Note: also supported by OS/2 v2.0+ Virtual DOS Machines
- SeeAlso: AH=39h
- --------O-216D-------------------------------
- INT 21 U - Novell DOS 7 - NOP
- AH = 6Dh
- Return: AX = 0000h
- Note: this function invokes the same code as other NOP functions such as
- AH=18h and AH=61h
- --------D-216E-------------------------------
- INT 21 U - DOS 5+ ROM - FIND NEXT ROM PROGRAM
- AH = 6Eh
- [DTA] = result of previous FindFirst ROM (see AH=6Dh)
- Return: CF clear if found
- [DTA] = updated ROM search structure (see #0851)
- CF set if not found
- AX = 0012h (no more matches)
- SeeAlso: AH=4Fh,AH=6Dh
- --------O-216E-------------------------------
- INT 21 U - OS/2 v1.x FAPI - "DosENumAttrib"
- AH = 6Eh
- ???
- Return: ???
- Note: also supported by OS/2 v2.0+ Virtual DOS Machines
- SeeAlso: AX=5703h,AH=6Fh"OS/2",INT 2F/AX=112Dh
- --------O-216F-------------------------------
- INT 21 U - OS/2 v1.x FAPI - "DosQMaxEASize" - GET MAXIMUM SIZE OF EXTENDED ATTR
- AH = 6Fh
- ???
- Return: ???
- Note: also supported by OS/2 v2.0+ Virtual DOS Machines
- SeeAlso: AX=5703h,AX=6C01h,AH=6Eh"OS/2"
- --------D-216F00-----------------------------
- INT 21 U - DOS 5+ ROM - GET ROM SCAN START ADDRESS
- AX = 6F00h
- Return: CF clear
- AL = 00h
- BX = current ROM scan starting segment
- SeeAlso: AH=6Dh,AX=6F01h,AX=6F02h
- --------D-216F01-----------------------------
- INT 21 U - DOS 5+ ROM - SET ROM SCAN START ADDRESS
- AX = 6F01h
- BX = new ROM scan starting address
- Return: CF clear
- AL = 00h
- SeeAlso: AX=6F00h,AX=6F03h
- --------D-216F02-----------------------------
- INT 21 U - DOS 5+ ROM - GET EXCLUSION REGION LIST
- AX = 6F02h
- ES:BX -> buffer for exclusion region list (see #0852)
- Return: CF clear
- AL = 00h
- ES:BX = 0000h:0000h on error, unchanged if buffer filled
- SeeAlso: AX=6F00h,AX=6F03h
-
- Format of ROM exclusion region list:
- Offset Size Description (Table 0852)
- 00h WORD number of entries
- 02h 2N WORDs start/end segments of N excluded regions
- --------D-216F03-----------------------------
- INT 21 U - DOS 5+ ROM - SET EXCLUSION REGION LIST
- AX = 6F03h
- DS:DX -> new exclusion region list (see #0852)
- Return: CF clear
- AL = 00h
- Notes: DOS saves only the pointer and assumes that the contents of the list
- are never changed, and that regions do not overlap
- if AL > 03h on entry, DOS returns CF set/AL=01h
- SeeAlso: AX=6F01h,AX=6F02h
- ----------217070BX6060-----------------------
- INT 21 - PCW Weather Card interface - GET DATA SEGMENT
- AX = 7070h
- BX = 6060h
- CX = 7070h
- DX = 7070h
- SI = 7070h
- DI = 7070h
- Return: AX = segment of data structure (see #0853)
- Notes: the data structure is at offset 516 from this segment
- the update byte is at offset 514 from this segment. Updates are
- once per second while this byte is nonzero and it is decremented
- once per second. While this byte is 0 updates are once per minute.
- SeeAlso: AX=7070h/BX=7070h
-
- Format of PCW Weather Card data structure:
- Offset Type Description (Table 0853)
- 00h WORD hour
- 02h WORD minute
- 04h WORD second
- 06h WORD day
- 08h WORD month
- 0Ah WORD year
- 0Ch WORD ???
- 0Eh WORD relative barometric pressure (in 1/100 inches)
- 10h WORD ???
- 12h WORD ???
- 14h WORD temperature 1 (in 1/10 degrees F)
- 16h WORD temperature 1 lowest (in 1/10 degrees F)
- 18h WORD temperature 1 highest (in 1/10 degrees F)
- 1Ah WORD temperature 2 (in 1/10 degrees F)
- 1Ch WORD temperature 2 lowest (in 1/10 degrees F)
- 1Eh WORD temperature 2 highest (in 1/10 degrees F)
- 20h WORD wind speed (in MPH)
- 22h WORD average of 60 wind speed samples (in MPH)
- 24h WORD highest wind speed (in MPH)
- 26h WORD wind chill factor (in 1/10 degrees F)
- 28h WORD lowest wind chill factor (in 1/10 degrees F)
- 2Ah WORD ???
- 2Ch WORD wind direction (in degrees)
- 2Eh WORD accumulated daily rainfall (in 1/10 inches)
- 30h WORD accumulated annual rainfall (in 1/10 inches)
- ----------217070BX7070-----------------------
- INT 21 - PCW Weather Card interface - INSTALLATION CHECK
- AX = 7070h
- BX = 7070h
- CX = 7070h
- DX = 7070h
- SI = 7070h
- DI = 7070h
- Return: AX = 0070h
- BX = 0070h
- CX = 0070h
- DX = 0070h
- SI = 0070h
- DI = 0070h
- SeeAlso: AX=7070h/BX=6060h,AX=8080h
- --------D-2171-------------------------------
- INT 21 - DOS 7 (Chicago) - LONG FILENAME FUNCTIONS
- AH = 71h
- AL = function
- 39h create directory
- 3Ah remove directory
- 3Bh set current directory
- 41h delete file
- 43h get file attributes (BL=00h), set file attributes (BL=01h)
- 47h get current directory
- 4Eh find first file
- 4Fh find next file
- 56h move (rename) file
- 6Ch create/open file
- Return: CF set on error
- AX = error code
- 7100h if function not supported
- CF clear if successful
- other registers as for corresponding "old" DOS function
- Notes: if error 7100h is returned, the old-style function should be called
- AX=714Eh returns a "search handle" which must be passed to AX=714Fh;
- when the search is complete, AH=72h must be called to terminate
- the search
- SeeAlso: AH=39h,AH=3Ah,AH=3Bh,AH=41h,AH=43h,AH=47h,AH=4Eh,AH=4Fh,AH=56h,AH=6Ch
- SeeAlso: AH=72h
- --------D-2172-------------------------------
- INT 21 - DOS 7 (Chicago) - "FindClose" - TERMINATE DIRECTORY SEARCH
- AH = 72h
- details not yet available
- Note: this function must be called after starting a search with AX=714Eh,
- to indicate that the search handle returned by that function will
- no longer be used
- SeeAlso: AH=4Eh,AH=71h
- --------v-2176-------------------------------
- INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
- AH = 76h
- Return: AL = 48h if resident
- SeeAlso: AX=6969h,AX=7700h"VIRUS"
- --------v-217700-----------------------------
- INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
- AX = 7700h
- Return: AX = 0920h if resident
- SeeAlso: AH=76h,AH=7Fh
- --------V-217734-----------------------------
- INT 21 U - SCROLLit v1.7 - INSTALLATION CHECK
- AX = 7734h
- Return: DX = 3477h if installed
- AX = segment of resident code
- Program: ScrollIt is a shareware backscroll utility by Bromfield Software
- Products
- --------U-217761-----------------------------
- INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
- AX = 7761h ('wa')
- Return: AX = 6177h
- Note: WATCH.COM is part of the "TSR" package by TurboPower Software
- SeeAlso: INT 16/AX=7761h
- --------v-217F-------------------------------
- INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
- AH = 7Fh
- Return: AH = 80h if resident
- SeeAlso: AX=7700h,AH=83h"VIRUS"
- --------D-2180-------------------------------
- INT 21 - European MS-DOS 4.0 - "AEXEC" - EXECUTE PROGRAM IN BACKGROUND
- AH = 80h
- CX = mode
- 0000h place child in zombie mode on exit to preserve exit code
- 0001h discard child process and exit code on termination
- DS:DX -> ASCIZ full program name
- ES:BX -> parameter block (as for AX=4B00h)
- Return: CF clear if successful
- AX = Command Subgroup ID (CSID)
- CF set on error
- AX = error code (see #0770 at AH=59h)
- Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
- by several other European OEMs; its release falls between mainstream
- versions 3.2 and 3.3
- Desc: asynchronously execute a program, creating a new process for it
- Notes: this function is called by the DETACH command
- there is a system-wide limit of 32 processes
- the CSID is used to identify all processes that have been spawned by
- a given process, whether directly or indirectly
- programs to be run in the background must use the new executable format
- (see #0693 at AH=4Bh)
- background processes may only perform asynchronous (background) EXECs,
- either this function or AX=4B04h
- background processes may execute INT 11, INT 12, INT 21, INT 2A, and
- INT 2F at any time; they may execute INT 10 and INT 16 only while
- they have opened a popup screen via INT 2F/AX=1401h; no other
- interrupts may be executed from the background
- background processes may not use drive B: or overlay their code
- segments
- see AX=8700h for an installation check
- the "NE" new executable format made its first appearance in European
- MS-DOS 4.0
- SeeAlso: AH=4Bh,AH=87h,INT 2F/AX=1400h"POPUP"
- ----------218080-----------------------------
- INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
- AX = 8080h
- Return: ???
- SeeAlso: AX=7070h/BX=7070h
- --------D-2181-------------------------------
- INT 21 - European MS-DOS 4.0 - "FREEZE" - STOP A PROCESS
- AH = 81h
- BX = flag (00h freeze command subtree, 01h only specified process)
- CX = Process ID of head of command subtree
- Return: CF clear if successful
- CF set on error
- AX = error code (no such process)
- Desc: temporarily suspend a process or a process and all of its children
- Note: if BX=0001h, this call will not return until the process is actually
- frozen, which may not be until after it unblocks from an I/O
- operation
- SeeAlso: AH=82h,AH=89h,AX=8E00h,INT 15/AX=101Dh
- --------D-2182-------------------------------
- INT 21 - European MS-DOS 4.0 - "RESUME" - RESTART A PROCESS
- AH = 82h
- BX = flag (00h resume command subtree, 01h only specified process)
- CX = Process ID of head of command subtree
- Return: CF clear if successful
- CF set on error
- AX = error code (no such process)
- Desc: restart a previously-suspended process or a process and all of its
- children
- SeeAlso: AH=81h,INT 15/AX=101Eh
- --------D-2183-------------------------------
- INT 21 - European MS-DOS 4.0 - "PARTITION" - GET/SET FOREGROUND PARTITION SIZE
- AH = 83h
- AL = function
- 00h get size
- 01h set new size
- BX = new size in paragraphs
- Return: CF clear if successful
- BX = current size (function 00h) or old size (function 01h)
- CF set on error
- AX = error code (01h,07h,0Dh)(see #0770 at AH=59h)
- Desc: specify or determine how much memory may be allocated by the foreground
- process
- Note: if the partition size is set to 0000h, no partition management is done
- and all memory allocation is compatible with DOS 3.2.
- the partition size can be changed regardless of what use is being made
- of the changed memory; subsequent allocations will follow the
- partition rules (foreground processes may allocate only foreground
- memory; background processes allocate background memory first, then
- foreground memory)
- SeeAlso: AH=48h,AH=4Ah
- --------v-2183-------------------------------
- INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
- AH = 83h
- Return: DX = 1990h if resident
- SeeAlso: AH=76h,AH=84h"VIRUS"
- --------v-2184-------------------------------
- INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
- AH = 84h
- Return: DX = 1990h if resident
- BH = version number (major in high nybble, minor in low)
- SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
- --------D-218400-----------------------------
- INT 21 - European MS-DOS 4.0 - "CREATMEM" - CREATE A SHARED MEMORY AREA
- AX = 8400h
- BX = size in bytes (0000h = 65536)
- CX = flags
- bit 6: zero-initialize segment
- DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
- Return: CF clear if successful
- AX = segment address of shared memory global object
- CF set on error
- AX = error code (06h,08h) (see #0770 at AH=59h)
- Desc: create an area of memory which may be accessed by multiple processes
- Notes: shared memory objects are created as special files (thus the
- restriction on the name)
- on successful creation, the reference count is set to 1
- SeeAlso: AX=8401h,AX=8402h,INT 15/AX=DE19h
- --------D-218401-----------------------------
- INT 21 - European MS-DOS 4.0 - "GETMEM" - OBTAIN ACCESS TO SHARED MEMORY AREA
- AX = 8401h
- CX = flags
- bit 7: writable segment (ignored by MS-DOS 4.0)
- DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
- Return: CF clear if successful
- AX = segment address of shared memory global object
- CX = size in bytes
- CF set on error
- AX = error code (invalid name)
- Desc: get address of a previously-created area of memory which may be
- accessed by multiple processes
- Note: this call increments the reference count for the shared memory area
- SeeAlso: AX=8400h,AX=8402h
- --------D-218402-----------------------------
- INT 21 - European MS-DOS 4.0 - "RELEASEMEM" - FREE SHARED MEMORY AREA
- AX = 8402h
- BX = handle (segment address of shared memory object)
- Return: CF clear if successful
- CF set on error
- AX = error code (no such name)
- Desc: indicate that the specified area of shared memory will no longer be
- used by the caller
- Note: the reference count is decremented and the shared memory area is
- deallocated if the new reference count is zero
- SeeAlso: AX=8400h,AX=8401h,INT 15/AX=DE19h
- --------D-2185-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 85h
- ???
- Return: ???
- --------D-2186-------------------------------
- INT 21 - European MS-DOS 4.0 - "SETFILETABLE" - INSTALL NEW FILE HANDLE TABLE
- AH = 86h
- BX = total number of file handles in new table
- Return: CF clear if successful
- CF set on error
- AX = error code (06h,08h) (see #0770 at AH=59h)
- Desc: adjust the size of the per-process open file table, thus raising or
- lowering the limit on the number of files the caller can open
- simultaneously
- Notes: any currently-open files are copied to the new table
- if the table is increased beyond the default 20 handles, only the
- first 20 will be inherited by child processes
- error 06h is returned if the requested number of handles exceeds
- system limits or would require closing currently-open files
- SeeAlso: AH=26h,AH=67h
- --------D-2187-------------------------------
- INT 21 - European MS-DOS 4.0 - "GETPID" - GET PROCESS IDENTIFIER
- AH = 87h
- Return: AX = PID
- BX = parent process's PID
- CX = Command Subgroup ID (CSID)
- Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
- by several other European OEMs; its release falls between mainstream
- versions 3.2 and 3.3
- Desc: determine an identifier by which to access the calling process
- Notes: called by MS C v5.1 getpid() function
- this function apparently must return AX=0001h for INT 21/AH=80h to
- succeed
- one possible check for European MS-DOS 4.0 is to issue this call with
- AL=00h and check whether AL is nonzero on return
- SeeAlso: AH=30h,AH=62h,AH=80h
- Index: installation check;European MS-DOS 4.0
- --------D-2188-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 88h
- ???
- Return: ???
- SeeAlso: AH=87h
- --------D-2189-------------------------------
- INT 21 - European MS-DOS 4.0 - SLEEP
- AH = 89h
- CX = time in milliseconds or 0000h to give up time slice
- Return: CF clear if successful
- CX = 0000h
- CF set on error
- AX = error code (interrupted system call)
- CX = sleep time remaining
- Desc: suspend the calling process for the specified duration
- Notes: the sleep interval is rounded up to the next higher increment of the
- scheduler clock, and may be extended further if other processes are
- running
- this call may be interrupted by signals (see AH=8Dh)
- reportedly called by Microsoft C 4.0 startup code
- background processes have higher priority than the foreground process,
- and should thus periodically yield the CPU
- SeeAlso: AH=81h,INT 15/AX=1000h,INT 2F/AX=1680h,INT 7A/BX=000Ah
- --------v-2189-------------------------------
- INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
- AH = 89h
- Return: AX = 0123h if resident
- SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
- --------D-218A-------------------------------
- INT 21 - European MS-DOS 4.0 - "CWAIT" - WAIT FOR CHILD TO TERMINATE
- AH = 8Ah
- BL = range (00h command subtree, 01h any child)
- BH = suspend flag
- 00h suspend if children exist but none are dead
- 01h return if no dead children
- CX = Process ID of head of command subtree
- Return: CF clear if successful
- AH = termination type (see #0854)
- AL = return code from child or aborting signal
- BX = PID of child (0000h if no dead children)
- CF set on error
- AX = error code (no child,interrupted system call)
- Desc: get return code from an asynchronously-executed child program,
- optionally waiting if no return code is available
- SeeAlso: AH=4Bh,AH=4Dh,AH=80h,AH=8Dh
-
- (Table 0854)
- Values for termination type:
- 00h normal termination
- 01h aborted by Control-C
- 02h aborted by I/O error
- 03h terminate and stay resident
- 04h aborted by signal
- 05h aborted by program error
- --------D-218B-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 8Bh
- ???
- Return: ???
- SeeAlso: AH=87h
- --------D-218C-------------------------------
- INT 21 - European MS-DOS 4.0 - SET SIGNAL HANDLER
- AH = 8Ch
- AL = signal number (see #0855)
- BL = action (see #0856)
- DS:DX -> signal handler (see #0857)
- Return: CF clear if successful
- AL = previous action
- ES:BX -> previous signal handler
- CF set on error
- AX = error code (01h,invalid SigNumber or Action)
- (see #0770 at AH=59h)
- Desc: set the routine which will be invoked on a number of exceptional
- conditions
- Note: all signals will be sent to the most recently installed handler
- SeeAlso: AH=8Dh
-
- (Table 0855)
- Values for European MS-DOS 4.0 signal number:
- 01h SIGINTR Control-C or user defined interrupt key
- 08h SIGTERM program termination
- 09h SIGPIPE broken pipe
- 0Dh SIGUSER1 reserved for user definition
- 0Eh SIGUSER2 reserved for user definition
-
- (Table 0856)
- Values for signal action:
- 00h SIG_DFL terminate process on receipt
- 01h SIG_IGN ignore signal
- 02h SIG_GET signal is accepted
- 03h SIG_ERR sender gets error
- 04h SIG_ACK acknowledge received signal and clear it, but don't
- change current setting
-
- (Table 0857)
- Values signal handler is called with:
- AL = signal number (see #0855)
- AH = signal argument
- Return: RETF, CF set: terminate process
- RETF, CF clear, ZF set: abort any interrupted system call with an error
- RETF, CF clear, ZF clear: restart any interrupted system call
- IRET: restart any interrupted system call
- Note: the signal handler may also perform a nonlocal GOTO by resetting the
- stack pointer and jumping; before doing so, it should dismiss the
- signal by calling this function with BL=04h
- --------D-218D-------------------------------
- INT 21 - European MS-DOS 4.0 - SEND SIGNAL
- AH = 8Dh
- AL = signal number (see #0855)
- BH = signal argument
- BL = action
- 00h send to entire command subtree
- 01h send only to specified process
- DX = Process ID
- Return: CF clear if successful
- CF set on error
- AX = error code (01h,06h)(see #0770 at AH=59h)
- Desc: invoke the exceptional-condition handler for the specified process
- Note: error 06h may be returned if one or more of the affected processes
- have an error handler for the signal
- SeeAlso: AH=8Ch
- --------D-218E00BH00-------------------------
- INT 21 - European MS-DOS 4.0 - "SETPRI" - GET/SET PROCESS PRIORITY
- AX = 8E00h
- BH = 00h
- BL = action
- 00h set priority for command subtree
- 01h set priority for specified process only
- CX = Process ID
- DH = 00h
- DL = change in priority (00h to get priority)
- Return: CF clear if successful
- DL = process priority
- DH destroyed
- CF set on error
- AX = error code (01h,no such process)(see #0770 at AH=59h)
- Desc: specify or determine the execution priority of the specified process
- or the process and all of its children
- SeeAlso: AH=81h
- --------D-218F-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 8Fh
- ???
- Return: ???
- SeeAlso: AH=87h
- --------D-2190-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 90h
- ???
- Return: ???
- SeeAlso: AH=87h
- --------v-2190-------------------------------
- INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
- AH = 90h
- Return: AH = 01h if resident
- SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
- --------D-2191-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 91h
- ???
- Return: ???
- SeeAlso: AH=87h
- --------D-2192-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 92h
- ???
- Return: ???
- SeeAlso: AH=87h
- --------D-2193-------------------------------
- INT 21 - European MS-DOS 4.0 - "PIPE" - CREATE A NEW PIPE
- AH = 93h
- CX = size in bytes
- Return: CF clear if successful
- AX = read handle
- BX = write handle
- CF set on error
- AX = error code (08h) (see #0770 at AH=59h)
- Desc: create a communications channel which may be used for interprocess
- data and command exchanges
- SeeAlso: AH=3Ch,AH=3Fh,AH=40h,AH=84h
- --------D-2194-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 94h
- ???
- Return: ???
- SeeAlso: AH=87h
- --------D-2195-------------------------------
- INT 21 - European MS-DOS 4.0 - HARD ERROR PROCESSING
- AH = 95h
- AL = new state
- 00h enabled
- 01h disabled, automatically fail hard errors
- Return: AX = previous setting
- Desc: specify whether hard (critical) errors should automatically fail the
- system call or invoke an INT 24
- SeeAlso: INT 24
- --------D-2196-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 96h
- ???
- Return: ???
- --------D-2197-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 97h
- ???
- Return: ???
- --------v-219753-----------------------------
- INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
- AX = 9753h
- Return: never (executes original program) if virus resident
- SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS"
- --------D-2198-------------------------------
- INT 21 U - European MS-DOS 4.0 - ???
- AH = 98h
- ???
- Return: ???
- --------D-2199-------------------------------
- INT 21 u - European MS-DOS 4.0 - "PBLOCK" - BLOCK A PROCESS
- AH = 99h
- DS:BX -> memory location to block on
- CX = timeout in milliseconds
- DH = nonzero if interruptable
- Return: CF clear if awakened by event
- AX = 0000h
- CF set if unusual wakeup
- ZF set if timeout, clear if interrupted by signal
- AX = nonzero
- Desc: suspend calling process until another process sends a "restart" signal
- or a timeout occurs
- SeeAlso: AH=9Ah,INT 2F/AX=0802h
- --------D-219A-------------------------------
- INT 21 u - European MS-DOS 4.0 - "PRUN" - UNBLOCK A PROCESS
- AH = 9Ah
- DS:BX -> memory location processes may have blocked on
- Return: AX = number of processes awakened
- ZF set if no processes awakened
- Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
- by several other European OEMs; its release falls between mainstream
- versions 3.2 and 3.3
- Desc: restart all processes waiting for the specified "restart" signal
- SeeAlso: AH=99h,INT 2F/AX=0802h
- --------I-21A0-------------------------------
- INT 21 - Attachmate Extra! - GET 3270 DISPLAY STATE
- AH = A0h
- Return: AL = display status (see #0858)
- BX = host window status (see #0859)
- Program: Attachmate Extra! is a 3270 emulator by Attachmate Corporation
- SeeAlso: AH=A1h
-
- Bitfields for Attachmate Extra! display status:
- Bit(s) Description (Table 0858)
- 7 0=windowed, 1=enlarged
- 6-3 current screen profile number 0-9
- 2-0 active window number (0=PC, 1-4=host B-E, 5-6=notepad F-G)
-
- Bitfields for host window status:
- Bit(s) Description (Table 0859)
- 15 reserved
- 14 0=host E window installed, 1=not
- 13 0=host E terminal on, 1=off
- 12 0=host E window displayed, 1=not
- 11 reserved
- 10 0=host D window installed, 1=not
- 9 0=host D terminal on, 1=off
- 8 0=host D window displayed, 1=not
- 7 reserved
- 6 0=host C window installed, 1=not
- 5 0=host C terminal on, 1=off
- 4 0=host C window displayed, 1=not
- 3 reserved
- 2 0=host B window installed, 1=not
- 1 0=host B terminal on, 1=off
- 0 0=host B window displayed, 1=not
- --------I-21A1-------------------------------
- INT 21 - Attachmate Extra! - SET 3270 DISPLAY STATE
- AH = A1h
- AL = new display status byte (see #0858)
- SeeAlso: AH=A0h,AH=A2h
- --------v-21A1D5-----------------------------
- INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
- AX = A1D5h
- Return: AX = 900Dh if resident
- SeeAlso: AX=9753h,AX=A55Ah
- --------I-21A2-------------------------------
- INT 21 - Attachmate Extra! - SET HOST WINDOW STATE
- AH = A2h
- AL = new host window status byte (see #0860)
- SeeAlso: AH=A1h
-
- Bitfields for Attachmate Extra! host window status:
- Bit(s) Description (Table 0860)
- 7 0=power off, 1=power on
- 6 0=not installed, 1=installed
- 5-3 reserved
- 2-0 window number 1-4=host B-E
- --------I-21A3-------------------------------
- INT 21 - Attachmate Extra! - SEND KEYSTROKES TO HOST WINDOW
- AH = A3h
- AL = window number (1-4=host B-E)
- CX = 0001h
- DS:BX -> keystroke buffer
- DL = zero if keystroke buffer contains host function code (see #0861),
- non-zero if keystroke buffer contains ASCII character
- Return: CX = zero if character sent, non-zero if not
- BX incremented if CX=0
-
- (Table 0861)
- Values for Attachmate Extra! host function code:
- 00h=reserved 10h=PF16 20h=Clear 30h=SysReq
- 01h=PF1 11h=PF17 21h=Print 31h=ErInp
- 02h=PF2 12h=PF18 22h=Left 32h=ErEof
- 03h=PF3 13h=PF19 23h=Right 33h=Ident
- 04h=PF4 14h=PF20 24h=Up 34h=Test
- 05h=PF5 15h=PF21 25h=Down 35h=Reset
- 06h=PF6 16h=PF22 26h=Home 36h=DevCncl
- 07h=PF7 17h=PF23 27h=Fast Left 37h=Dup
- 08h=PF8 18h=PF24 28h=Fast Right 38h=FldMark
- 09h=PF9 19h=Alt on 29h=Bksp 39h=Enter
- 0Ah=PF10 1Ah=Alt off 2Ah=Insert 3Ah=CrSel
- 0Bh=PF11 1Bh=Shift on 2Bh=Delete
- 0Ch=PF12 1Ch=Shift off 2Ch=Backtab
- 0Dh=PF13 1Dh=PA1 2Dh=Tab
- 0Eh=PF14 1Eh=PA2 2Eh=Newline
- 0Fh=PF15 1Fh=PA3 2Fh=Attn
- --------I-21A4-------------------------------
- INT 21 - Attachmate Extra! - GET HOST WINDOW BUFFER ADDRESS
- AH = A4h
- AL = window number (1-4=host B-E)
- Return: DS:BX -> 3270 display buffer
- SeeAlso: AH=A5h,AH=B8h
- --------I-21A5-------------------------------
- INT 21 - Attachmate Extra! - GET HOST WINDOW CURSOR POSITION
- AH = A5h
- AL = window number (1-4=host B-E)
- Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
- Note: if the host window is configured with the Extended Attribute (EAB)
- feature, multiply the cursor position by 2 to obtain the byte offset
- into the display buffer
- SeeAlso: AH=A4h
- --------v-21A55A-----------------------------
- INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
- AX = A55Ah
- Return: AX = 5AA5h if resident
- SeeAlso: AX=A1D5h,AX=AA00h
- --------v-21AA00-----------------------------
- INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
- AX = AA00h
- Return: AX = 00AAh if resident
- SeeAlso: AX=A55Ah,AX=AA03h
- --------v-21AA03-----------------------------
- INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
- AX = AA03h
- Return: AX = 03AAh if resident
- SeeAlso: AX=AA00h,AH=ABh
- --------v-21AB-------------------------------
- INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
- AH = ABh
- Return: AX = 5555h if resident
- SeeAlso: AX=AA03h,AX=BBBBh"VIRUS"
- --------I-21AF-------------------------------
- INT 21 - Attachmate Extra! - GET TRANSLATE TABLE ADDRESS
- AH = AFh
- Return: DS:BX -> translate tables (see #0862)
-
- Format of Attachmate Extra! translate tables:
- Offset Size Description (Table 0862)
- 00h 256 BYTEs ASCII to 3270 buffer code translate table
- 100h 256 BYTEs 3270 buffer code to ASCII translate table
- 200h 256 BYTEs 3270 buffer code to EBCDIC translate table
- 300h 256 BYTEs EBCDIC to 3270 buffer code translate table
- --------N-21B300-----------------------------
- INT 21 U - Novell NetWare - CHECK LIP/PACKET SIGNING/IPX CHECKSUM SUPPORT???
- AX = B300h
- Return: AX = 0000h if supported???
- Note: this function appeared with the packet signing/Large Internet Packets/
- IPX Checksum-aware NetWare shells
- SeeAlso: AX=B301h,AX=B302h
- --------N-21B301-----------------------------
- INT 21 U - Novell NetWare - CHECK SIGNATURE LEVEL???
- AX = B301h
- Return: AX = 0000h if supported???
- BX:CX indicate signature level
- 0000h:0000h = signature level 0
- 0002h:0000h = signature level 1
- 0202h:0000h = signature level 2
- 0202h:0202h = signature level 3
- Note: this function appeared with the packet signing/Large Internet Packets/
- IPX Checksum-aware NetWare shells
- SeeAlso: AX=B300h,AX=B304h
- --------N-21B302-----------------------------
- INT 21 U - Novell NetWare - START PACKET SIGNING
- AX = B302h
- CX = server connection (1-8)
- DS:SI -> 24-byte buffer containing ???
- Return: ???
- Notes: this function appeared with the packet signing/Large Internet Packets/
- IPX Checksum-aware NetWare shells
- if packet signing is active, this call is required if and only if the
- last call successfully authenticated the workstation to the server
- --------N-21B304-----------------------------
- INT 21 U - Novell NetWare - SET SIGNATURE LEVEL
- AX = B304h
- BX:CX = new signature level (see AX=B301h)
- Return: ???
- Note: this function appeared with the packet signing/Large Internet Packets/
- IPX Checksum-aware NetWare shells
- SeeAlso: AX=B300h,AX=B301h
- --------N-21B4-------------------------------
- INT 21 U - Novell NetWare - "AttachHandle"
- AH = B4h
- DS:SI -> input buffer (see #0863)
- Return: AX = DOS file handle or return code
- Note: this is an interface provided by NetWare to give DOS file access to
- NetWare files on non-DOS systems such as Macintosh, OS/2, and Unix
- SeeAlso: AX=E909h
-
- Format of Novell NetWare input buffer:
- Offset Size Description (Table 0863)
- 00h BYTE "WorkFileServer"
- 01h BYTE access code
- 02h DWORD "OpenHandle"
- 06h WORD "OpenHandleCount"
- 08h DWORD "OpenFileSize"
- Note: the six bytes at 02h-07h appear to be the six-byte NetWare handle
- returned by AX=E909h
- --------N-21B500-----------------------------
- INT 21 U - Novell NetWare - VNETWARE.386 API - GET INSTANCE DATA
- AX = B500h
- Return: ES:BX -> data
- CX = length
- SeeAlso: AX=B501h,AX=B502h
- --------N-21B501-----------------------------
- INT 21 U - Novell NetWare - VNETWARE.386 API - END VIRTUAL MACHINE
- AX = B501h
- SeeAlso: AX=B500h,AX=B502h
- --------N-21B502-----------------------------
- INT 21 U - Novell NetWare - VNETWARE.386 API - START VIRTUAL MACHINE
- AX = B502h
- SeeAlso: AX=B500h,AX=B501h
- --------N-21B5-------------------------------
- INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
- AH = B5h
- AL = subfunction
- 03h get task mode
- Return: AH = 00h
- AL = current task mode byte (see #0864)
- 04h get task mode pointer
- Return: ES:BX -> task mode byte
- Notes: the task mode byte specifies how task cleanup should be performed, but
- is declared to be version-dependent
- allows a program to disable the automatic cleanup for programs managing
- task swapping, etc.
-
- (Table 0864)
- Values for NetWare task mode byte in version 3.01:
- 00h-03h reserved
- 04h no task cleanup
- --------N-21B505-----------------------------
- INT 21 U - Novell NetWare - VNETWARE.386 API - SET VIRTUAL MACHINE ID
- AX = B505h
- ???
- Return: ???
- SeeAlso: AX=B502h,AX=B506h
- --------N-21B506-----------------------------
- INT 21 U - Novell NetWare - VNETWARE.386 API - GET VIRTUAL MACH SUPPORT LEVEL
- AX = B506h
- Return: AX = ??? (0002h)
- SeeAlso: AX=B505h
- --------N-21B507-----------------------------
- INT 21 - Novell NetWare - NetWare Shell - GET NUMBER OF PACKET BURST BUFFERS
- AX = B507h
- Return: AL = number of packet burst buffers (configured at shell load time)
- --------N-21B6-------------------------------
- INT 21 - Novell NetWare - FILE SERVICES - EXTENDED FILE ATTRIBUTES
- AH = B6h
- AL = subfunction
- 00h get extended file attributes
- 01h set extended file attributes
- CL = extended file attributes (see #0865)
- DS:DX -> ASCIZ pathname (max 255 bytes)
- Return: CF set on error
- AL = error code
- 8Ch caller lacks privileges
- FEh not permitted to search directory
- FFh file not found
- CF clear if successful
- AL = 00h (success)
- CL = current extended file attributes (see #0865)
- Note: this function is supported by Advanced NetWare 2.1+
- SeeAlso: AX=4300h,AH=E3h/SF=0Fh
-
- Bitfields for NetWare extended file attributes:
- Bit(s) Description (Table 0865)
- 2-0 search mode (executables only)
- 000 none (use shell's default search)
- 001 search on all opens without path
- 010 do not search
- 011 search on read-only opens without path
- 100 reserved
- 101 search on all opens
- 110 reserved
- 111 search on all read-only opens
- 3 reserved
- 4 transactions on file tracked
- 5 file's FAT indexed
- 6 read audit (to be implemented)
- 7 write audit (to be implemented)
- --------N-21B7-------------------------------
- INT 21 U - Novell NetWare - "HoldFileModeSet" (obsolete)
- AH = B7h
- AL = new value for HoldFileFlag
- Return: AL = previous value of HoldFileFlag
- Note: this function provided backward compatibility with a bug in early
- DOS versions and CP/M, but is no longer used or supported
- --------I-21B8-------------------------------
- INT 21 - Attachmate Extra! - DISABLE HOST BUFFER UPDATES
- AH = B8h
- AL = window number (1-4=host B-E)
- DL = 01h
- Notes: only valid in CUT mode
- next AID keystroke (eg Enter) enables host buffer updates
- SeeAlso: AH=A4h
- --------N-21B800-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT CAPTURE FLAGS
- AX = B800h
- CX = size of reply buffer (01h-3Fh)
- ES:BX -> reply buffer for capture flags table (see #0866)
- Return: AL = status
- 00h successful
- Note: this function is supported by Advanced NetWare 2.0+
- SeeAlso: AX=B801h,AX=B802h,AH=DFh/DL=00h,AH=DFh/DL=04h
-
- Format of NetWare capture flags table:
- Offset Size Description (Table 0866)
- 00h BYTE status (used internally, should be set to 00h)
- 01h BYTE print flags (see #0867)
- 02h BYTE tab size (01h-12h, default 08h)
- 03h BYTE printer number on server (00h-04h, default 00h)
- 04h BYTE number of copies to print (00h-FFh, default 01h)
- 05h BYTE form type required in printer (default 00h)
- 06h BYTE reserved
- 07h 13 BYTEs text to be placed on banner page
- 14h BYTE reserved
- 15h BYTE default local printer (00h = LPT1)
- 16h WORD (big-endian) timeout in clock ticks for flushing capture file
- on inactivity, or 0000h to disable timeout
- 18h BYTE flush capture file on LPT close if nonzero
- 19h WORD (big-endian) maximum lines per page
- 1Bh WORD (big-endian) maximum characters per line
- 1Dh 13 BYTEs name of form required in printer
- 2Ah BYTE LPT capture flag
- 00h inactive, FFh LPT device is being captured
- 2Bh BYTE file capture flag
- 00h if no file specified, FFh if capturing to file
- 2Ch BYTE timing out (00h if no timeout in effect, FFh if timeout counter
- running)
- 2Dh DWORD (big-endian) address of printer setup string
- 31h DWORD (big-endian) address of printer reset string
- 35h BYTE target connection ID
- 36h BYTE capture in progress if FFh
- 37h BYTE job queued for printing if FFh
- 38h BYTE print job valid if FFh
- 39h DWORD bindery object ID of print queue if previous byte FFh
- 3Dh WORD (big-endian) print job number (1-999)
-
- Bitfields for NetWare print flags:
- Bit(s) Description (Table 0867)
- 2 print capture file if interrupted by loss of connection
- 3 no automatic form feed after print job
- 6 printing control sequences interpreted by print service
- 7 print banner page before capture file
- --------N-21B801-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT CAPTURE FLAGS
- AX = B801h
- CX = size of buffer (01h-3Fh)
- ES:BX -> buffer containing capture flags table (see #0866)
- Return: AL = status
- 00h successful
- Note: this function is supported by Advanced NetWare 2.0+
- SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
- --------N-21B802-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - GET SPECIFIC CAPTURE FLAGS
- AX = B802h
- CX = size of reply buffer (01h-3Fh)
- DH = LPT port (00h-02h)
- ES:BX -> reply buffer for capture flags table (see #0866)
- Return: AL = status
- 00h successful
- Note: this function is supported by Advanced NetWare 2.1+
- SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
- --------N-21B803-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - SET SPECIFIC CAPTURE FLAGS
- AX = B803h
- CX = size of buffer (01h-3Fh)
- DH = LPT port (00h-02h)
- ES:BX -> buffer containing capture flags table (see #0866)
- Return: AL = status
- 00h successful
- Note: this function is supported by Advanced NetWare 2.1+
- SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
- --------N-21B804-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT LOCAL PRINTER
- AX = B804h
- Return: DH = default LPT port (00h-02h)
- Note: this function is supported by Advanced NetWare 2.1+
- SeeAlso: AX=B800h,AX=B805h,AH=DFh/DL=00h
- --------N-21B805-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT LOCAL PRINTER
- AX = B805h
- DH = new default LPT port (00h-02h)
- Return: AL = status
- 00h successful
- Note: this function is supported by Advanced NetWare 2.1+
- SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h
- --------N-21B806-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT QUEUE
- AX = B806h
- DH = LPT port (00h-02h)
- BX:CX = print queue's object ID
- Return: AL = status
- 00h successful
- FFh job already set
- Desc: specify the print queue on which a print job is to be placed the next
- time a capture is started on the given printer port
- Note: this function is supported by Advanced NetWare 2.1+
- SeeAlso: AX=B801h,AX=B807h,AX=E009h
- --------N-21B807-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT JOB
- AX = B807h
- DH = LPT port (00h-02h)
- BX = job number (see AH=E3h/SF=68h)
- SI:DI:CX = NetWare file handle (see AH=E3h/SF=68h)
- Return: AL = status
- 00h successful
- FFh job already queued
- Desc: specify the capture file and print job to be used for subsequent
- output to the given printer port
- Note: this function is supported by Advanced NetWare 2.1+
- SeeAlso: AX=B801h,AX=B806h,AX=E009h,AH=E3h/SF=68h
- --------N-21B808-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
- AX = B808h
- ES:BX -> 12-byte buffer for user name
- Return: AL = status
- 00h successful
- Desc: get the user name which is printed on the banner page
- Notes: this function is supported by Advanced NetWare 2.1+
- the default name is the login name of the user
- SeeAlso: AX=B809h
- --------N-21B809-----------------------------
- INT 21 - Novell NetWare - PRINT SERVICES - SET BANNER USER NAME
- AX = B809h
- ES:BX -> 12-byte buffer containing user name
- Return: AL = status
- 00h successful
- Desc: specify the user name which is printed on the banner page
- Notes: this function is supported by Advanced NetWare 2.1+
- the default name is the login name of the user
- SeeAlso: AX=B808h
- --------N-21B9-------------------------------
- INT 21 U - Novell NetWare - "SpecialAttachableFunction"
- AH = B9h
- AL = FFh to hook this function
- ES:BX -> function to invoke on AH=B9h when AL<>FFh
- Note: this function is no longer used or supported by current versions of
- NetWare
- --------N-21BA-------------------------------
- INT 21 U - Novell NetWare - "ReturnCommandComPointers"
- AH = BAh
- Return: DX = environment segment
- ES:DI -> COMMAND.COM drive
- Desc: used to edit the COMSPEC and PATH variables in the master environment
- when mapping network drives
- Note: this function was documented in older Novell documents which are no
- longer available
- --------N-21BB-------------------------------
- INT 21 - Novell NetWare - WORKSTATION - SET END OF JOB STATUS
- AH = BBh
- AL = new EOJ flag
- 00h disable EOJs
- 01h enable EOJs
- Return: AL = old EOJ flag
- Desc: specify whether the network shell should automatically generate an
- End of Job call when the root command processor regains control
- Note: this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
- Alloy NTNX
- SeeAlso: AH=19h,AH=D6h
- --------v-21BBBB-----------------------------
- INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
- AX = BBBBh
- Return: AX = 6969h
- SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
- --------N-21BC-------------------------------
- INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG PHYSICAL RECORD
- AH = BCh
- AL = flags (see #0869)
- BX = file handle
- CX:DX = starting offset in file
- SI:DI = length of region to lock
- BP = timeout in timer ticks (1/18 sec)
- 0000h = don't wait if already locked
- Return: AL = status (see #0868)
- Desc: add the specified physical record to the log table, optionally locking
- it
- Note: this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
- Alloy NTNX
- SeeAlso: AH=5Ch,AH=BDh,AH=BEh,AH=BFh,AH=C2h,AH=D0h
-
- (Table 0868)
- Values for NetWare status:
- 00h successful
- 96h no dynamic memory for file
- FEh timed out
- FFh failed
-
- Bitfields for NetWare flags:
- Bit(s) Description (Table 0869)
- 0 lock as well as log record
- 1 non-exclusive lock
- --------N-21BD-------------------------------
- INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECORD
- AH = BDh
- BX = file handle
- CX:DX = starting offset in file
- SI:DI = length of record
- Return: AL = status
- 00h successful
- FFh record not locked
- Desc: unlock the specified physical record but do not remove it from log
- table
- Note: this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
- Alloy NTNX
- SeeAlso: AH=BCh,AH=BEh"NetWare",AH=C0h,AH=C3h,AH=D2h
- --------N-21BE-------------------------------
- INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD
- AH = BEh
- BX = file handle
- CX:DX = starting offset within file
- SI:DI = record length in bytes
- Return: AL = status
- 00h successful
- FFh specified record not locked
- Desc: unlock the physical record and remove it from the log table
- Note: this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
- Alloy NTNX
- SeeAlso: AH=5Ch,AH=BCh,AH=BDh,AH=C1h,AH=C4h,AH=D4h
- --------v-21BE-------------------------------
- INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
- AH = BEh
- Return: AX = 1234h if resident
- SeeAlso: AX=BBBBh,AX=BE00h
- --------v-21BE00-----------------------------
- INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
- AX = BE00h
- CF set
- Return: CF clear if resident
- SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
- --------N-21BF-------------------------------
- INT 21 O - Novell NetWare, Alloy NTNX - LOG/LOCK RECORD (FCB)
- AH = BFh
- AL = flags (see #0869)
- DS:DX -> opened FCB (see #0469 at AH=0Fh)
- BX:CX = offset
- BP = lock timeout in timer ticks (1/18 sec) if AL nonzero
- SI:DI = length
- Return: AL = error code (see #0868)
- Note: this function was added in NetWare 4.6, but was removed some time prior
- to Advanced NetWare 2.15, and is no longer listed in current Novell
- documentation
- SeeAlso: AH=BCh,AH=C0h"NetWare",AH=C2h"NetWare"
- --------!---Section--------------------------
-