📄 interrup.l
字号:
Interrupt List, part 12 of 18
Copyright (c) 1989-1999,2000 Ralf Brown
--------W-2F1600-----------------------------
INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
AX = 1600h
Return: AL = status
00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
01h Windows/386 2.x running
80h XMS version 1 driver installed (neither Windows 3.x enhanced
mode nor Windows/386 2.x running) (obsolete--see note)
FFh Windows/386 2.x running
AL = anything else
AL = Windows major version number >= 3
AH = Windows minor version number
Notes: INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
drivers, TSRs, and applications) to cooperate with multitasking
Windows/386 2.x and Windows 3.x and higher enhanced mode.
certain calls are also supported in the Microsoft 80286 DOS extender in
Windows standard mode
this function served as the installation check and AX=1610h served to
get the driver entry point for XMS version 1, which is now obsolete.
Use AX=4300h and AX=4310h instead
Windows95 reports version 4.00, Windows95B reports version 4.03
SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
Index: installation check;XMS version 1
--------W-2F1602-----------------------------
INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
AX = 1602h
Return: ES:DI -> Windows/386 2.x API procedure entry point
Notes: this interface is supported in Windows 3.x and Windows95 only for 2.x
compatibility
to get the current virtual machine (VM) ID in Windows/386 2.x:
AX = 0000h
ES:DI -> return address
JUMP to address returned from INT 2F/AX=1602h
After JUMP, at return address:
BX = current VM ID.
SeeAlso: AX=C020h
--------W-2F1603-----------------------------
INT 2F C - MS Windows/386 - GET INSTANCE DATA
AX = 1603h
Return: AX = 5248h ('RH') if supported
DS:SI -> Windows/386 instance data (see #02630)
Notes: reportedly supported by RM Nimbus MS-DOS 3.3 kernel
this function is called by DOSMGR when AX=1607h/BX=0015h is not
supported, as is the case in DOS versions prior to 5.0
see Geoff Chappell's book _DOS_Internals_ for additional discussions of
this function, DOSMGR's behavior, and instancing in general
SeeAlso: AX=1607h/BX=0015h
Format of Windows/386 instance data:
Offset Size Description (Table 02630)
00h WORD segment of IO.SYS (0000h = default 0070h)
02h WORD offset in IO.SYS of STACKS data structure (DOS 3.2x)
0000h if not applicable
04h WORD number of instance data entries (max 32)
06h Array of instance data entries
Offset Size Description
00h WORD segment (0002h = DOS kernel)
02h WORD offset
04h WORD size
--------W-2F1605-----------------------------
INT 2F C - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
AX = 1605h
ES:BX = 0000h:0000h
DS:SI = 0000h:0000h
CX = 0000h
DX = flags
bit 0 = 0 if Windows enhanced-mode initialization
bit 0 = 1 if Microsoft 286 DOS extender initialization
bits 1-15 reserved (undefined)
DI = version number (major in upper byte, minor in lower)
Return: CX = 0000h if okay for Windows to load
CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
CX <> 0 if Windows should not load
ES:BX -> startup info structure (see #02631)
DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
(see #02634)
Notes: the Windows enhanced mode loader and Microsoft 286 DOS extender will
broadcast an INT 2F/AX=1605h call when initializing. Any DOS device
driver or TSR can watch for this broadcast and return the appropriate
values. If the driver or TSR returns CX <> 0, it is also its
responsibility to display an error message (however, Windows95 is
reported to load regardless of the returned CX).
each handler must first chain to the prior INT 2F handler with
registers unchanged before processing the call
if the handler requires local data on a per-VM basis, it must store the
returned ES:BX in the "next" field of a startup info structure and
return a pointer to that structure in ES:BX
a single TSR may set the V86 mode enable/disable callback; if DS:SI is
already nonzero, the TSR must fail the initialization by setting CX
nonzero
MSD checks for Windows 3.0 running in standard mode by testing whether
CX=FFFFh and other registers are unchanged on return
Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
Microsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
active
SeeAlso: AX=1606h,AX=1608h,AX=4B05h
Format of Windows Startup Information Structure:
Offset Size Description (Table 02631)
00h 2 BYTEs major, minor version of info structure
02h DWORD pointer to next startup info structure or 0000h:0000h
06h DWORD pointer to ASCIZ name of virtual device file or 0000h:0000h
0Ah DWORD virtual device reference data (see #02633)
(only used if above nonzero)
0Eh DWORD pointer to instance data records (see #02632) or 0000h:0000h
---structure version >= 4.0---
12h DWORD pointer to optionally-instanced data records (see #02632)
or 0000h:0000h
Format of one Instance Item in array:
Offset Size Description (Table 02632)
00h DWORD address of instance data (end of array if 0000h:0000h)
04h WORD size of instance data
SeeAlso: #02631
Format of Virtual Device Reference Data:
Offset Size Description (Table 02633)
00h DWORD physical address of ??? or 00000000h
04h DWORD physical address of ??? table
08h DWORD "DEST_PAGE" address to which pages must be mapped
0Ch N DWORDs "SRC_PAGE" physical addresses of the pages
00000000h = end of table
Note: EMM386.EXE sets the first pointer to the start of the device driver
chain, the second pointer to a field of 40h bytes followed by a
16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
the start segment of the UMB area
SeeAlso: #02631
(Table 02634)
Values Windows virtual mode enable/disable procedure is called with:
AX = 0000h disable V86 mode
AX = 0001h enable V86 mode
interrupts disabled
Return: CF set on error
CF clear if successful
interrupts disabled
SeeAlso: #02631
--------W-2F1606-----------------------------
INT 2F C - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
AX = 1606h
DX = flags
bit 0 = 0 if Windows enhanced-mode exit
bit 0 = 1 if Microsoft 286 DOS extender exit
bits 1-15 reserved (undefined)
Notes: if the init broadcast fails (AX=1605h returned CX <> 0), then this
broadcast will be issued immediately.
this call will be issued in real mode
Novell DOS v7.0 (Update 8 - Update 15) TASKMGR in multitasking mode
uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
SeeAlso: AX=1605h,AX=1609h
--------W-2F1607-----------------------------
INT 2F C - MS Windows - VIRTUAL DEVICE CALL OUT API
AX = 1607h
BX = virtual device ID (see #02642)
CX = (usually) callout subfunction
Return: (usually) AX,BX,CX,DX,ES contain results
Notes: more of a convention than an API, this call specifies a standard
mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
to DOS device drivers and TSRs
see below for details on several virtual devices
SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
SeeAlso: AX=1607h/BX=0018h,AX=1684h"DEVICE API",AX=C020h
--------W-2F1607BX0006-----------------------
INT 2F C - MS Windows - "V86MMGR" VIRTUAL DEVICE API
AX = 1607h
BX = 0006h (VxD identifier of "V86MMGR")
CX = 0000h
Return: AX = status
0000h if local A20 state changed
1607h if A20 unchanged
other if global A20 state changed
SeeAlso: AX=1607h"CALL OUT API"
--------W-2F1607BX000C-----------------------
INT 2F C - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
AX = 1607h
BX = 000Ch (VxD identifier of "VMD")
Return: CX = nonzero if mouse driver already virtualized
Note: VMD (Virtual Mouse Driver) calls this and then checks whether CX is
nonzero; if yes, it will not automatically virtualize the mouse
driver. This would be used if MOUSE.COM already virtualizes
itself using the Windows API.
SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
--------W-2F1607BX000D-----------------------
INT 2F C - MS Windows95 - "VKD" VIRTUAL DEVICE - ??? CALLOUT
AX = 1607h
BX = 000Dh (VxD ID for VKD)
???
Return: ???
SeeAlso: AX=1607h"CALL OUT API",#02642
--------W-2F1607BX0010-----------------------
INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
AX = 1607h
BX = 0010h (VxD identifier of "BLOCKDEV")
CX = function
0001h starting FastDisk compatibility tests
0002h ending FastDisk compatibility tests
0003h check if FastDisk installation allowed
Return: CX = 0000h if allowed
Note: this interface is called by the Windows FastDisk driver (such as
WDCTRL) when it thinks that the INT 13h handler immediately below
IO.SYS's INT 13h code is not in ROM; it should be supported by any
program which hooks itself underneath IO.SYS's INT 13h code with
INT 2F/AH=13h
SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
--------W-2F1607BX0014-----------------------
INT 2F C - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
AX = 1607h
BX = 0014h (VxD identifier of "VNETBIOS")
Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
command code (see #02635)
Note: VNETBIOS (Virtual NetBIOS) calls this function to determine whether
the NetBIOS has an extensions Windows should know about
SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
(Table 02635)
Values for VNETBIOS action code:
00h "VN_Unknown" unknown command
04h "VN_No_Map" no memory mapping necessary
08h "VN_Map_In" input buffer is quickly used, so no global mapping needed
0Ch "VN_Map_In" output buffer is quickly used, so no global mapping needed
10h "VN_Map_In_Out" buffer is quickly used, so no global mapping needed
14h "VN_Chain_Send" the chain-send command
18h "VN_Cancel" special case for cancel command
1Ch "VN_Buffer_In" buffer is incoming
20h "VN_Buffer_Out" buffer is outgoing
24h "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
--------D-2F1607BX0015-----------------------
INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
AX = 1607h
BX = 0015h (VxD identifier of "DOSMGR")
CX = function
0000h query instance processing
DX = 0000h
Return: CX = state
0000h not instanced
other instanced (DOS 5+ kernel returns 0001h)
DX = segment of DOS drivers or 0000h for
default of 0070h
ES:BX -> patch table (see #02637)
0001h set patches in DOS
DX = bit mask of patch requests (see #02636)
Return: AX = B97Ch
BX = bit mask of patches applied (see #02636)
DX = A2ABh
0002h remove patches in DOS (ignored by DOS 5.0 kernel)
DX = bit mask of patch requests (see #02636)
Return: CX = 0000h (DOS 5-6)
Note: return values are ignored by DOSMGR in Windows 3.1
0003h get size of DOS data structures
DX = bit mask of request (only one bit can be set)
bit 0: Current Directory Structure size
Return: if supported request:
AX = B97Ch
CX = size in bytes of requested structure
DX = A2ABh
else:
CX = 0000h
all other registers preserved
0004h determine instanced data structures
Return: AX = B97Ch if supported
DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
BX = bit mask of instanced items
bit 0: CDS
bit 1: SFT
bit 2: device list
bit 3: DOS swappable data area
0005h get device driver size
ES = segment of device driver
Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
DX:AX = A2ABh:B97Ch if successful
BX:CX = size of device driver in bytes
Notes: DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
been instanced via this API and will not perform its own default
instancing of the normal DOS/BIOS data if so; if this API is not
supported, DOSMGR will also try to access instancing data through
INT 2F/AX=1603h
these functions are supported by the DOS 5+ kernel; DOSMGR contains
tables of instancing information for earlier versions of DOS
see Geoff Chappell's book _DOS_Internals_ for additional discussions of
DOSMGR's behavior and instancing in general
SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h
SeeAlso: AX=1684h"DEVICE API"
Bitfields for DOSMGR patch requests:
Bit(s) Description (Table 02636)
0 enable critical sections
1 NOP setting/checking user ID
2 turn INT 21/AH=3Fh on STDIN into polling loop
3 trap stack fault in "SYSINIT" to WIN386
4 BIOS patch to trap "Insert disk X:" to WIN386
Format of DOSMGR patch table:
Offset Size Description (Table 02637)
00h 2 BYTEs DOS version (major, minor)
02h WORD offset in DOS data segment of "SAVEDS"
04h WORD offset in DOS data segment of "SAVEBX"
06h WORD offset in DOS data segment of InDOS flag
08h WORD offset in DOS data segment of User ID word
0Ah WORD offset in DOS data segment of "CritPatch" table to enable
critical section calls (see INT 2A/AH=80h)
0Ch WORD (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
containing segment of last MCB in conventional memory
--------W-2F1607BX0018-----------------------
INT 2F C - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
AX = 1607h
BX = 0018h (VMPoll VxD ID) (see #02642)
CX = 0000h
Return: AX = status
0000h if timeslice used
nonzero if timeslice not needed
Note: when VMPoll makes this callout, all virtual machines are idle, and any
interested TSR can use the opportunity to perform background
processing
SeeAlso: AX=1607h"CALL OUT API",AX=1689h
--------W-2F1607BX0021--------------------------------------
INT 2F C - MS Windows - "PageFile" VIRTUAL DEVICE - GET LOCK BYTE
AX = 1607h
BX = 0021h (PageFile VxD ID)
CX = 0000h
Return: AX = status
0000h success
ES:DI -> cache lock byte in disk cacher
other no disk cache or unsupported
Notes: PageFile issues this call on real-mode initialization in order to allow
disk caches to provide it with a byte which it can use to temporarily
lock the disk cache; VMPOLL also issues this call, so it is made
twice each time Windows starts up
if this call fails, PageFile falls back to other techniques for locking
the disk cache
SeeAlso: AX=1607h"CALL OUT API"
--------W-2F1607BX002D-----------------------
INT 2F C - MS Windows - "W32S" VIRTUAL DEVICE - ??? CALLOUT
AX = 1607h
BX = 002Dh (VxD ID for W32S)
???
Return: ???
SeeAlso: AX=1607h"CALL OUT API",#02642
--------W-2F1607BX0040-----------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -