windows-nt/Source/XPSP1/NT/base/mvdm/meinc/int2fapi.h

216 lines
9.3 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/******************************************************************************
*
* (C) Copyright MICROSOFT Corp., 1989-1990
*
* Title: INT2FAPI.INC - Windows/386 V86 Application Program Interface
*
* Version: 3.00
*
* Date: 10-Mar-1989
*
* Author: RAL
*
*-----------------------------------------------------------------------------
*
* Change log:
*
* DATE REV DESCRIPTION
* ----------- --- ----------------------------------------------------------
* 10-Mar-1989 RAL Original for 3.0
* 07-Apr-1989 RAL Added device broadcast equate
* 19-Jun-1992 RJC Convert to H file
*
*=============================================================================
*
* For information on these APIs please refer to the Windows/386 DDK
* appendix on the Int 2Fh Application Program Interface.
*
*****************************************************************************/
/*
* Interrupt 2Fh is used for Windows/386 API calls.
*/
#define W386_API_Int 0x2F
/*
* All Windows/386 API Int 2Fh calls must be issued with AH = 16h
*/
#define W386_Int_Multiplex 0x16
/*
* Values for AL for all Windows/386 API calls
*/
#define W386_Get_Version 0x00 /* Install check/Get version */
#define W386_Old_Get_VMID_API 0x02 /* Version 2.xx get VMID API call */
#define W386_Startup 0x05 /* Broadcast when Win386 starting */
#define W386_Exit 0x06 /* Broadcast when Win386 exited */
#define W386_Device_Broadcast 0x07 /* Broadcast by virtual device */
#define W386_Startup_Complete 0x08 /* Broadcast when Win386 start is complete */
#define W386_Begin_Exit 0x09 /* Broadcast when Win386 is starting */
/* a NORMAL exit sequence */
#define W386_Windows_ID 0x0A /* Identify windows ver/type */
#define W386_TSR_Identify 0x0B /* Identify TSRs */
#define W386_ROM_Detect 0x0C /* Used by ROM win to detect ROMs */
#define W386_WDEB 0x0D /* Used by wdeb386 */
#define W386_Logo 0x0E /* IO.SYS service for logo management */
#define W386_INT10 0x0F /* IO.SYS service to replace INT 10h hook */
#define W386_Get_Shell 0x11 /* IO.SYS service to return shell info */
#define W386_Get_BIOS_Data 0x12 /* IO.SYS service to return IO.SYS data */
#define W386_Get_SYSDAT_Path 0x13 /* IO.SYS service to return path to SYSTEM.DAT */
#define W386_Set_SYSDAT_Path 0x14 /* IO.SYS service to set path to SYSTEM.DAT */
#define SAVE32_ID 0x1615 /* TSR Id for SAVE32.COM to save 32bit registers */
#define W386_Sleep 0x7F /* Call Time_Slice_Sleep (DX=#ms) */
#define W386_Release_Time 0x80 /* Release cur VM's time-slice */
#define W386_Begin_Critical 0x81 /* Begin critical section */
#define W386_End_Critical 0x82 /* End critical section */
#define W386_Get_Cur_VMID 0x83 /* Returns BX = ID of current VM */
#define W386_Get_Device_API 0x84 /* Returns ES:DI -> Device API */
#define W386_Switch_And_Call 0x85 /* Change VMs and call-back */
#define W386_Test_Int31_Avail 0x86 /* Returns AX=0 if Int 31 avail */
#define W386_Get_PM_Switch_Addr 0x87 /* Get call-back addr for PM */
#define W386_Get_LDT_Base_Sel 0x88 /* Get selector to LDT */
#define W386_Win_Kernel_Idle 0x89 /* Windows kernel idle call */
#define W386_DPMI_Extension 0x8A /* DPMI extension Int 2Fh */
#define W386_Set_Focus 0x8B /* Set focus to specified VM */
#define W386_Restart_Cmd 0x8C /* Win.Com execs specified app */
#define W386_Get_Win32_API 0x8D /* Get Win32 API callback */
#define W386_VM_Title 0x8E /* Assorted VM title APIs */
#define W386_VM_Close 0x8F /* Assorted VM close APIs */
#define W386_Return_RMD 0x90 /* return RMD list */
/*
* Structure for real mode device initialization API.
*/
struct Win386_Startup_Info_Struc {
BYTE SIS_Version[2]; /* AINIT <04h,01h> Structure version */
DWORD SIS_Next_Ptr; /* Seg:Off of next dev in list */
DWORD SIS_Virt_Dev_File_Ptr; /* INIT <0> PSZ of file name to load */
DWORD SIS_Reference_Data; /* Data to be passed to device */
DWORD SIS_Instance_Data_Ptr; /* INIT <0> Ptr to instance data list */
DWORD SIS_Opt_Instance_Data_Ptr;/* INIT <0> Ptr to opt. instance data list */
DWORD SIS_Reclaim_Data_Ptr; /* INIT <0> Ptr to reclaimable data list */
};
/*
* Structure for instance data list. (List terminated with 0 dword).
*/
struct Instance_Item_Struc {
DWORD IIS_Ptr; /* Seg:Off of instance item */
WORD IIS_Size; /* Size of instance item in bytes */
};
/*
* Structure for reclaim data list. (List terminated with 0 Seg).
*/
struct Reclaim_Item_Struc {
WORD RIS_Seg; /* Seg of reclaimable item */
WORD RIS_Paras; /* Size of item, in paragraphs */
DWORD RIS_HookTable; /* Seg:Off of Reclaim_Hook_Table (0 if none) */
WORD RIS_Flags; /* See RIS_* equates (below) */
};
#define RIS_RECLAIM 0x0001 /* segment can be reclaimed during Init_Complete */
#define RIS_RESTORE 0x0002 /* segment contents must be restored prior to System_Exit */
#define RIS_DOSARENA 0x0004 /* segment is a DOS memory block, add to DOS memory pool */
/*
* NOTE: If RIS_HookTable is non-zero, then it is interpreted as a
* pointer to a Reclaim_Hook_Table, which provides a means
* for the system to automatically unhook a component in a reclaimable
* memory block from the rest of the system. It is also IMPORTANT to note
* that if a Reclaim_Hook_Table is specified, then the memory block will
* not be reclaimed UNLESS the RHT_DISABLED bit is also set. In other
* words, if the hooks associated with a block have not been disabled
* by the time the system attempts to reclaim the memory (Init_Complete),
* then the memory containing those hooks cannot be reclaimed.
*
* RHT_Num_Hooks is the number of hooks to be unhooked/rehooked at
* reclaim/restore time, RHT_Low_Seg is the segment of "stub code"
* that is always resident, RHT_High_Seg is the segment of "driver code"
* that is contained within (or identical to) RIS_Seg, and the entire
* Reclaim_Hook_Table is followed by an array of Reclaim_Hook_Entry
* structures, which contain pairs of offsets to dword vector addresses
* that must be exchanged in order to disable or re-enable the hooks.
* For each pair of offsets, the first is relative to RHT_Low_Seg and the
* second is relative to RHT_High_Seg. RHT_Num_Hooks is the number of
* Reclaim_Hook_Entry structures in the array.
*
* The system will only unhook all the hooks in a Reclaim_Hook_Table if
* RHT_DISABLED bit is set and RHT_UNHOOKED is NOT set in RHT_Flags (meaning
* that a Vxd or other component has assumed responsibility for the code
* inside the hooks and has not unhooked them itself).
*
* Since the Reclaim_Hook_Table must be inside the segment being reclaimed,
* it follows that unhooking will occur before memory reclamation, and that
* memory restoration will occur before re-hooking.
*
* VxDs are free to perform their own real-mode vector hooking/unhooking
* on their own. This mechanism is used by the DBLSPACE/DRVSPACE drivers,
* and is simply exported as a convenience for other drivers.
*/
/*
* Structure for reclaim hook table.
*/
struct Reclaim_Hook_Table {
WORD RHT_Num_Hooks; /* number of RHE entries following */
WORD RHT_Low_Seg; /* segment each RHE_Low_Off is relative to */
WORD RHT_High_Seg; /* segment each RHE_High_Off is relative to */
WORD RHT_Flags; /* see RHT_* equates (below) */
};
#define RHT_DISABLED 0x0001 /* hooks are disabled, can be unhooked now */
#define RHT_UNHOOKED 0x0002 /* hooks are currently unhooked */
/*
* Structure for reclaim hook entries. There are RHT_Num_Hooks copies
* of this structure immediately following the Reclaim_Hook_Table.
*/
struct Reclaim_Hook_Entry {
WORD RHE_Low_Off;
WORD RHE_High_Off;
};
/*
* Structure for return RMD API. See RMD.H for RMD definitions.
*/
struct Return_RMD_Struc {
DWORD RRS_RMD; /* Seg:Off of rmd chain */
DWORD RRS_Next_Ptr; /* Seg:Off of next RMD chain in list */
};
/*
* Flags passed to the Win_Kernel_Idle call to indicate state of Windows
* in the BX register.
*/
#define Win_Idle_Mouse_Busy 1
#define Win_Idle_Mouse_Busy_Bit 0
/*
* Structure for TSR <-> Windows communication
* (W386_TSR_Identify call, AL=0Bh)
*/
struct TSR_Info_Struc {
DWORD TSR_Next;
WORD TSR_PSP_Segment;
WORD TSR_API_Ver_ID; /* INIT <100h> */
WORD TSR_Exec_Flags; /* INIT <0> */
WORD TSR_Exec_Cmd_Show; /* INIT <0> */
DWORD TSR_Exec_Cmd; /* INIT <0> */
BYTE TSR_Reserved[4]; /* INIT <0> */
DWORD TSR_ID_Block; /* INIT <0> */
DWORD TSR_Data_Block; /* INIT <0> */
};
/*
* TSR_Exec_Flags equates
*/
#define TSR_WINEXEC 1
#define TSR_LOADLIBRARY 2
#define TSR_OPENDRIVER 4