This Is a part of Ralf Brown's Interrput List: ( All about Windows ) (Edit by T&K(r)) (This is old doc compatible with maximum Win3.11 ) 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 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 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 - MS Windows/386 - GET INSTANCE DATA AX = 1603h Return: AX = 5248h ('RH') if supported DS:SI -> Windows/386 instance data (see #1409) 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 1409) 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 - 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 #1410) DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h (see #1413) 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. 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 Micrsoft'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 1410) 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 #1412) (only used if above nonzero) 0Eh DWORD pointer to instance data records (see #1411) or 0000h:0000h Format of one Instance Item in array: Offset Size Description (Table 1411) 00h DWORD address of instance data (end of array if 0000h:0000h) 04h WORD size of instance data Format of Virtual Device Reference Data: Offset Size Description (Table 1412) 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 (Table 1413) 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 --------W-2F1606----------------------------- INT 2F - 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 10) TASKMGR in multitasking mode uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF SeeAlso: AX=1605h,AX=1609h --------W-2F1607----------------------------- INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API AX = 1607h BX = virtual device ID (see #1419) 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,AX=C020h --------W-2F1607BX0006----------------------- INT 2F - 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 --------W-2F1607BX000C----------------------- INT 2F - 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-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 - 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 #1414) 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 1414) 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 #1416) 0001h set patches in DOS DX = bit mask of patch requests (see #1415) Return: AX = B97Ch BX = bit mask of patches applied (see #1415) DX = A2ABh 0002h remove patches in DOS (ignored by DOS 5.0 kernel) DX = bit mask of patch requests (see function 0001h) 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,AX=1684h Bitfields for DOSMGR patch requests: Bit(s) Description (Table 1415) 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 1416) 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) 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 SeeAlso: AX=1607h --------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 --------E-2F1607BX22C0----------------------- INT 2F - Rational Systems DOS/4GW - ??? AX = 1607h BX = 22C0h ??? Return: ??? SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h --------W-2F1608----------------------------- INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST AX = 1608h Notes: called after all installable devices have been initialized real-mode software may be called between the Windows enhanced-mode init call (AX=1605h) and this call; the software must detect this situation SeeAlso: AX=1605h,AX=1609h --------W-2F1609----------------------------- INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST AX = 1609h Note: called at the beginning of a normal exit sequence; not made in the event of a fatal system crash SeeAlso: AX=1606h,AX=1608h --------W-2F160A----------------------------- INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE AX = 160Ah Return: AX = 0000h if call supported BX = version (BH=major, BL=minor) CX = mode (0002h = standard, 0003h = enhanced) SeeAlso: AX=1600h,AX=4680h --------W-2F160B----------------------------- INT 2F - MS Windows 3.1 - IDENTIFY TSRs AX = 160Bh ES:DI -> communication structure (see #1417) or 0000h:0000h Return: ES:DI -> communication structure Desc: this call allows Windows-aware TSRs to make themselves known to Windows. Note: the TSR should allocate a communication structure, place the given ES:DI pointer in the first field, and return a pointer to the new structure SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h Format of TSR-to-Windows communication structure: Offset Size Description (Table 1417) 00h DWORD pointer to next structure 04h WORD PSP segment 06h WORD API version ID (0100h) 08h WORD EXEC flags bit 0: "WINEXEC" bit 1: "LOADLIBRARY" bit 2: "OPENDRIVER" 0Ah WORD "exec_cmd_show" 0Ch DWORD "exec_cmd" 10h 4 BYTEs reserved (0) 14h DWORD pointer to TSR ID block (see #1418) 18h DWORD pointer to TSR data block or 0000h:0000h Format of Norton Utilities 6.0 TSR ID block: Offset Size Description (Table 1418) 00h WORD length of name string 02h N BYTEs name of TSR's executable --------W-2F160C----------------------------- INT 2F - MS Windows 3.1 - DETECT ROMs AX = 160Ch ??? Return: ??? Note: used by ROM Windows SeeAlso: AX=160Bh --------m-2F1610----------------------------- INT 2F - XMS v1.x only - GET DRIVER ADDRESS AX = 1610h details unavailable Note: this function and AX=1600h were only used in XMS version 1 and are now obsolete. Use AX=4300h and AX=4310h instead SeeAlso: AX=1600h,AX=4310h --------W-2F1680----------------------------- INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE AX = 1680h Return: AL = status 00h if the call is supported 80h (unchanged) if the call is not supported Notes: programs can use this function in idle loops to enhance performance under multitaskers; this call is supported by MS Windows 3.0, DOS 5+, DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications does not block the program; it just gives up the remainder of the time slice should not be used by Windows-specific programs when called very often without intermediate screen output under WIN 3+, the VM will go into an idle-state and will not receive the next slice before 8 seconds. This time can be changed in SYSTEM.INI through "IdleVMWakeUpTime=". Setting to zero results in a long wait. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah --------W-2F1681----------------------------- INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION AX = 1681h Notes: used to prevent a task switch from occurring should be followed by an INT 2F/AX=1682h call as soon as possible nested calls are allowed, and must be followed by an appropriate number of "end critical section" calls not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and increment by hand. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h --------W-2F1682----------------------------- INT 2F - MS Windows 3+ - END CRITICAL SECTION AX = 1682h Notes: not supported in Windows/386 2.x. Get InDOS flag with INT 21/AH=34h and decrement by hand, taking care not to decrement InDOS flag through zero SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h --------W-2F1683----------------------------- INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID AX = 1683h Return: BX = current virtual machine (VM) ID Notes: Windows itself currently runs in VM 1, but this can't be relied upon VM IDs are reused when VMs are destroyed an ID of 0 will never be returned SeeAlso: AX=1684h,AX=1685h,AX=168Bh --------W-2F1684----------------------------- INT 2F - MS Windows - GET DEVICE API ENTRY POINT AX = 1684h BX = virtual device (VxD) ID (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API Note: some Windows enhanced-mode virtual devices provide services that applications can access. For example, the Virtual Display Device (VDD) provides an API used in turn by WINOLDAP. SeeAlso: AX=1683h (Table 1419) Values for MS Windows VxD ID: Value Name CallOut V86 PM Description 0000h LPT N N N DOS386 LPT Device (Windows for Workgroups 3.11) 0000h MSODISUP N N N MS ODI Support (Windows for Workgroups 3.11) 0000h NWNBLINK N N N Netware NetBIOS (Windows for Workgroups 3.11) 0000h SERIAL N N N DOS386 Serial Device (Windows for Workgrp 3.11) 0001h VMM N N Virtual Machine Manager 0002h Debug 0003h VPICD Y Y Virtual Prog. Interrupt Controller (PIC) Device 0004h VDMAD N N Virtual Direct Memory Access (DMA) Device 0005h VTD Y Y Virtual Timer Device 0006h V86MMGR Y N N Virtual 8086 Mode Device 0007h PageSwap N N Paging Device 0008h Parity N N Parity-check trapper 0009h Reboot N Y Ctrl-Alt-Del handler 000Ah VDD N Y Virtual Display Device (GRABBER) 000Bh VSD N N Virtual Sound Device 000Ch VMD Y Y Y Virtual Mouse Device 000Dh VKD N Y Virtual Keyboard Device 000Eh VCD N Y Virtual COMM Device 000Fh VPD Virtual Printer Device 0010h VHD Virtual Hard Disk Device (Windows 3.0) 0010h BLOCKDEV N N Virtual Hard Disk Device (Windows 3.1) 0010h IOS N N N DOS386 IOS Device (Windows for Workgroups 3.11) 0010h IOS N Y (Chicago) 0011h VMCPD Y Y Virtual Math CoProcessor Device 0012h EBIOS N N Reserve EBIOS page (e.g., on PS/2) 0013h BIOSXLAT N N Map ROM BIOS API between prot & V86 mode 0014h VNETBIOS Y N N Virtual NetBIOS Device 0015h DOSMGR Y Y N DOS data instancing (see #1422) 0016h WINLOAD 0017h SHELL N Y 0018h VMPOLL N N 0019h VPROD 001Ah DOSNET N N assures network integrity across VMs 001Ah VNETWARE Y Y Novell NetWare DOSNET replacement 001Bh VFD N N Virtual Floppy Device 001Ch VDD2 Secondary display adapter 001Ch LoadHi N N Netroom LoadHi Device (RMLODHI.VXD) 001Ch LoadHi N N 386MAX LoadHi Device (386MAX.VXD) 001Ch LoadHi N N Win386 LoadHi Device (EMM386.EXE) 001Dh WINDEBUG N Y 001Dh TDDebug N Y 001Eh TSRLoad TSR instance utility 001Fh BiosHook BIOS interrupt hooker VxD 0020h Int13 N N N 0021h PageFile N Y Paging File device 0022h SCSI 0023h MCA_POS 0024h SCSIFD SCSI FastDisk device 0025h VPEND Pen device 0026h APM Advanced Power Management 0027h VXDLDR N Y Y VXDLDR (Windows for Workgroups 3.11) 0028h NDIS N Y Y Network Driver Interface Specification (Windows for Workgroups 3.11) 002Ah VWIN32 N Y (Chicago) 002Bh VCOMM N Y Y DOS386 VCOMM Device (Windows for Workgrps 3.11) 002Dh W32S Y N Y WIN32s 32-bit extension to Windows API 0030h MACH32 N N Y ATI Mach32 video card 0031h NETBEUI N N N NETBEUI (Windows for Workgroups 3.11) 0032h SERVER N Y Y Int21 File Server (Windows for Workgroups 3.11) 0033h CONFIGMG Y Y (Chicago) 0033h EDOS N N Windows DOS Box Enhancer by Mom's Software 0034h DWCFGMG.SYS Plug-and-Play configuration manager 0036h VFBACKUP Y Y (Chicago) 0038h VCOND Y Y (Chicago) 003Ah VPMTD N N Y IFAX Scheduler Device (Windows for Workgr 3.11) 003Bh DSVXD Y N DoubleSpace VxD from MS-DOS v6.x 0051h ISAPNP N N 008Dh ESDI_506 N N (Chicago) 0090h voltrack N N 00FDh FAKEIDE N N (Chicago) 0102h CV1 N N Microsoft C/C++ 7.00+ CodeView for Windows 0200h VIPX Y Y NetWare Virtual IPX Driver 0201h VNWLSERV N N NetWare Lite 1.1 Server (SERVER.EXE) 0202h WINICE Y Y SoftICE/W 0203h VCLIENT N Y NetWare Lite 1.1+ Client 0205h VCAFT N N Novell Virtual CAFT Driver (LANalyzer for Win) 0205h BCW Y Y Nu-Mega Bounds Checker for Windows 0206h VTXRX N N Novell Virtual TXRX Driver (LANalyzer for Win) 0207h DPMS N Y N Novell DOS Protected Mode Services 0234h VCOMMUTE Y Y PC Tools Commute 0442h VTDAPI N Y MMSys Win386 VTAPI Device 0444h VADMAD Autoinitialize DMA (Windows 3.0) 0445h VSBD Y Y WinResKit: Sound Blaster Device 0446h VADLIBD Y Y Y MMSys Win386 AdLib Device (v3.x) 045Dh VflatD N Y dva.386, part of WIN32s 0460h UNIMODEM N Y 0480h VNetSup N Y Y Virtual Net Support (Windows for Workgrps 3.11) 0481h VRedir N N N Redirector File System Driver (Windows for Workgroups 3.11) 0482h VBrowse Y Y Win386 Virtual Browser 0483h VSHARE N N Windows for Workgroups Virtual SHARE 0484h IFSMgr Y Y N Installable File System Manager (Windows for Workgroups 3.11) 0486h VFAT N Y Y Win386 HPFS Driver (Windows for Workgrps 3.11) 0487h NWLINK Y Y Win386 Virtual Packet Exchange Protocol 0487h NWSUP Y N N NetWare Vnetbios shim 048Bh VCache N Y Y Virtual File Cache (Windows for Workgrps 3.11) 048Bh VCACHE Y Y 048Dh RASMAC Y Y enhanced mode Win4Workgroups RASMAC device 1021h VMB Y Y Microsoft C/C++ 7.00 WXSRVR 1022h Vpfd Y Y Microsoft C/C++ 7.00 1025h MMD Y Y Microsoft C/C++ 8.00, Visual C/C++ 1.00 2020h PIPE Y Y by Thomas W. Olson, in Windows/DOS DevJrn 5/92 21EAh VADLIBWD N Y Adlib Waveform Driver by John Ridges 2200h VFINTD Y Y Norton VFINTD (Norton Desktop) 22C0h ??? Y Rational Systems DOS/4GW ??? 2402h ZMAX N N Qualitas 386MAX v7 DOSMAX handler 24A0h VNSS N Y Norton Screen Saver (Norton Desktop) 24A1h VNDWD Y Y Norton VNDWD Device (Norton Desktop) 24A2h SYMEvent Y Y Norton Utilities v8 2540h VILD Y N INTERLNK client from MS-DOS v6.x 2640h VASBID N Y WinResKit: Artisoft Sounding Board Device 2860h COMMTASK N N Y Windows 386-mode preemptive tasker by James A. Kenemuth of Interabang Computing 28A0h PHARLAPX Y PharLap inter-VM communications DLL 28A1h PharLap Y Y Y PharLap 386|DOS-Extender DOSXNT.386 28C0h VXD N Y Y Generic VxD for real and protected mode by Andrew Schulman in MSJ February 1993 2925h EDOS Y Y Enhanced DOS by Firefly Software 292Dh VSBPD Y Y Sound Blaster Pro 3098h VstlthD N N N for QEMM Stealth ROM mode 310Eh WPS N Y MS DevNet CD-ROM: Windows Process Status 32CBh VFRAD Y Y Dr.Franz - Simultan's diagnotics VFRAD.386 4321h POSTMSG Y Y (see #1436) 7A5Fh SIWVID Y Y Y Soft-ICE for Windows video driver 7FE0h VSWITCHD Y N by Jeff Prosise 7FE0h VWFD N Y Y reports windowed/fullscreen state by Neil Sandlin of Microsoft 7FE1h VWATCHD N Y Y basic driver w/ no functionality except tracing by Keith Jin of Microsoft PSS 7FE5h VFINTD N Y Y Virtual Floppy Interrupt trapper by Neil Sandlin of Microsoft 7FE7h VMPAGES N Y Y demonstration of exporting VxD services, by Neil Sandlin of Microsoft 7FE8h VPOSTD Y Y PostMessage() demo by Curtis J. Palmer of MS 7FE9h VIdleD N N N demonstration of Call_When_Idle function, by Bernie McIlroy of Microsoft 7FEBh VMIOD N N N Virtual Monitor I/O Traffic Device, by Neil Sandlin of Microsoft 7FEDh VMIRQD N N N Virtual Monitor IRQ Traffic Device, by Neil Sandlin of Microsoft 8888h VbillD Bill Potvin II's for reversing Compaq LTE video EEEEh VEPSD N N Virtual Extended Paging Services for Borland C++ v4.0 Note: The high bit of the VxD ID is reserved for future use. The next 10 bits are the OEM number which is assigned by Microsoft. The low 5 bits are the device number. Naturally, this scheme has not been adhered to since there are now more than 32 different VxDs. --------W-2F1684BX0003----------------------- INT 2F - MS Windows - VPICD - GET DEVICE API ENTRY POINT AX = 1684h BX = 0003h (virtual device ID for VPICD device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point 0000h:0000h if the VxD does not support an API --------W-2F1684BX0005----------------------- INT 2F - MS Windows - VTD - GET DEVICE API ENTRY POINT AX = 1684h BX = 0005h (virtual device ID for VTD device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1420) 0000h:0000h if the VxD does not support an API (Table 1420) Call VTD.386 entry point with: AX = function number 0000h get VTD version number Return: AH = major version AL = minor version 0100h get current clock tick time Return: EDX:EAX = clock tick time in 840ns units since Windows was started 0101h get current system time in milliseconds Return: EAX = time in milliseconds that Windows has been running 0102h get current virtual machine time Return: EAX = cumulative amount of time the virtual machine has been active, in milliseconds Note: this entry point should only be called directly when TOOLHELP.DLL TimerCount() cannot be called SeeAlso: #2633,#2634,#2654 at INT 20"Windows" --------W-2F1684BX0009----------------------- INT 2F - MS Windows - REBOOT - GET DEVICE API ENTRY POINT AX = 1684h BX = 0009h (virtual device ID for REBOOT device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1421) 0000h:0000h if the VxD does not support an API SeeAlso: INT 14/AH=17h"FOSSIL",INT 16/AX=E0FFh (Table 1421) Call REBOOT protected-mode entry point with: AX = function 0100h warm boot Return: never Note: broadcasts "Reboot_Processor" message, which is caught by the VKD device 0201h set KERNEL Ctrl-Alt-Del handler ES:DI -> new Ctrl-Alt-Del handler DS:SI -> KERNEL reboot sanity check byte Return: CF clear Notes: if an application installs its own handler and then chains to Windows' handler, Windows will no longer be able to detect hung applications, and will always produce an "Application not responding" dialog DS must contain a writable, fixed selector because the provided address is converted to a linear address before being stored when Ctrl-Alt-Del is pressed in the system VM, Reboot sets the sanity check byte to zero, schedules a 750ms wait, and then tests whether the check byte is still zero; if not, it displays a message that there is no hung application and then exits 0202h get KERNEL Ctrl-Alt-Del handler Return: CF clear ES:DI -> current Ctrl-Alt-Del handler Note: the default handler is located in KERNEL 0203h display "Application not responding" dialog box ES:DI -> ASCIZ name of hung application Return: never if user pressed Ctrl-Alt-Del a second time CF clear AX = result 0000h user pressed Esc 0001h user pressed Enter Note: this function is used by the default Windows Ctrl-Alt-Del handler 0204h set/reset protected-mode INT 01 handler CX:EDX -> new protected-mode INT 01 handler CX = 0000h restore protected-mode INT 01 handler Return: CF clear Notes: if CX is nonzero, the current handler address is saved internally before the new handler is set; this saved address is then used when CX is zero on entry used by Windows' default Ctrl-Alt-Del handler; actual fatal exit to DOS will be done on next INT 01 Warning: opened files are not closed and remain open as orphaned files in DOS Note: functions 0201h and 0203h are not useful outside the system VM SeeAlso: #2635,#2636 --------W-2F1684BX000C----------------------- INT 2F - MS Windows - VMD - GET DEVICE API ENTRY POINT AX = 1684h BX = 000Ch (virtual device ID for VMD device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point 0000h:0000h if the VxD does not support an API --------W-2F1684BX0015----------------------- INT 2F - MS Windows - DOSMGR - GET DEVICE API ENTRY POINT AX = 1684h BX = 0015h (virtual device ID for DOSMGR device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1422,#2647) 0000h:0000h if the VxD does not support an API (Table 1422) Call DOSMGR entry point with: AX = 0000h get DOSMGR version Return: CF clear AX = version (AH = major, AL = minor) AX = 0001h set critical focus Return: CF clear AX = 0002h crash current virtual machine Return: never Note: displays message box stating that "application has been stopped by the DOSMGR device" AX = 0003h enter critical section Note: this function assumes that the code for INT 2A/AX=8001h and INT 2A/AX=8002h have been modified for Windows AX = 0004h get VM ID byte Return: CF clear if successful ES:DI -> VM ID byte CF set on error Note: this function fails if the INT 2A modifications have not yet been applied AX = 0005h inform Windows of possible media change BL = drive number (00h=A:) Return: CF clear if successful CF set on error SeeAlso: #2647 at INT 20"Windows" --------W-2F1684BX0017----------------------- INT 2F U - MS Windows - SHELL - GET DEVICE API ENTRY POINT AX = 1684h BX = 0017h (virtual device ID for SHELL device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1423) 0000h:0000h if the VxD does not support an API SeeAlso: AX=1684h/BX=0021h (Table 1423) Call SHELL entry point with: EDX = function number (0000h-0016h, mostly unknown) 0000h get version number Return: AX = version number EBX = system VM handle 0001h "SHELL_Get_SYSVM_Info" get system VM information Return: CF clear AX bit 0 set if system VM executing exclusively BX = background time slice priority CX = foreground time slice priority SI = minimum time slice in milliseconds 0002h "SHELL_Set_SYSVM_Info" set system VM information AX bit 0 set if system VM should execute exclusively (ignored?) BX = background time slice priority (1-10000) CX = foreground time slice priority (1-10000) SI = minimum time slice in milliseconds (1-10000) Return: CF clear if successful 0003h "SHELL_Crt_VM" create a virtual machine ES:EDI -> SEB structure (see #1424) Return: CF clear if successful EAX = VM handle CF set on error EDX,EAX = result from GetSetDetailedVMError() 0004h "SHELL_Destroy_VM" destroy a virtual machine EBX = VM handle (not system VM) Return: nothing 0005h "SHELL_Set_Focus" EBX = VM handle ECX = ??? Return: nothing 0006h "SHELL_Get_VM_State" EBX = VM handle (not system VM) ES:EDI -> ??? structure Return: CF clear if successful 0007h "SHELL_Set_VM_State" EBX = VM handle (not system VM) ES:EDI -> ??? structure 0008h "SHELL_Debug_Out" ??? Return: ??? Note: dummy function in retail version of MS Windows 0009h "SHELL_VMDA_Init" ??? Return: ??? 000Ah "SHELL_VMDA_Exit" ??? Return: ??? 000Bh "SHELL_Get_Message_Txt" ??? Return: ??? 000Ch "SHELL_Event_Complete" ??? Return: ??? 000Dh "SHELL_Get_Contention_Info" ??? Return: ??? 000Eh "SHELL_Get_Clip_Info" ??? Return: ??? 000Fh "SHELL_Set_Paste" ??? Return: ??? 0010h "SHELL_Switcher_Assist" ??? Return: ??? 0011h "SHELL_Get_FileSysChng" ??? Return: ??? 0012h "SHELL_Query_Destroy" ??? Return: ??? 0013h "SHELL_SetFocus_Cur_VM" set input focus to current VM ??? Return: ??? 0014h "SHELL_User_Busy_API" ??? Return: ??? 0015h "SHELL_Chng_Hot_Key" ??? Return: ??? 0016h "SHELL_Get_TermInfo" ??? Return: ??? Return: CF set if called from VM other than system VM EAX = FFFFFFFFh Note: except for function 0013h, this API may only be called from the system VM SeeAlso: #2655 at INT 20"Windows" Format of Shell Execution Block (SEB): Offset Size Description (Table 1424) 00h DWORD PIF flags (see #1425) 04h DWORD display flags (see #1426) 08h PWORD -> pathname of .EXE to run 0Eh PWORD -> argument list 14h PWORD -> working drive/directory 1Ah WORD desired number of V86 pages for virtual machine 1Ch WORD minimum number of V86 pages for VM 1Eh WORD foreground priority 20h WORD background priority 22h WORD maximum KB of EMS 24h WORD minimum KB of EMS 26h WORD maximum KB of XMS 28h WORD minimum KB of XMS 2Ah WORD ??? 2Ch WORD ??? 2Eh 128 BYTEs title Note: the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset followed by a WORD selector Bitfields for 386 Enhanced Mode PIF flags: Bit(s) Description (Table 1425) 0 exclusive use of processor when VM is fullscreen 1 VM runs in background 2 VM runs in window 3-4 ??? 5 Alt-Tab reserved 6 Alt-Esc reserved 7 Alt-Space reserved 8 Alt-Enter reserved 9 Alt-PrtSc reserved 10 PrtSc reserved 11 Ctrl-Esc reserved 12 VM will release idle time slice 13 VM not allowed to use high mem 14 unknown 15 VM expanded mem not pageable 16 VM extended mem not pageable 17 Fast paste from clipboard enabled 18 VM app memory not pageable 30 Close VM when app exits Bitfields for SHELL display options: Bit(s) Description (Table 1426) 0 emulate text mode 1 monitor text port 2 monitor low graphics port 3 monitor high graphics port 7 Retain video memory --------W-2F1684BX0021----------------------- INT 2F U - MS Windows - PAGEFILE - GET DEVICE API ENTRY POINT AX = 1684h BX = 0021h (virtual device ID for PAGEFILE device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1427) 0000h:0000h if the VxD does not support an API SeeAlso: AX=1684h/BX=0017h (Table 1427) Call PAGEFILE entry point with: AX = function 0000h get version Return: CF clear AX = version (AH = major, AL = minor) 0001h get swap file info DS:SI -> 128-byte buffer for swap file full pathname DS:DI -> 128-byte buffer for SPART.PAR full pathname Return: CF clear AL = pager type (see #1428) AH = flags bit 7: swap file corrupted ECX = maximum size of swap file DS:SI buffer filled if paging enabled DS:DI buffer filled if permanent swap file 0002h delete permanent swap file on exit Return: CF clear 0003h get current temporary swap file size Return: CF clear DX:AX = current swap file size in bytes 0000h:0000h if permanent swap file Note: this API is only available in protected mode, and may only be called from the system VM SeeAlso: #2656 at INT 20"Windows" (Table 1428) Values for MS Windows PAGEFILE pager type: 00h paging disabled 01h MSDOS 02h BIOS 03h 32-bit disk access SeeAlso: #1427 --------W-2F1684BX0034----------------------- INT 2F U - Intel Plug-and-Play - CONFIGURATION MANAGER - GET ENTRY POINT AX = 1684h BX = 0034h (ID for Configuration Manager) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> API entry point (see #1429) 0000h:0000h if Configuration Manager not loaded Index: installation check;Plug-and-Play Configuration Manager (Table 1429) Call Configuration Manager entry point with: AX = function 0000h "CM_GetVersion" get supported DDI version Return: AH = major version (01h) AL = minor version (00h) BX = number of devices identified by configuration Note: returns AX = 0000h if no config manager installed 0001h "CM_GetConfig" get device configuration BX = device index ES:DI -> buffer for configuration information (see #1430) Return: AX = status 0000h successful ES:DI buffer filled other error code (0001h = index out of range) 0002h "CM_LockConfig" lock device configuration ES:DI -> configuration information Return: AX = status 0000h successful ES:DI buffer filled with assigned config 0001h resources conflict 0002h invalid request or configuration info 0003h "CM_UnlockConfig" unlock device configuration ES:DI -> configuration information Return: AX = status 0000h successful ES:DI buffer filled with assigned config 0001h invalid request or configuration info Format of Configuration Information Structure: Offset Size Description (Table 1430) 00h DWORD bus ID 04h DWORD device ID 08h DWORD serial number 0Ch DWORD logical ID 10h DWORD flags ---ISA bus--- 14h BYTE Card Select Number 15h BYTE logical device number 16h WORD Read Data port ------ 18h WORD number of memory windows 1Ah 9 DWORDs physical base addresses of memory windows 3Eh 9 DWORDs length of memory windows 62h 9 WORDs memory window attributes 74h WORD number of I/O ports 76h 20 WORDs I/O port base addresses B6h 20 WORDs lengths of I/O port ranges F6h WORD number of IRQs F8h 7 BYTEs IRQ registers FFh 7 BYTEs IRQ attributes 106h WORD number of DMA channels 108h 7 BYTEs DMA channels used 10Fh 7 WORDs DMA channel attributes 11Dh 3 BYTEs reserved SeeAlso: #1429 --------W-2F1684BX0444----------------------- INT 2F - MS Windows - VADMAD - GET DEVICE API ENTRY POINT AX = 1684h BX = 0444h (virtual device ID for VADMAD device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1431) 0000h:0000h if the VxD does not support an API (Table 1431) Call VADMAD entry point with: DX = operation 0000h set VADMAD mode AX = desired mode 0001h set VADMAD channel AX = desired channel Note: after setting mode/channel, start the DMA operation with an OUT to I/O port 0Bh (channels 0-3) or D6h (channels 4-7) SeeAlso: #2633 at INT 20"Windows" --------W-2F1684BX0750----------------------- INT 2F - MS Windows - VSWITCHD - GET DEVICE API ENTRY POINT AX = 1684h BX = 0750h (virtual device ID for VSWITCHD device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1432) 0000h:0000h if the VxD does not support an API (Table 1432) Call VSWITCHD entry point with: AX = function 0000h toggle windowed mode (simulate Alt-Enter keypress) Return: nothing 0001h get windowed mode Return: CF clear if VM is windowed CF set if VM is full-screen --------W-2F1684BX28A0----------------------- INT 2F - MS Windows - PHARLAPX - GET DEVICE API ENTRY POINT AX = 1684h BX = 28A0h (virtual device ID for PHARLAPX device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #2648) 0000h:0000h if the VxD does not support an API (Table 2648) Call PHARLAPX VxD entry point with: AX = function 0001h get PHARLAP.386 version Return: AX = version number (AH = major, AL = minor) ---queue functions--- 0101h allocate a new message queue CX = size of queue data buffer in bytes Return: DX:AX = handle for new queue, or 0000h:0000h on error 0102h allocate a new key queue CX = size of queue data buffer in bytes EDX = VM handle into which keys will be pasted Return: DX:AX = handle for new queue, or 0000h:0000h on error 0103h free message queue EDX = queue handle Return: AX = status (0000h,0003h,0007h) (see #2649) 0104h free key queue EDX = queue handle Return: AX = status (0000h,0003h,0005h) (see #2649) 0105h add message to communications queue EDX = queue handle BX = length of message data in bytes CX = length of message header in bytes ES:(E)SI -> message header GS:(E)DI -> message data Return: AX = status (0000h-0003h,0007h) (see #2649) 0106h remove message from queue EDX = queue handle CX = length of buffer in bytes ES:(E)SI -> buffer for message Return: AX = status (0000h,0003h,0006h,0007h,0008h) (see #2649) CX = length of returned message (if AX=0000h or 0008h) 0107h flush queue (remove all data) EDX = queue handle Return: AX = status (0000h,0003h) (see #2649) 0108h add PasteKey structure(s) to key queue EDX = queue handle CX = number of PasteKey structures in buffer ES:(E)SI -> PasteKey array (see #2650) Return: AX = status (0000h-0003h) (see #2649) 0109h register enqueueing callback function EDX = queue handle ECX = function argument ES:(E)SI -> callback function Return: AX = status (0000h,0003h,0009h) (see #2649) 010Ah register dequeueing callback function EDX = queue handle ECX = function argument ES:(E)SI -> callback function Return: AX = status (0000h,0003h,0009h) (see #2649) 010Bh unregister enqueueing callback function EDX = queue handle Return: AX = status (0000h,0003h,0009h) (see #2649) 010Ch unregister dequeueing callback function EDX = queue handle Return: AX = status (0000h,0003h,0009h) (see #2649) 010Dh get message queue status EDX = queue handle Return: AX = status (0000h,0003h) (see #2649) CX = number of pending messages 010Eh peek at message in queue EDX = queue handle BX = number of message in queue (0000h = first) CX = size of buffer in bytes ES:(E)SI -> buffer for message Return: AX = status (0000h,0003h,0006h,0008h) (see #2649) CX = length of returned message (if AX=0000h or 0008h) 010Fh peek at last message in queue EDX = queue handle CX = size of buffer in bytes ES:(E)SI -> buffer for message Return: AX = status (0000h,0003h,0006h,0008h) (see #2649) CX = length of returned message (if AX=0000h or 0008h) 0110h replace last message in queue EDX = queue handle CX = length of message header in bytes BX = length of message data in bytes ES:(E)SI -> message header GS:(E)DI -> message data Return: AX = status (0000h,0002h,0003h) (see #2649) 0111h set permitted message count for queue EDX = queue handle CX = maximum number of messages to enqueue (FFFFh = unlimited) Return: AX = status (0000h,0003h) (see #2649) ---generalized VxD services--- 0202h call VxD function ES:(E)BX -> in/out register-set buffer Return: buffer updated 0203h map flat ??? --system register functions--- 0301h read system registers into buffer ES:(E)SI -> 512-byte buffer Return: AX = 0000h buffer filled (mostly zeros) 0302h copy linear memory into buffer EDX = linear address CX = number of bytes to copy ES:(E)SI -> buffer Return: AX = 0000h 0303h copy data into linear memory EDX = linear address CX = number of bytes to copy ES:(E)SI -> buffer Return: AX = 0000h 0304h freeze VM ??? 0305h unfreeze VM ??? ---name registration functions--- 0401h register name EDX = magic number to associate with name ES:(E)SI -> name to register Return: AX = status (0000h,0009h) (see #2649) 0402h unregister name ES:(E)SI -> name to be unregistered Return: AX = status (0000h,0009h) (see #2649) 0403h look up name ES:(E)SI -> name to look up Return: DX:AX = magic number or 0000h:0000h if not registered 0404h get name list handle Return: DX:AX = name list handle 0000h:0000h if not initialized ---special DOS server routines (undocumented)--- 0501h register 0502h unregister 0503h validate VM 0504h get INT9 count 0505h get screen line 0506h get shift status 0507h get server PB pointer 0508h initialize DOS shell 0509h get last VM handle (Table 2649) Values for PHARLAPX function status: 00h successful 01h data is too large to fit in queue 02h queue is full 03h invalid queue handle 04h invalid VM handle for queue 05h error starting a paste operation 06h queue is empty 07h a VM is blocked waiting on the queue 08h message was too long (truncated) 09h unable to register or unregister specified callback SeeAlso: #2648 Format of PHARLAPX PasteKey structure: Offset Size Description (Table 2650) 00h BYTE ASCII code 01h BYTE scan code 02h WORD shift states SeeAlso: #2648 Format of PHARLAPX VxD-call register structure: Offset Size Description (Table 2651) 00h DWORD call number 04h WORD input register map (see #2652) 06h WORD output register map (see #2652) 08h 7 DWORDs values for EAX, EBX, ECX, EDX, EBP, ESI, EDI on call 24h 4 WORDs values for DS, ES, FG, GS on call 2Ch DWORD EFLAGS on call 30h 7 DWORDs returned values of EAX, EBX, ECX, EDX, EBP, ESI, EDI 4Ch 4 WORDs returned values of DS, ES, FS, GS 54h DWORD returned EFLAGS SeeAlso: #2648 Bitfields for PHARLAPX VxD-call register map: Bit(s) Description (Table 2652) 0 value in EAX field is valid 1 value in EBX field is valid 2 value in ECX field is valid 3 value in EDX field is valid 4 value in EBP field is valid 5 value in ESI field is valid 6 value in EDI field is valid 7 value in DS field is valid 8 value in ES field is valid 9 value in FS field is valid 10 value in GS field is valid 11 value in EFLAGS field is valid SeeAlso: #2651 --------W-2F1684BX2925----------------------- INT 2F - MS Windows - EDOS - GET DEVICE API ENTRY POINT AX = 1684h BX = 2925h (virtual device ID for EDOS device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1433) 0000h:0000h if the VxD does not support an API (Table 1433) Call EDOS entry point with: AX = 0000h get EDOS version number Return: AH = major version AL = minor version AX = 0001h display message CX = 0 DX:BX -> ASCIZ Message AX = 0002h get EDOS error coded Return: EAX = time in milliseconds that Windows has been running AX = 0003h execute windows program Return: EAX = cumulative amount of time the virtual machine has been active, in milliseconds AX = 0008h get/set priority BX = 0000h??? foreground 0001h background DI = 0000h get 0001h set DX = priority setting Return: CX = foreground priority DX = background priority BX:AX = flags 00000001h exclusive ON 00000010h background ON SI = CPU percentage --------W-2F1684BX310E----------------------- INT 2F - MS Windows - WPS - GET DEVICE API ENTRY POINT AX = 1684h BX = 310Eh (virtual device ID for WPS device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1434) 0000h:0000h if the VxD does not support an API (Table 1434) Call WPS protected-mode entry point with: DX = function 0000h get WPS.386 version Return: CF clear AX = version (AH = major, AL = minor) 0001h get number of installed VxDs Return: CF clear AX = number of installed VxDs 0002h get VxD characteristics AX = number of VxD ES:BX -> buffer for VxD characteristics structure (see #1435) Return: CF clear ES:BX buffer filled Format of WPS.386 VxD characteristics structure: Offset Size Description (Table 1435) 00h WORD VxD ID number 02h BYTE VxD minor version 03h BYTE VxD major version 04h BYTE DDK minor version 05h BYTE DDK major version 06h WORD flags bit 0: V86 API supported bit 1: PM API supported bit 2: services supported 08h DWORD start order 0Ch 9 BYTEs ASCIZ VxD name --------W-2F1684BX8888----------------------- INT 2F - MS Windows - POSTMSG - GET DEVICE API ENTRY POINT AX = 1684h BX = 8888h (virtual device ID for POSTMSG device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1436,#1438) 0000h:0000h if the VxD does not support an API (Table 1436) Call POSTMSG protected-mode entry point with: AX = window handle CX:BX -> callback procedure (see #1437) Return: nothing Note: this call registers a WinApp with the VxD; the callback must be in a fixed, non-discardable code segment SeeAlso: #1438 (Table 1437) Values POSTMSG callback routine is called with: STACK: DWORD "lParam" parameter from DOSApp WORD "wParam" parameter from DOSApp WORD Windows message number (WM_USER + 100) DWORD registered hwnd (Table 1438) Call POSTMSG V86-mode entry point with: BX = wParam value to pass to protected-mode callback DX:AX = lParam value to pass to protected-mode callback Return: CF clear if successful CF set on error (no WinApp registered) SeeAlso: #1436 --------W-2F1684BX8888----------------------- INT 2F - MS Windows - VbillD - GET DEVICE API ENTRY POINT AX = 1684h BX = 8888h (virtual device ID for VbillD device) (see #1419) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point (see #1439) 0000h:0000h if the VxD does not support an API (Table 1439) Call VbillD entry point with: AX = function 0001h set reverse video 0002h set normal video Return: ??? --------W-2F1685----------------------------- INT 2F - MS Windows - SWITCH VMs AND CALLBACK AX = 1685h BX = VM ID of virtual machine to switch to CX = flags (see #1440) DX:SI = priority boost (see VMM.INC) ES:DI -> FAR procedure to callback Return: CF set on error AX = error code 01h invalid VM ID 02h invalid priority boost 03h invalid flags CF clear if successful event will be or has been called Notes: some DOS devices, such as networks, need to call functions in a specific VM. This call forces the appropriate VM to be installed. the callback procedure must preserve all registers and return with IRET SeeAlso: AX=1683h,INT 15/AX=1117h,AX=DB06h"WINGO" Bitfields for VM switching flags: Bit(s) Description (Table 1440) 0 wait until interrupts enabled 1 wait until critical section unowned 2-15 reserved (zero) --------E-2F1686----------------------------- INT 2F - DOS Protected-Mode Interface - DETECT MODE AX = 1686h Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available) AX nonzero if in real/V86 mode or no DPMI (INT 31 not available) SeeAlso: AX=1687h --------E-2F1687----------------------------- INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK AX = 1687h Return: AX = 0000h if installed BX = flags bit 0: 32-bit programs supported CL = processor type (02h=80286, 03h=80386, 04h=80486) DH = DPMI major version DL = two-digit DPMI minor version (binary) SI = number of paragraphs of DOS extender private data ES:DI -> DPMI mode-switch entry point (see #1441) AX nonzero if not installed SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h (Table 1441) Call DPMI mode switch entry point with: AX = flags bit 0: set if 32-bit program ES = real mode segment of buffer for DPMI private data (ignored if SI was zero) Return: CF set on error program still in real mode AX = error code (DPMI 1.0+) 8011h unable to allocate all necessary descriptors 8021h 32-bit program specified, but 16-bit DPMI host CF clear if successful CS = 16-bit selector corresponding to real-mode CS SS = selector corresponding to real-mode SS (64K limit) DS = selector corresponding to real-mode DS (64K limit) ES = selector to program's PSP (100h byte limit) FS = GS = 0 high word of ESP = 0 if 32-bit program program now in protected mode Note: this entry point is only called for the initial switch to protected mode --------W-2F1688BX0BAD----------------------- INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT AX = 1688h BX = 0BADh Return: AX = 0000h if supported BX = alias selector for LDT Note: use the LSL instruction or GetSelectorLimit() to find LDT size this call should be considered obsolete for Windows 3.1+, as the alias selector can be retrieved via the API entry point for "MS-DOS" retrieved from INT 2F/AX=168Ah (see #1443) --------W-2F1689----------------------------- INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL AX = 1689h ??? Return: ??? SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28 --------E-2F168A----------------------------- INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT AX = 168Ah DS:(E)SI = selector:offset of ASCIZ vendor name (see #1442) Return: AL = status 00h successful ES:(E)DI -> extended API entry point 8Ah unsuccessful Notes: the vendor name is used to determine which entry point to return; it is case-sensitive available in protected mode only 32-bit applications use ESI and EDI, 16-bit applications use SI and DI this call is present but not documented for DPMI 0.9 the Borland C++ 3.1 DPMILOAD does not handle requests for entry points other than the MS-DOS one gracefully, producing an unhandled exception report; this has been fixed in the Borland Pascal 7 version SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h (Table 1442) Values for DPMI vendor-specific API names: "MS-DOS" MS Windows and 386MAX v6.00+ (see #1443) "386MAX" 386MAX v6.00+ "HELIX_DPMI" Helix Netroom's DPMI server "Phar Lap" Phar Lap 286|DOS-Extender RUN286 (see #1444) (Table 1443) Call Windows-support ("MS-DOS") entry point with: AX = 0100h get LDT alias selector Return: CF clear if successful AX = alias selector CF set on error (Table 1444) Call Phar Lap RUN286 entry point with: AX = 0000h (function "load MSW") BX = new value for MSW register (low word of CR0) Return: ??? --------W-2F168B----------------------------- INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE AX = 168Bh BX = virtual machine ID (see AX=1683h), 0000h for current DOS box Return: AL = 00h if focus set to specified VM Notes: documented on the Microsoft Developer's Network CD-ROM if the VM is a windowed DOS box, it will be set to full screen SeeAlso: AX=1683h --------W-2F168C----------------------------- INT 2F - MS Windows 3.1 - RESTART COMMAND AX = 168Ch ??? Return: ??? Note: WIN.COM executes specified application --------W-2F1700----------------------------- INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION AX = 1700h Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard AX <> 1700h AL = WINOLDAP major version AH = WINOLDAP minor version Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting "old" (character-mode) application access to Dynamic Data Exchange, menus, and the Windows clipboard. Note: this installation check DOES NOT follow the format used by other software of returning AL=FFh SeeAlso: AX=1701h,AX=4601h Index: installation check;WINOLDAP --------W-2F1701----------------------------- INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD AX = 1701h Return: AX = status nonzero success 0000h clipboard is already open SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h,INT 16/AX=CB00h --------W-2F1702----------------------------- INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD AX = 1702h Return: AX = status nonzero clipboard has been emptied 0000h failure SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h,INT 16/AX=CB05h --------W-2F1703----------------------------- INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA AX = 1703h DX = clipboard format supported by WinOldAp (see #1445) ES:BX -> data (see #1446,#1447) SI:CX = size of data Return: AX = status nonzero data copied into the Clipboard 0000h failure SeeAlso: AX=1701h,AX=1705h,INT 16/AX=CB04h (Table 1445) Values for WinOldAp clipboard format: 01h text 02h bitmap 03h metafile picture 04h SYLK 05h DIF 06h TIFF 07h OEM text 08h DIB bitmap 80h special format (used by Windows WRITE, maybe other Windows applets???) 81h DSP text 82h DSP bitmap Format of Windows Clipboard bitmap: Offset Size Description (Table 1446) 00h WORD type (0000h) 02h WORD width of bitmap in pixels 04h WORD height of bitmap in pixels 06h WORD bytes per line 08h BYTE number of color planes 09h BYTE number of adjacent color bits in pixel 0Ah DWORD pointer to start of data 0Eh WORD width in 0.1mm units 10h WORD height in 0.1mm units 12h N BYTEs bitmap data Format of Windows metafile picture: Offset Size Description (Table 1447) 00h WORD mapping mode 02h WORD X extent 04h WORD Y extent 06h WORD picture data --------W-2F1704----------------------------- INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE AX = 1704h DX = clipboard format supported by WinOldAp (see #1445) Return: DX:AX = size of data in bytes, including any headers 0000h:0000h if no data in this format in the Clipboard Note: Windows reportedly rounds up the size of the data to a multiple of 32 bytes SeeAlso: AX=1700h,AX=1703h,AX=1705h --------W-2F1705----------------------------- INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA AX = 1705h DX = clipboard format supported by WinOldAp (see #1445) ES:BX -> buffer Return: AX = status nonzero success 0000h error, or no data in this format in Clipboard SeeAlso: AX=1700h,AX=1704h,INT 16/AX=CB03h --------W-2F1708----------------------------- INT 2F - MS Windows "WINOLDAP" - CloseClipboard AX = 1708h Return: AX = status 0000h failure nonzero success --------W-2F1709----------------------------- INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD AX = 1709h SI:CX = desired size in bytes Return: DX:AX = number of bytes in largest block of free memory Note: WinOldAp is responsible for including the size of any headers --------W-2F170A----------------------------- INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES AX = 170Ah DX = GDI information index (see #1448) Return: AX = integer value of the desired item (see #1449,#1450,#1451,#1452,#1453,#1454,#1455) Note: This function returns the device-capability bits for the given display (Table 1448) Values for GDI information index: 00h device driver version 02h device classification 04h width in mm 06h height in mm 08h width in pixels 0Ah height in pixels 0Ch bits per pixel 0Eh number of bit planes 10h number of brushes supported by device 12h number of pens supported by device 14h number of markers supported by device 16h number of fonts supported by device 18h number of colors 1Ah size required for device descriptor 1Ch curve capabilities 1Eh line capabilities 20h polygon capabilities 22h text capabilities 24h clipping capabilities 26h bitblt capabilities 28h X aspect 2Ah Y aspect 2Ch length of hypotenuse of aspect 58h logical pixels per inch of width 5Ah logical pixels per inch of height SeeAlso: #1449,#1450,#1451,#1452,#1453,#1454,#1455 (Table 1449) Values for device classification: 00h vector plotter 01h raster display 02h raster printer 03h raster camera 04h character-stream, PLP 05h Metafile, VDM 06h display-file SeeAlso: #1448,#1450,#1451,#1452,#1453,#1454,#1455 Bitfields for curve capabilities: Bit(s) Description (Table 1450) 0 circles 1 pie wedges 2 chord arcs 3 ellipses 4 wide lines 5 styled lines 6 wide styled lines 7 interiors SeeAlso: #1448,#1449,#1451,#1452,#1453,#1454,#1455 Bitfields for line capabilities: Bit(s) Description (Table 1451) 1 polylines 2 markers 3 polymarkers 4 wide lines 5 styled lines 6 wide styled lines 7 interiors SeeAlso: #1448,#1449,#1450,#1452,#1453,#1454,#1455 Bitfields for polygon capabilities: Bit(s) Description (Table 1452) 0 polygons 1 rectangles 2 trapezoids 3 scanlines 4 wide borders 5 styled borders 6 wide styled borders 7 interiors SeeAlso: #1448,#1449,#1450,#1451,#1453,#1454,#1455 Bitfields for text capabilities: Bit(s) Description (Table 1453) 0 output precision character 1 output precision stroke 2 clippping precision stroke 3 90-degree character rotation 4 arbitrary character rotation 5 independent X and Y scaling 6 double-size 7 integer scaling 8 continuous scaling 9 bold 10 italic 11 underline 12 strikeout 13 raster fonts 14 vector fonts 15 reserved SeeAlso: #1448,#1449,#1450,#1451,#1452,#1454,#1455 (Table 1454) Values for clipping capabilities: 00h none 01h clipping to rectangles SeeAlso: #1448,#1449,#1450,#1451,#1452,#1453,#1455 Bitfields for raster capabilities: Bit(s) Description (Table 1455) 0 simple bitBLT 1 device requires banding support 2 device requires scaling support 3 supports >64K bitmap SeeAlso: #1448,#1449,#1450,#1451,#1452,#1453,#1454 ----------2F18------------------------------- INT 2F U - MS-Manager AH = 18h ??? Return: ???