Interrupt List, part 5 of 12 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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0728) 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 #0811 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 #0733) 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 0728) 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 0729) 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 0730) 00h PWORD 48-bit far pointer to environment string 06h PWORD 48-bit far pointer to command tail string (Table 0731) 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 0732) 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 0733) 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 0734) 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 #0741) 06h WORD length of entry table in bytes 08h DWORD file load CRC (0 in Borland's TPW) 0Ch BYTE program flags (see #0735) 0Dh BYTE application flags (see #0736) 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 #0739) 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 #0737) 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 0735) 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 0736) 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 0737) 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 0738) 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 0739) 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 #0740) 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 0740) 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 0741) 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 0742) 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 0743) 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 #0744) 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 0744) 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 0745) 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 0746) 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 0747) 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 #0748) 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 #0749) 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 0748) 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 0749) 00h DWORD virtual size in bytes 04h DWORD relocation base address 08h DWORD object flags (see #0750) 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 0750) 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 0751) 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 0752) 00h BYTE length of name 01h N BYTEs name N+1 3 BYTEs ??? Format of LE linear executable entry table: Offset Size Description (Table 0753) 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 0754) 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 0755) 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 0756) 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 #0755) ---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 0757) 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 0758) 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 0759) 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 0760) 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 0761) 00h WORD byte count 02h BYTE repeat string length Format of Borland debugging information header (following load image): Offset Size Description (Table 0762) 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 #0538 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 #0763) Return: CF clear if successful AX = 0000h CF set on error AX = error code (see #0811 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 0763) 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 #0535 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 #0574 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 #0764) CF set on error AX = error code (02h,03h,12h) (see #0811 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 0764) ---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 #0802 at AX=5700h) 18h WORD file date (see #0803 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 #0811 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 #0818 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 #0765) 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 #0782) 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 0765) -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 #0551 at AH=32h) 04h DWORD -> first System File Table (see #0776,#0777,#0778,#0779) 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 #0787,#0788) 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 #0785) ---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 #0788,#0790) 17h DWORD pointer to array of current directory structures (see #0780) 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 #0785) ---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 #0788) 16h DWORD pointer to array of current directory structures (see #0780) 1Ah DWORD pointer to system FCB tables (see #0777,#0778,#0779) 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 #0785) 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 #0790,#0791) 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 #0780,#0781) 1Ah DWORD pointer to system FCB tables (see #0777,#0778,#0779) 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 #0785) 34h BYTE number of JOIN'ed drives 35h WORD pointer within IBMDOS code segment to list of special program names (see #0800) (always 0000h for DOS 5.0) 37h DWORD pointer to FAR routine for resident IFS utility functions (see #0797) 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 #0782) 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 #0785) (Table 0766) 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 #0628 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 0767) 00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh 01h WORD PSP segment of owner or special flag value (see #0766) 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 #0770), 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: #0768,#0769,#0770 Format of MS-DOS 5+ UMB control block: Offset Size Description (Table 0768) 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 0769) 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 0770) 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 #0771,#0772) "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 0771) 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 0772) 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 0773) (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 #0818 at AX=5D06h) Return: CF clear if successful CF set on error AX = DOS error code (24h) (see #0811 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 #0817 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 #0811 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 #0811 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 #0811 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 #0817 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 #0811 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 #0778) 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: #0774,#0775 Format of sharing record: Offset Size Description (Table 0774) 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 #0775) 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: #0773,#0775 Format of SHARE.EXE Record Lock Record: Offset Size Description (Table 0775) 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: #0773,#0774,#0776,#0779 Format of DOS 2.x system file tables: Offset Size Description (Table 0776) 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 #0558 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 #0803 at AX=5700h) 19h WORD file time in packed format (see #0802 at AX=5700h) 1Bh BYTE device attribute (see #0577 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: #0777,#0778,#0779 Format of DOS 3.0 system file tables and FCB tables: Offset Size Description (Table 0777) 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 #0778) 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: #0776,#0778,#0779 Format of DOS 3.1-3.3x, DR-DOS 5.0-6.0 system file tables and FCB tables: Offset Size Description (Table 0778) 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 #0558 at AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see #0574 at AX=4301h) 05h WORD device info word (see #0577 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 #0551 at AH=32h) 0Bh WORD starting cluster of file 0Dh WORD file time in packed format (see #0802 at AX=5700h) not used for character devices in DR-DOS 0Fh WORD file date in packed format (see #0803 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 #0535 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 #0774) 0000h = none SeeAlso: #0776,#0777,#0779 Format of DOS 4.0-6.0 system file tables and FCB tables: Offset Size Description (Table 0779) 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 #0558 at AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see #0574 at AX=4301h) 05h WORD device info word (see also #0577 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 #0551 at AH=32h) or REDIR data 0Bh WORD starting cluster of file (local files only) 0Dh WORD file time in packed format (see #0802) 0Fh WORD file date in packed format (see #0803) 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 #0535 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 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: #0776,#0777,#0778 Format of current directory structure (CDS) (array, LASTDRIVE entries): Offset Size Description (Table 0780) 00h 67 BYTEs ASCIZ path in form X:\PATH (local) or UNC form \\MACH\PATH (network, see notes below) 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 #0551 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 #0781) Windows for Workgroups 3.11 network sets the path to the local drive and directory even for network drives; in that case the UNC form \\SERVER\SHARE can be obtained with INT 21/AX=5F02h or INT 21/AX=5F46h SeeAlso: #0781 Format of DR-DOS 5.0-6.0 current directory structure entry (array): Offset Size Description (Table 0781) 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: #0780 Format of Windows NT Current Directory Structure (CDS) (array): Offset Size Description (Table 0782) 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 0783) 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: #0784,#0785 Bitfields for device attributes (block device): Bit(s) Description (Table 0784) 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: #0783,#0785 Format of DOS device driver header: Offset Size Description (Table 0785) 00h DWORD pointer to next driver, offset=FFFFh if last driver 04h WORD device attributes (see #0783,#0784) 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 0786) 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 0787) 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 #0551 at AH=32h) 10h buffered data SeeAlso: #0788,#0790,#0791,#0793 Format of DOS 3.x disk buffer: Offset Size Description (Table 0788) 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 #0789) 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 #0551 at AH=32h) 0Eh WORD unused??? (almost always 0) 10h buffered data SeeAlso: #0787,#0790,#0791,#0793 Bitfields for DOS 3.x disk buffer flags: Bit(s) Description (Table 0789) 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: #0794 Format of DOS 4.00 (pre UR 25066) disk buffer info: Offset Size Description (Table 0790) 00h DWORD pointer to array of disk buffer hash chain heads (see #0792) 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: #0787,#0788,#0791,#0795 Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info: Offset Size Description (Table 0791) 00h DWORD pointer to array of disk buffer hash chain heads (see #0792) 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: #0787,#0788,#0790,#0795 Format of DOS 4.x disk buffer hash chain head (array, one entry per chain): Offset Size Description (Table 0792) 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 0793) 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 #0794) 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 #0551 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: #0787,#0788,#0790 Bitfields for DOS 4.0-6.0 disk buffer flags: Bit(s) Description (Table 0794) 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: #0789 Format of DOS 5.0-6.0 disk buffer info: Offset Size Description (Table 0795) 00h DWORD pointer to least-recently-used buffer header (may be in HMA) (see #0793) 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: #0790,#0791 Format of IFS driver list: Offset Size Description (Table 0796) 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 #0797) call with ES:BX -> IFS request (see #0798) 14h WORD offset in header's segment of driver entry point ??? SeeAlso: #0797,#0798 (Table 0797) 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: #0796,#0798 Format of IFS request block: Offset Size Description (Table 0798) 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 #0799) 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 #0799) 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 #0799) 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 #0799) 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 #0799) 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 #0799) 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 #0799) 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 #0799) 1Ah BYTE ??? 1Bh BYTE unused??? SeeAlso: #0796,#0797,#0799 Format of IFS open file structure: Offset Size Description (Table 0799) 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 0800) 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 #0801) ES:BP -> buffer for Drive Parameter Block (see #0551 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 0801) 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: #0551 --------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 #0811) Notes: allows move between directories on same logical volume this function does not set the archive attribute (see #0574 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 #0802) DX = file's date (see #0803) CF set on error AX = error code (01h,06h) (see #0811) 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 0802) 15-11 hours (0-23) 10-5 minutes 4-0 seconds/2 Bitfields for file date: Bit(s) Description (Table 0803) 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 #0802) DX = new date (see #0803) Return: CF clear if successful CF set on error AX = error code (01h,06h) (see #0811) 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 #0804) ES:DI -> buffer for returned EAV list (see #0807) Return: CF clear if successful CX = size of returned data CF set on error AX = error code (see #0811) 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 0804) 00h WORD number of EAP structures following 02h var array of EAP structures (see #0805) SeeAlso: #0807 Format of EAP (extended attribute property) structure: Offset Size Description (Table 0805) 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 #0806) 03h BYTE size of reference string (name) 04h N BYTEs reference string Bitfields for EAP flags: Bit(s) Description (Table 0806) 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 0807) 00h WORD number of EAV structures following 02h var array of Extended Attribute Value structures (see #0808) SeeAlso: #0804 Format of Extended Attribute Value structures: Offset Size Description (Table 0808) 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 #0809) 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 0809) 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 #0811) 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 #0807) Return: CF clear if successful CF set on error AX = error code (see #0811) 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 #0810) 01h set allocation strategy BL = new allocation strategy (see #0810) BH = 00h (DOS 5+) Return: CF clear if successful CF set on error AX = error code (01h) (see #0811) 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 0810) 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 #0811) 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 #0811) BH = error class (see #0813) BL = recommended action (see #0814) CH = error locus (see #0815) ES:DI may be pointer (see #0812, 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 0811) 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 #0812) 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 0812) 00h 12 BYTEs ASCIZ volume label of required disk 0Ch DWORD serial number (DOS 4+) (Table 0813) 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 0814) 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 0815) 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 #0816) 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 0816) 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 #0811) 0Ah DWORD pointer to associated device --------D-215A------------------------------- INT 21 - DOS 3+ - CREATE TEMPORARY FILE AH = 5Ah CX = file attribute (see #0574 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 #0811) 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 #0574 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 #0811) 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 #0811) 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 #0817) 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 0817) 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 #0817), only computer ID and process ID fields used Return: CF set on error AX = error code (see #0811) 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 #0817), 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 #0811) CF clear if successful Notes: error unless SHARE is loaded (calls [SysFileTable-28h]) (see #0773 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 #0817), only computer ID used Return: CF set on error AX = error code (see #0811) CF clear if successful Notes: error unless SHARE is loaded (calls [SysFileTable-30h]) (see #0773 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 #0817), only computer ID and process ID fields used Return: CF set on error AX = error code (see #0811) CF clear if successful Notes: error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see #0773 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 #0817) DPL's BX = index of sharing record (see #0774 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 #0773 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 #0811) CF clear if successful DS:SI -> nonreentrant data area (includes all three DOS stacks) (critical error flag is first byte) (see #0818) 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 0818) -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 (Disk Transfer Address) note: may point into SDA during the DOS EXEC function (see AH=4Bh), so programs which swap the SDA must be prepared to move the DTA to a private buffer if they might be invoked during an EXEC 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 #0550 at AH=30h) 88h WORD offset to error code conversion table for INT 25/INT 26 8Ah 6 BYTEs CLOCK$ transfer record (see #0786 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 #0764 at AH=4Eh) 1A7h 32 BYTEs directory entry for found file (see #0512 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 #0535 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 #0764 at AH=4Eh) 2CDh 32 BYTEs directory entry for file being renamed (see #0512 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: #0820 --------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 #0817) 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 #0811) CF clear if successful DS:SI -> swappable data area list (see #0819) 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 #0818) 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 0819) 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: #0820 Format of DOS 4.0-6.0 swappable data area: Offset Size Description (Table 0820) -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 (Disk Transfer Address) note: may point into SDA during the DOS EXEC function (see AH=4Bh), so programs which swap the SDA must be prepared to move the DTA to a private buffer if they might be invoked during an EXEC 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 #0550 at AH=30h) 96h 6 BYTEs CLOCK$ transfer record (see #0786 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 #0764 at AH=4Eh) 1B3h 32 BYTEs directory entry for found file (see #0550 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 #0535 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 #0891 at AX=6C00h) 2DFh WORD extended file open attributes (see #0890 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 #0764 at AH=4Eh) 315h 32 BYTEs directory entry for file being renamed (see #0512 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: #0818,#0819 --------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 #0811 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 0821) 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 #0823) 1Dh DWORD serial number 21h BYTE maximum concurrent users with same serial number allowed on net 22h BYTE chat mask (see #0824) 23h BYTE internal system bits (see #0825) 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 #0826) AAh BYTE monitor flags (see #0827) 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 0822) -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 0823) 0 workstation 1 file server 2 print queue server 3 de-spool server Bitfields for 10NET chat mask: Bit(s) Description (Table 0824) 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 0825) 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 0826) 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 0827) 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 #0811 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 #0811 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 #0811 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 #0828) Return: CF clear if successful CF set on error AX = error code (see #0811 at AH=59h) SeeAlso: AX=5E05h"10NET",AX=5E06h"10NET" Format of 10NET extended workstation printer setup structure: Offset Size Description (Table 0828) 00h BYTE notification flags (see #0829) 01h BYTE job control mask (see #0830) 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 0829) 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 0830) 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 #0811 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 #0811 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 #0828) Return: CF clear if successful DS:DX buffer updated on get CF set on error AX = error code (see #0811 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 #0811 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 #0811 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 or drive letter followed by colon ES:DI -> 128-byte buffer for ASCIZ network name Return: CF clear if successful BH = device status 00h valid 01h invalid 02h valid (connected from inside Windows for Workgroups v3.11) 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 #0811 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 the returned device name may or may not include a colon, depending on the network software SeeAlso: AX=5F03h,AX=5F46h,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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0811 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 #0831) 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 0831) 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 #0832) 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 0832) 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 #0833) 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 0833) 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 #0834) 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 0834) 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 #0835) 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 0835) 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 #0835) 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 #0836) Return: AX = error code Format of LAN Manager NetMessageBufferSend parameter structure: Offset Size Description (Table 0836) 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 #0837,#0838,#0839) 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 0837) 00h 16 BYTEs name SeeAlso: #0838,#0839 Format of service_info_1 structure: Offset Size Description (Table 0838) 00h 16 BYTEs name 10h WORD status bitmask (see #0840) 12h DWORD status code (see #0841) (also see Microsoft LAN Manager Programmer's Reference) 16h WORD process id SeeAlso: #0837,#0839 Format of service_info_2 structure: Offset Size Description (Table 0839) 00h 16 BYTEs name 10h WORD status bitmask (see #0840) 12h DWORD status code (see #0841) 16h WORD process id 18h 64 BYTEs text SeeAlso: #0837,#0838 Bitfields for LAN Manager status bitmask: Bit(s) Description (Table 0840) 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 0841) 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 #0842) Return: CF clear if successful CF set on error AX = error code Format of LAN Manager NetServiceControl parameter structure: Offset Size Description (Table 0842) 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 #0843) 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 0843) 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 #0844,#0845) 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 0844) 00h 9 BYTEs local device name 09h BYTE padding 0Ah DWORD -> remote device name in UNC form \\server\share SeeAlso: #0845 Format of LAN Manager use_info_1 structure: Offset Size Description (Table 0845) 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: #0844 --------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 #0845) 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 0846) 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 #0847) 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 0847) 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 #0848) 14h DWORD -> copy_info buffer 18h WORD length of copy_info buffer Bitfields for LAN Manager copy control: Bit(s) Description (Table 0848) 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 0849) 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 #0850,#0851) 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 0850) 00h 16 BYTEs name SeeAlso: #0851 Format of LAN Manager server_info_1 structure: Offset Size Description (Table 0851) 00h 16 BYTEs name 10h BYTE major version in lower nibble 11h BYTE minor version 12h DWORD server type bitmask (see #0852) 16h DWORD -> comment string SeeAlso: #0850 Bitfields for LAN Manager server type: Bit(s) Description (Table 0852) 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 #0853) 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 0853) 00h DWORD timeout 04h DWORD -> buffer --------N-215F53----------------------------- INT 21 u - LAN Manager Enhanced DOS - NetServerEnum2 AX = 5F53h DS:SI -> NetServerEnum2 parameter structure (see #0854) 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 0854) 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 #0855) 0Ch DWORD -> Domain name (may be 0000h:0000h for all local domains) Bitfields for LAN Manager server type: Bit(s) Description (Table 0855) 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 0856) 00h 16 BYTEs name Format of LAN Manager server_info_1 structure: Offset Size Description (Table 0857) 00h 16 BYTEs name 10h BYTE major version in lower nibble 11h BYTE minor version 12h DWORD server type (bits 0-11) (see #0855) 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 #0858) 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 0858) 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 #0859) 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 0859) 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 #0860) 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 0860) 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 #0860) 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 #0861) CF set on error AX = error code SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh Bitfields for unsolicited message processing flags: Bit(s) Description (Table 0861) 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 #0861) 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 #0864) 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 0862) 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 0863) 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 0864) 00h BYTE status of entry (see #0862) 01h DWORD size of spooled file 05h BYTE type of entry (see #0863) 06h BYTE output control (see #0865) 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 #0803 at AX=5700h) 5Fh WORD time file was spooled (see #0802 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 0865) 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 #0864) 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 #0866) 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 0866) 00h BYTE printer state (see #0867) 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 0867) 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 #0868) 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 0868) 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 #0868) 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 #0864) 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 #0869) 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 0869) 00h WORD virtual circuit number 02h BYTE login state (see #0870) 03h BYTE last command issued (see #0871) 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 0870) 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 0871) 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 #0872) CF set on error AX = error code Bitfields for LANtastic access control list: Bit(s) Description (Table 0872) 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 #0873) 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 0873) 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 #0874) Return: CF clear if successful CF set on error AX = error code SeeAlso: AX=5FC9h Bitfields for LANtastic option flags: Bit(s) Description (Table 0874) 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 #0875) DX = bit mask (bits you are interested in, 0 = get only) (see #0875) Return: CF clear if successful CX = control bits after call (see #0875) 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 0875) 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 #0876) CF set on error AX = error code (01h) (see #0811 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 0876) 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 #0877) 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 0877) 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 #0535 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/DX=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/DX=0000h,AH=64h/DX=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/DX=0000h,AH=64h/DX=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 #0878) 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 0878) 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 #0879) 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 0879) 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 #0880) Return: CF set on error AX = error code (see #0811 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 0880) 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 #0811 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 #0881) CX = size of buffer (>= 5) Return: CF set on error AX = error code (see #0811 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 0881) 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 #0882) ---if info ID = 04h--- 01h DWORD pointer to filename uppercase table (see #0883) ---if info ID = 05h--- 01h DWORD pointer to filename character table (see #0884) ---if info ID = 06h--- 01h DWORD pointer to collating table (see #0885) ---if info ID = 07h (DOS 4+)--- 01h DWORD pointer to DBCS lead byte table (see #0886) Format of uppercase table: Offset Size Description (Table 0882) 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 0883) 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 0884) 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 0885) 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 0886) 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 #0811 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 #0811 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 #0811 at AH=59h) CF clear if successful BX = active code page (see #0887) DX = system code page (see #0887) SeeAlso: AX=6602h --------D-216602----------------------------- INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE AX = 6602h BX = active code page (see #0887) DX = system code page (active page at boot time) Return: CF set on error AX = error code (see #0811 at AH=59h) CF clear if successful SeeAlso: AX=6601h,INT 2F/AX=14FFh (Table 0887) 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 #0811 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 #0811 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) BH = info level (00h only for DOS; OS/2 allows other levels) DS:DX -> disk info (see #0888) Return: CF set on error AX = error code (see #0811 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 0888) 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 #0811 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 #0811 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 #0890) DL = action if file exists/does not exist (see #0891) DH = 00h (reserved) DS:SI -> ASCIZ file name Return: CF set on error AX = error code (see #0811 at AH=59h) CF clear if successful AX = file handle CX = status (see #0889) 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 0889) Values for extended open function status: 01h file opened 02h file created 03h file replaced Bitfields for file create attribute: Bit(s) Description (Table 0890) 6-15 reserved 5 archive 4 reserved 3 volume label 2 system 1 hidden 0 readonly Bitfields for action: Bit(s) Description (Table 0891) 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 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 #0890) DL = action if file exists/does not exist (see #0891) DH = 00h (reserved) DS:SI -> ASCIZ file name ES:DI -> EAOP structure Return: CF set on error AX = error code (see #0811 at AH=59h) CF clear if successful AX = file handle CX = status (see #0889) Note: this function is virtually identical 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 #0892) 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 0892) 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 #0892) 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 #0893) 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 0893) 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 #0893) 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 #0894) 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 0894) 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 #0811 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 #0734 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 #0811 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 #0811 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 #0811 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 #0895) 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 0895) 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 #0896) BL = action (see #0897) DS:DX -> signal handler (see #0898) 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 #0811 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 0896) 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 0897) 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 0898) Values signal handler is called with: AL = signal number (see #0896) 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 #0896) 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 #0811 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 #0811 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 #0811 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 #0899) BX = host window status (see #0900) Program: Attachmate Extra! is a 3270 emulator by Attachmate Corporation SeeAlso: AH=A1h Bitfields for Attachmate Extra! display status: Bit(s) Description (Table 0899) 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 0900) 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 #0899) 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 #0901) SeeAlso: AH=A1h Bitfields for Attachmate Extra! host window status: Bit(s) Description (Table 0901) 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 #0902), non-zero if keystroke buffer contains ASCII character Return: CX = zero if character sent, non-zero if not BX incremented if CX=0 (Table 0902) 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 #0903) Format of Attachmate Extra! translate tables: Offset Size Description (Table 0903) 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 (see #0904) Note: this function appeared with the packet signing/Large Internet Packets/ IPX Checksum-aware NetWare shells SeeAlso: AX=B300h,AX=B304h,#1477 at INT 2F/AX=7A20h/BX=0000h (Table 0904) Values for signature level indicator: 0000h:0000h = signature level 0 0002h:0000h = signature level 1 0202h:0000h = signature level 2 0202h:0202h = signature level 3 --------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 #0905) 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 0905) 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 #0906) 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 0906) 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 #0907) 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 #0907) 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 0907) 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 #0908) 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 0908) 00h BYTE status (used internally, should be set to 00h) 01h BYTE print flags (see #0909) 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 0909) 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 #0908) 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 #0908) 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 #0908) 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,AH=E0h/SF=09h --------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,AH=E0/SF=09h,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 #0911) 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 #0910) 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 0910) 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 0911) 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 #0911) DS:DX -> opened FCB (see #0506 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 #0910) 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--------------------------