Interrupt List о новых DOS-функциях --------D-2171--------------------------------------------------- INT 21 - Windows95 - LONG FILENAME FUNCTIONS AH = 71h AL = function 0Dh reset drive 39h create directory 3Ah remove directory 3Bh set current directory 41h delete file 43h get/set file attributes 47h get current directory 4Eh find first file 4Fh find next file 56h move (rename) file 60h truename 6Ch create/open file A0h get volume information A1h terminate FindFirst/FindNext A6h get file information A7h time conversion A8h generate short filename A9h server create/open file AAh create/terminate SUBST Return: CF set on error AX = error code (see #1332) 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=714h returns a "search handle" which must be passed to AX=714Fh; when the search is complete, AX=71A1h must be called to terminate the search for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=39h,AH=3Ah,AH=3Bh,AH=41h,AX=4300h,AX=4301h,AX=4304h,AX=4306h SeeAlso: AX=4307h,AH=47h,AH=4Eh,AH=4Fh,AH=56h,AH=6Ch,AX=714Eh,AX=714Fh SeeAlso: AX=71A0h,AX=71A1h --------D-21710D--------------------------------------------------- INT 21 - Windows95 - RESET DRIVE AX = 710Dh CX = action (see #1431) DX = drive number Return: CF clear Note: for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=0Dh (Table 1431) Values for drive reset action: 0000h flush filesystem buffers for drive, and reset drive 0001h flush filesystem buffers and cache for drive, and reset drive 0002h remount DriveSpace volume --------D-217139-------------------------------------------------- INT 21 - Windows95 - LONG FILENAME - MAKE DIRECTORY AX = 7139h DS:DX -> ASCIZ long directory name (including path) Return: CF clear if successful CF set on error AX = error code (see #1332) 7100h if function not supported Note: for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=39h,AX=713Ah,AX=713Bh --------D-21713A--------------------------------------------------- INT 21 - Windows95 - LONG FILENAME - REMOVE DIRECTORY AX = 713Ah DS:DX -> ASCIZ long name of directory to remove Return: CF clear if successful CF set on error AX = error code (see #1332) 7100h if function not supported Note: for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=3Ah,AX=7139h --------D-21713B------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - CHANGE DIRECTORY AX = 713Bh DS:DX -> ASCIZ long name of directory to make current Return: CF clear if successful CF set on error AX = error code (see #1332) 7100h if function not supported Note: for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=0Eh,AH=3Bh,AX=7139h --------D-217141------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - DELETE FILE AX = 7141h DS:DX -> ASCIZ long name of file to delete SI = wildcard and attributes flag 0000h wildcards are not allowed, and search attributes are ignored 0001h wildcards are allowed, and only files with matching names and attributes are deleted CL = search attributes CH = must-match attributes Return: CF clear if successful CF set on error AX = error code (see #1332) 7100h if function not supported Note: for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=41h --------D-217143------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - EXTENDED GET/SET FILE ATTRIBUTES AX = 7143h DS:DX -> ASCIZ filename BL = action 00h retrieve attributes Return: CX = file attributes (see #1073) 01h set attributes CX = attributes 02h get physical size of compressed file Return: DX:AX = actual disk usage of file, in bytes 03h set last write date/time DI = new last-write date (see #1318) CX = new last-write time (see #1317) 04h get last write date/time Return: CX = last write time (see #1317) DI = last write date (see #1318) 05h set last access date DI = new last-access date (see #1318) 06h get last access date Return: DI = last access date (see #1318) 07h set creation date/time DI = new creation date (see #1318) CX = new creation time (see #1317) SI = hundredths (10-ms units past time in CX, 0-199) 08h get creation date/time Return: CX = creation time (see #1317) DI = creation date (see #1318) SI = hundredths (10-millisecond units past time in CX) Return: CF clear if successful CF set on error AX = error code (see #1332) 7100h if function not supported Note: for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AX=4300h,AX=4301h --------D-217147------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - GET CURRENT DIRECTORY AX = 7147h DL = drive number (00h = current, 01h = A:, etc.) DS:SI -> buffer for ASCIZ directory name Return: CF clear if successful CF set on error AX = error code (see #1332) 7100h if function not supported Notes: the returned pathname does not include the drive letter, colon, or leading backslash, and is not necessarily a long filename -- this function returns whatever path was used when changing to the current directory, and may include a mixture of long and short components the provided buffer must be at least as large as the value indicated by AX=71A0h for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=47h,AX=713Bh,AX=7160h,AX=71A0h --------D-21714E------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - FIND FIRST MATCHING FILE AX = 714Eh CL = allowable-attributes mask (see #1073 at AX=4301h) (bits 0 and 5 ignored) CH = required-attributes mask (see #1073) SI = date/time format (see #1432) DS:DX -> ASCIZ filespec (both "*" and "*.*" match any filename) ES:DI -> FindData record (see #1433) Return: CF clear if successful AX = filefind handle (needed to continue search) CX = Unicode conversion flags (see #1434) CF set on error AX = error code 7100h if function not supported Notes: this function is only available when IFSMgr is running, not under bare MS-DOS 7 the application should close the filefind handle with AX=71A1h as soon as it has completed its search for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=4Eh,AX=714Fh,AX=71A1h (Table 1432) Values for Windows95 date/time format: 0000h use 64-bit file time format 0001h use MS-DOS date/time values (see #1317,#1318) in low double-word of file time QWORD (date is high word, time is low word of double-word) Format of Windows95 long filename FindData record: Offset Size Description (Table 1433) 00h DWORD file attributes bits 0-6 standard DOS attributes (see #1073 at INT 21/AX=4301h) bit 8: temporary file 04h QWORD file creation time (number of 100ns intervals since 1/1/1601) 0Ch QWORD last access time 14h QWORD last modification time 1Ch DWORD file size (high 32 bits) 20h DWORD file size (low 32 bits) 24h 8 BYTEs reserved 2Ch 260 BYTEs ASCIZ full filename 130h 14 BYTEs ASCIZ short filename (for backward compatibility) Bitfields for Windows95 Unicode conversion flags: Bit(s) Description (Table 1434) 0 the returned full filename contains underscores for un-convertable Unicode characters 1 the returned short filename contains underscores for un-convertable Unicode characters --------D-21714F------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - FIND NEXT MATCHING FILE AX = 714Fh BX = filefind handle (from AX=714Eh) SI = date/time format (see #1432) ES:DI -> buffer for FindData record (see #1433) Return: CF clear if successful CX = Unicode conversion flags (see #1434) CF set on error AX = error code 7100h if function not supported Notes: this function is only available when IFSMgr is running, not under bare MS-DOS 7 for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=4Eh,AX=714Eh,AX=71A1h --------D-217156------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - RENAME FILE AX = 7156h DS:DX -> ASCIZ old file or directory name (long names allowed) ES:DI -> ASCIZ new name (long names allowed) Return: CF clear if successful CF set on error AX = error code 7100h if function not supported Note: the file may be renamed into a different directory, but not across disks SeeAlso: AH=56h,AX=7141h --------D-217160CL00------------------------- INT 21 - Windows95 - LONG FILENAME - "TRUENAME" - CANONICALIZE PATH AX = 7160h CL = 00h CH = SUBST expansion flag 00h return a path containing true path for a SUBSTed drive letter 80h return a path containing the SUBSTed drive letter DS:SI -> ASCIZ filename or path (either long name or short name) ES:DI -> 261-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 ES:DI buffer filled with fully qualified name AX destroyed Desc: determine the canonical name of the specified filename or path, corresponding to the undocumented TRUENAME command in COMMAND.COM Notes: if a complete path is given, the result will be a short-form complete path; otherwise, the given relative path is appended to the short-form current directory name, '.'/'..'/'...'/etc. are resolved, and the final result uppercased without converting any remaining long-form names to short-form for compatibility with DOS versions prior to v7.00, the carry flag should be set on call to ensure that it is set on exit SeeAlso: AH=60h,AX=7160h/CL=01h --------D-217160CL01-------------------------------------------------- INT 21 - Windows95 - LONG FILENAME - GET SHORT (8.3) FILENAME FOR FILE AX = 7160h CL = 01h CH = SUBST expansion flag 00h return a path containing true path for a SUBSTed drive letter 80h return a path containing the SUBSTed drive letter DS:SI -> ASCIZ long filename or path ES:DI -> 67-byte buffer for short filename 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 ES:DI buffer filled with equivalent short filename (full path, even if relative path given, and all uppercase) Note: this call returns the short name for any long-filename portions of the provided pathname or filename SeeAlso: AH=60h,AX=7160h/CL=00h,AX=7160h/CL=02h --------D-217160CL02--------------------------------------------------- INT 21 - Windows95 - LONG FILENAME - GET CANONICAL LONG FILENAME OR PATH AX = 7160h CL = 02h CH = SUBST expansion flag 00h return a path containing true path for a SUBSTed drive letter 80h return a path containing the SUBSTed drive letter DS:SI -> ASCIZ short filename or path ES:DI -> 261-byte buffer for canonicalized long 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 ES:DI buffer filled with qualified long name (can contain lowercase letters) Desc: determine the canonical name of the specified filename or path, corresponding to the undocumented TRUENAME command in COMMAND.COM Note: this call returns the short name for any long-filename portions of the provided pathname or filename BUG: even though the maximum length of a complete long pathname is 260 characters, Windows95 returns CF set/AX=0003h even if the file exists whenever the full pathname is more than 255 characters SeeAlso: AH=60h,AX=7160h/CL=00h,AX=7160h/CL=01h --------D-21716C------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - CREATE OR OPEN FILE AX = 716Ch BX = access mode and sharing flags (see #1436,also AX=6C00h) CX = attributes DX = action (see #1435) DS:SI -> ASCIZ filename DI = alias hint (number to append to short filename for disambiguation) Return: CF clear if successful AX = file handle CX = action taken 0001h file opened 0002h file created 0003h file replaced CF set on error AX = error code (see #1332) 7100h if function not supported SeeAlso: AX=6C00h,AX=7141h,AX=7156h,AX=71A9h Bitfields for Windows95 long-name open action: Bit(s) Description (Table 1435) 0 open file (fail if file does not exist) 1 truncate file if it already exists (fail if file does not exist) 4 create new file if file does not already exist (fail if exists) Note: the only valid combinations of multiple flags are bits 4&0 and 4&1 Bitfields for Windows95 file access/sharing modes: Bit(s) Description (Table 1436) 2-0 file access mode 000 read-only 001 write-only 010 read-write 100 read-only, do not modify file's last-access time 6-4 file sharing modes 7 no-inherit flag 8 do not buffer data (requires that all reads/writes be exact physical sectors) 9 do not compress file even if volume normally compresses files 10 use alias hint in DI as numeric tail for short-name alias 12-11 unused??? (0) 13 return error code instead of generating INT 24h if critical error while opening file 14 commit file after every write operation SeeAlso: #1056 --------D-2171A0------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - GET VOLUME INFORMATION AX = 71A0h DS:DX -> ASCIZ root name (e.g. "C:\") ES:DI -> buffer for file system name CX = size of ES:DI buffer Return: CF clear if successful BX = file system flags (see #1437) CX = maximum length of file name [usually 255] DX = maximum length of path [usually 260] ES:DI buffer filled (ASCIZ, e.g. "FAT","NTFS","CDFS") CF set on error AX = error code 7100h if function not supported Notes: for the file system name buffer, 32 bytes should be sufficient; that's what is used in some sample code by Walter Oney from Microsoft. this function accesses the disk the first time it is called SeeAlso: AX=714Eh,AX=7160h/CL=00h Bitfields for long filename volume information flags: Bit(s) Description (Table 1437) 0 searches are case sensitive 1 preserves case in directory entries 2 uses Unicode characters in file and directory names 3-13 reserved (0) 14 supports DOS long filename functions 15 volume is compressed --------D-2171A1------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - "FindClose" - TERMINATE DIRECTORY SEARCH AX = 71A1h BX = filefind handle (from AX=714Eh) Return: CF clear if successful CF set on error AX = error code 7100h if function not supported Notes: this function must be called after starting a search with AX =714h, to indicate that the search handle returned by that function will no longer be used this function is only available when IFSMgr is running, not under bare MS-DOS 7 SeeAlso: AH=4Eh,AX=714Eh,AX=714Fh --------D-2171A2------------------------------------------------------ INT 21 U - Windows95 - internal AX = 71A2h ??? Return: ??? Note: documented as "for internal use by Windows 95 only" --------D-2171A3------------------------------------------------------ INT 21 U - Windows95 - internal AX = 71A3h ??? Return: ??? Note: documented as "for internal use by Windows 95 only" --------D-2171A4------------------------------------------------------ INT 21 U - Windows95 - internal AX = 71A4h ??? Return: ??? Note: documented as "for internal use by Windows 95 only" --------D-2171A5------------------------------------------------------ INT 21 U - Windows95 - internal AX = 71A5h ??? Return: ??? Note: documented as "for internal use by Windows 95 only" --------D-2171A6------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - GET FILE INFO BY HANDLE AX = 71A6h BX = file handle DS:DX -> buffer for file information (see #1438) CF set Return: CF clear if successful file information record filled CF set on error AX = error code 7100h if function not supported SeeAlso: AX=71A7h/BL=00h Format of Windows95 file information: Offset Size Description (Table 1438) 00h DWORD file attributes 04h QWORD creation time (0 = unsupported) 0Ch QWORD last access time (0 = unsupported) 14h QWORD last write time 1Ch DWORD volume serial number 20h DWORD high 32 bits of file size 24h DWORD low 32 bits of file size 28h DWORD number of links to file 2Ch DWORD unique file identifier (high 32 bits) 30h DWORD unique file identifier (low 32 bits) Note: the file identifer and volume serial number together uniquely identify a file while it is open; the identifier may change when the system is restarted or the file is first opened --------D-2171A7BL00------------------------------------------------- INT 21 - Windows95 - LONG FILENAME - FILE TIME TO DOS TIME AX = 71A7h BL = 00h DS:SI -> QWORD file time Return: CF clear if successful CX = DOS time (see #1317) DX = DOS date (see #1318) BH = hundredths (10-millisecond units past time in CX) CF set on error AX = error code 7100h if function not supported Desc: convert Win95 64-bit file time (UTC) into DOS-style date and time (local timezone) Note: the conversion fails if the file time's value is outside the range 1/1/1980 and 12/31/2107 SeeAlso: AX=71A6h,AX=71A7h/BL=01h --------D-2171A7BL01--------------------------------------------------- INT 21 - Windows95 - LONG FILENAME - DOS TIME TO FILE TIME AX = 71A7h BL = 01h CX = DOS time (see #1317) DX = DOS date (see #1318) BH = hundredths (10-millisecond units past time in CX) ES:DI -> buffer for QWORD file time Return: CF clear if successful ES:DI buffer filled CF set on error AX = error code 7100h if function not supported Desc: convert DOS-style date and time (local timezone) into Win95 64-bit file time (UTC) SeeAlso: AX=71A6h,AX=71A7h/BL=00h --------D-2171A8------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - GENERATE SHORT FILENAME AX = 71A8h DS:SI -> ASCIZ long filename (no path allowed!) ES:DI -> buffer for ASCIZ short filename DH = short name's format 00h 11-char directory entry/FCB filename format 01h DOS 8.3 DL = character sets bits 7-4: short name's character set (see #1439) bits 3-0: long name's character set (see #1439) Return: CF clear if successful ES:DI buffer filled CF set on error AX = error code 7100h if function not supported Note: this function uses the same algorithm as the filesystem except that the returned name never has a numeric tail for disambiguation SeeAlso: AX=7160h/CL=00h,AX=7160h/CL=02h,AX=71A7h/BL=00h (Table 1439) Values for Windows95 filename character set: 00h Windows ANSI 01h current OEM character set 02h Unicode --------D-2171A9------------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - SERVER CREATE OR OPEN FILE AX = 71A9h BX = access mode and sharing flags (see #1436,also AX=6C00h) CX = attributes DX = action (see #1435) DS:SI -> ASCIZ filename DI = alias hint (number to append to short filename for disambiguation) Return: CF clear if successful AX = global file handle CX = action taken 0001h file opened 0002h file created 0003h file replaced CF set on error AX = error code (see #1332) 7100h if function not supported Note: for use by real-mode servers only SeeAlso: AX=6C00h,AX=716Ch --------D-2171AABH00------------------------------------------------ INT 21 - Windows95 - LONG FILENAME - CREATE SUBST AX = 71AAh BH = 00h BL = drive number (00h = default, 01h = A:, etc.) DS:DX -> ASCIZ pathname to associate with drive letter Return: CF clear if successful CF set on error AX = error code (see #1332) 7100h if function not supported SeeAlso: AX=71AAh/BH=01h,AX=71AAh/BH=02h,INT 2F/AX=1000h,#1295 --------D-2171AABH01----------------------------------------------- INT 21 - Windows95 - LONG FILENAME - TERMINATE SUBST AX = 71AAh BH = 01h BL = drive number (01h = A:, etc.) Return: CF clear if successful CF set on error AX = error code (see #1332) 7100h if function not supported Note: the specified drive number may not be 00h (default), and presumably not the current drive either SeeAlso: AX=71AAh/BH=00h,AX=71AAh/BH=02h,INT 2F/AX=1000h,#1295 --------D-2171AABH02------------------------------------------------- INT 21 - Windows95 - LONG FILENAME - QUERY SUBST AX = 71AAh BH = 02h BL = drive number (01h = A:, etc.) DS:DX -> buffer for ASCIZ pathname associated with drive letter Return: CF clear if successful DS:DX buffer filled CF set on error AX = error code (see #1332) 7100h if function not supported Note: the specified drive number may not be 00h (default drive) SeeAlso: AX=71AAh/BH=00h,AX=71AAh/BH=01h,INT 2F/AX=1000h,#1295 |