📄 vmm.h
字号:
VMM_Service (Enable_Global_Trapping)
VMM_Service (Enable_Local_Trapping)
VMM_Service (Disable_Global_Trapping)
VMM_Service (Disable_Local_Trapping)
// Linked List Abstract Data Type Services
VMM_Service (List_Create)
VMM_Service (List_Destroy)
VMM_Service (List_Allocate)
VMM_Service (List_Attach)
VMM_Service (List_Attach_Tail)
VMM_Service (List_Insert)
VMM_Service (List_Remove)
VMM_Service (List_Deallocate)
VMM_Service (List_Get_First)
VMM_Service (List_Get_Next)
VMM_Service (List_Remove_First)
/*ENDMACROS*/
/*
* Flags used by List_Create
*/
#define LF_ASYNC_BIT 0
#define LF_ASYNC (1 << LF_ASYNC_BIT)
#define LF_USE_HEAP_BIT 1
#define LF_USE_HEAP (1 << LF_USE_HEAP_BIT)
#define LF_ALLOC_ERROR_BIT 2
#define LF_ALLOC_ERROR (1 << LF_ALLOC_ERROR_BIT)
/*
* Swappable lists must use the heap.
*/
#define LF_SWAP (LF_USE_HEAP + (1 << 3))
/******************************************************************************
* I N I T I A L I Z A T I O N P R O C E D U R E S
******************************************************************************/
// Instance data manager
/*MACROS*/
VMM_Service (_AddInstanceItem)
// System structure data manager
VMM_Service (_Allocate_Device_CB_Area)
VMM_Service (_Allocate_Global_V86_Data_Area, VMM_ICODE)
VMM_Service (_Allocate_Temp_V86_Data_Area)
VMM_Service (_Free_Temp_V86_Data_Area)
/*ENDMACROS*/
/*
* Flag bits for _Allocate_Global_V86_Data_Area
*/
#define GVDAWordAlign 0x00000001
#define GVDADWordAlign 0x00000002
#define GVDAParaAlign 0x00000004
#define GVDAPageAlign 0x00000008
#define GVDAInstance 0x00000100
#define GVDAZeroInit 0x00000200
#define GVDAReclaim 0x00000400
#define GVDAInquire 0x00000800
#define GVDAHighSysCritOK 0x00001000
#define GVDAOptInstance 0x00002000
#define GVDAForceLow 0x00004000
/*
* Flag bits for _Allocate_Temp_V86_Data_Area
*/
#define TVDANeedTilInitComplete 0x00000001
// Initialization information calls (win.ini and environment parameters)
/*MACROS*/
VMM_Service (Get_Profile_Decimal_Int, VMM_ICODE)
VMM_Service (Convert_Decimal_String, VMM_ICODE)
VMM_Service (Get_Profile_Fixed_Point, VMM_ICODE)
VMM_Service (Convert_Fixed_Point_String, VMM_ICODE)
VMM_Service (Get_Profile_Hex_Int, VMM_ICODE)
VMM_Service (Convert_Hex_String, VMM_ICODE)
VMM_Service (Get_Profile_Boolean, VMM_ICODE)
VMM_Service (Convert_Boolean_String, VMM_ICODE)
VMM_Service (Get_Profile_String, VMM_ICODE)
VMM_Service (Get_Next_Profile_String, VMM_ICODE)
VMM_Service (Get_Environment_String, VMM_ICODE)
VMM_Service (Get_Exec_Path, VMM_ICODE)
VMM_Service (Get_Config_Directory, VMM_ICODE)
VMM_Service (OpenFile, VMM_ICODE)
/*ENDMACROS*/
// OpenFile, if called after init, must point EDI to a buffer of at least
// this size.
#define VMM_OPENFILE_BUF_SIZE 260
/*MACROS*/
VMM_Service (Get_PSP_Segment, VMM_ICODE)
VMM_Service (GetDOSVectors, VMM_ICODE)
VMM_Service (Get_Machine_Info)
/*ENDMACROS*/
#define GMIF_80486_BIT 0x10
#define GMIF_80486 (1 << GMIF_80486_BIT)
#define GMIF_PCXT_BIT 0x11
#define GMIF_PCXT (1 << GMIF_PCXT_BIT)
#define GMIF_MCA_BIT 0x12
#define GMIF_MCA (1 << GMIF_MCA_BIT)
#define GMIF_EISA_BIT 0x13
#define GMIF_EISA (1 << GMIF_EISA_BIT)
#define GMIF_CPUID_BIT 0x14
#define GMIF_CPUID (1 << GMIF_CPUID_BIT)
#define GMIF_80586_BIT 0x15
#define GMIF_80586 (1 << GMIF_80586_BIT)
// Following service is not restricted to initialization
/*MACROS*/
VMM_Service (GetSet_HMA_Info)
VMM_Service (RESERVED_Set_System_Exit_Code, RESERVED) // Obsoleted in 4.90
VMM_Service (Fatal_Error_Handler)
VMM_Service (Fatal_Memory_Error)
// Called by VTD only
VMM_Service (Update_System_Clock)
/******************************************************************************
* D E B U G G I N G E X T E R N S
******************************************************************************/
VMM_Service (Test_Debug_Installed) // Valid call in retail also
VMM_Service (Out_Debug_String)
VMM_Service (Out_Debug_Chr)
VMM_Service (In_Debug_Chr)
VMM_Service (Debug_Convert_Hex_Binary)
VMM_Service (Debug_Convert_Hex_Decimal)
VMM_Service (Debug_Test_Valid_Handle)
VMM_Service (Validate_Client_Ptr)
VMM_Service (Test_Reenter)
VMM_Service (Queue_Debug_String)
VMM_Service (Log_Proc_Call)
VMM_Service (Debug_Test_Cur_VM)
VMM_Service (Get_PM_Int_Type)
VMM_Service (Set_PM_Int_Type)
VMM_Service (Get_Last_Updated_System_Time)
VMM_Service (Get_Last_Updated_VM_Exec_Time)
VMM_Service (Test_DBCS_Lead_Byte) // for DBCS Enabling
/*ENDMACROS*/
/* ASM
.errnz @@Test_DBCS_Lead_Byte - 100D1h ; VMM service table changed above this service
*/
/*************************************************************************
*************************************************************************
* END OF 3.00 SERVICE TABLE MUST NOT SHUFFLE SERVICES BEFORE THIS POINT
* FOR COMPATIBILITY.
*************************************************************************
*************************************************************************/
/*MACROS*/
VMM_Service (_AddFreePhysPage, VMM_ICODE)
VMM_Service (_PageResetHandlePAddr)
VMM_Service (_SetLastV86Page, VMM_ICODE)
VMM_Service (_GetLastV86Page)
VMM_Service (_MapFreePhysReg)
VMM_Service (_UnmapFreePhysReg)
VMM_Service (_XchgFreePhysReg)
VMM_Service (_SetFreePhysRegCalBk, VMM_ICODE)
VMM_Service (Get_Next_Arena, VMM_ICODE)
VMM_Service (Get_Name_Of_Ugly_TSR, VMM_ICODE)
VMM_Service (Get_Debug_Options, VMM_ICODE)
/*ENDMACROS*/
/*
* Flags for AddFreePhysPage
*/
// 4.90: AFPP_SWAPOUT is no longer interesting: we no longer restore to DOS
//#define AFPP_SWAPOUT 0x0001 // physical memory that must be swapped out
// // and subsequently restored at system exit
#define AFPP_MAPNUL 0x0002 // 4.90: Memory must be map nul (for V86 pages)
/*
* Flags for PageChangePager
*/
#define PCP_CHANGEPAGER 0x1 // change the pager for the page range
#define PCP_CHANGEPAGERDATA 0x2 // change the pager data dword for the pages
#define PCP_VIRGINONLY 0x4 // make the above changes to virgin pages only
/*
* Bits for the ECX return of Get_Next_Arena
*/
#define GNA_HIDOSLINKED 0x0002 // High DOS arenas linked when WIN386 started
#define GNA_ISHIGHDOS 0x0004 // High DOS arenas do exist
/*MACROS*/
VMM_Service (Set_Physical_HMA_Alias, VMM_ICODE)
VMM_Service (_GetGlblRng0V86IntBase, VMM_ICODE)
VMM_Service (_Add_Global_V86_Data_Area, VMM_ICODE)
VMM_Service (GetSetDetailedVMError)
/*ENDMACROS*/
/*
* Error code values for the GetSetDetailedVMError service. PLEASE NOTE
* that all of these error code values need to have bits set in the high
* word. This is to prevent collisions with other VMDOSAPP standard errors.
* Also, the low word must be non-zero.
*
* First set of errors (high word = 0001) are intended to be used
* when a VM is CRASHED (VNE_Crashed or VNE_Nuked bit set on
* VM_Not_Executeable).
*
* PLEASE NOTE that each of these errors (high word == 0001) actually
* has two forms:
*
* 0001xxxxh
* 8001xxxxh
*
* The device which sets the error initially always sets the error with
* the high bit CLEAR. The system will then optionally set the high bit
* depending on the result of the attempt to "nicely" crash the VM. This
* bit allows the system to tell the user whether the crash is likely or
* unlikely to destabalize the system.
*/
#define GSDVME_PRIVINST 0x00010001 /* Privledged instruction */
#define GSDVME_INVALINST 0x00010002 /* Invalid instruction */
#define GSDVME_INVALPGFLT 0x00010003 /* Invalid page fault */
#define GSDVME_INVALGPFLT 0x00010004 /* Invalid GP fault */
#define GSDVME_INVALFLT 0x00010005 /* Unspecified invalid fault */
#define GSDVME_USERNUKE 0x00010006 /* User requested NUKE of VM */
#define GSDVME_DEVNUKE 0x00010007 /* Device specific problem */
#define GSDVME_DEVNUKEHDWR 0x00010008 /* Device specific problem:
* invalid hardware fiddling
* by VM (invalid I/O)
*/
#define GSDVME_NUKENOMSG 0x00010009 /* Supress standard messages:
* SHELL_Message used for
* custom msg.
*/
#define GSDVME_OKNUKEMASK 0x80000000 /* "Nice nuke" bit */
/*
* Second set of errors (high word = 0002) are intended to be used
* when a VM start up is failed (VNE_CreateFail, VNE_CrInitFail, or
* VNE_InitFail bit set on VM_Not_Executeable).
*/
#define GSDVME_INSMEMV86 0x00020001 /* base V86 mem - V86MMGR */
#define GSDVME_INSV86SPACE 0x00020002 /* Kb Req too large - V86MMGR */
#define GSDVME_INSMEMXMS 0x00020003 /* XMS Kb Req - V86MMGR */
#define GSDVME_INSMEMEMS 0x00020004 /* EMS Kb Req - V86MMGR */
#define GSDVME_INSMEMV86HI 0x00020005 /* Hi DOS V86 mem - DOSMGR
* V86MMGR
*/
#define GSDVME_INSMEMVID 0x00020006 /* Base Video mem - VDD */
#define GSDVME_INSMEMVM 0x00020007 /* Base VM mem - VMM
* CB, Inst Buffer
*/
#define GSDVME_INSMEMDEV 0x00020008 /* Couldn't alloc base VM
* memory for device.
*/
#define GSDVME_CRTNOMSG 0x00020009 /* Supress standard messages:
* SHELL_Message used for
* custom msg.
*/
/*MACROS*/
VMM_Service (Is_Debug_Chr)
// Mono_Out services
VMM_Service (Clear_Mono_Screen)
VMM_Service (Out_Mono_Chr)
VMM_Service (Out_Mono_String)
VMM_Service (Set_Mono_Cur_Pos)
VMM_Service (Get_Mono_Cur_Pos)
VMM_Service (Get_Mono_Chr)
// Service locates a byte in ROM
VMM_Service (Locate_Byte_In_ROM, VMM_ICODE)
VMM_Service (Hook_Invalid_Page_Fault)
VMM_Service (Unhook_Invalid_Page_Fault)
/*ENDMACROS*/
/*
* Flag bits of IPF_Flags
*/
#define IPF_PGDIR 0x00000001 /* Page directory entry not-present */
#define IPF_V86PG 0x00000002 /* Unexpected not present Page in V86 */
#define IPF_V86PGH 0x00000004 /* Like IPF_V86PG at high linear */
#define IPF_INVTYP 0x00000008 /* page has invalid not present type */
#define IPF_PGERR 0x00000010 /* pageswap device failure */
#define IPF_REFLT 0x00000020 /* re-entrant page fault */
#define IPF_VMM 0x00000040 /* Page fault caused by a VxD */
#define IPF_PM 0x00000080 /* Page fault by VM in Prot Mode */
#define IPF_V86 0x00000100 /* Page fault by VM in V86 Mode */
/*MACROS*/
VMM_Service (RESERVED_Set_Delete_On_Exit_File, RESERVED) /* STOP WORKING IN 4.90 */
VMM_Service (Close_VM)
/*ENDMACROS*/
/*
* Flags for Close_VM service
*/
#define CVF_CONTINUE_EXEC_BIT 0
#define CVF_CONTINUE_EXEC (1 << CVF_CONTINUE_EXEC_BIT)
/*MACROS*/
VMM_Service (Enable_Touch_1st_Meg) // Debugging only
VMM_Service (Disable_Touch_1st_Meg) // Debugging only
VMM_Service (Install_Exception_Handler)
VMM_Service (Remove_Exception_Handler)
VMM_Service (Get_Crit_Status_No_Block)
/*ENDMACROS*/
/* ASM
; Check if VMM service table has changed above this service
.errnz @@Get_Crit_Status_No_Block - 100F1h
*/
#ifdef WIN40SERVICES
/*************************************************************************
*************************************************************************
*
* END OF 3.10 SERVICE TABLE MUST NOT SHUFFLE SERVICES BEFORE THIS POINT
* FOR COMPATIBILITY.
*************************************************************************
*************************************************************************/
/*MACROS*/
VMM_Service (_GetLastUpdatedThreadExecTime)
VMM_Service (_Trace_Out_Service)
VMM_Service (_Debug_Out_Service)
VMM_Service (_Debug_Flags_Service)
/*ENDMACROS*/
#endif /* WIN40SERVICES */
/*
* Flags for _Debug_Flags_Service service.
*
* Don't change these unless you really really know what you're doing.
* We need to define these even if we are in WIN31COMPAT mode.
*/
#define DFS_LOG_BIT 0
#define DFS_LOG (1 << DFS_LOG_BIT)
#define DFS_PROFILE_BIT 1
#define DFS_PROFILE (1 << DFS_PROFILE_BIT)
#define DFS_TEST_CLD_BIT 2
#define DFS_TEST_CLD (1 << DFS_TEST_CLD_BIT)
#define DFS_NEVER_REENTER_BIT 3
#define DFS_NEVER_REENTER (1 << DFS_NEVER_REENTER_BIT)
#define DFS_TEST_REENTER_BIT 4
#define DFS_TEST_REENTER (1 << DFS_TEST_REENTER_BIT)
#define DFS_NOT_SWAPPING_BIT 5
#define DFS_NOT_SWAPPING (1 << DFS_NOT_SWAPPING_BIT)
#define DFS_TEST_BLOCK_BIT 6
#define DFS_TEST_BLOCK (1 << DFS_TEST_BLOCK_BIT)
#define DFS_RARE_SERVICES 0xFFFFFF80
#define DFS_EXIT_NOBLOCK (DFS_RARE_SERVICES+0)
#define DFS_ENTER_NOBLOCK (DFS_RARE_SERVICES+DFS_TEST_BLOCK)
#define DFS_TEST_NEST_EXEC (DFS_RARE_SERVICES+1)
#define DFS_WIMP_DEBUG (DFS_RARE_SERVICES+2)
#ifdef WIN40SERVICES
/*MACROS*/
VMM_Service (VMMAddImportModuleName)
VMM_Service (VMM_Add_DDB)
VMM_Service (VMM_Remove_DDB)
VMM_Service (Test_VM_Ints_Enabled)
VMM_Service (_BlockOnID)
VMM_Service (Schedule_Thread_Event)
VMM_Service (Cancel_Thread_Event)
VMM_Service (Set_Thread_Time_Out)
VMM_Service (Set_Async_Time_Out)
VMM_Service (_AllocateThreadDataSlot)
VMM_Service (_FreeThreadDataSlot)
/*ENDMACROS*/
/*
* Flag equates for _CreateMutex
*/
#define MUTEX_MUST_COMPLETE 1L
#define MUTEX_NO_CLEANUP_THREAD_STATE 2L
/*MACROS*/
VMM_Service (_CreateMutex)
VMM_Service (_DestroyMutex)
VMM_Service (_GetMutexOwner)
VMM_Service (Call_When_Thread_Switched)
VMM_Service (VMMCreateThread)
VMM_Service (_GetThreadExecTime)
VMM_Service (VMMTerminateThread)
VMM_Service (Get_Cur_Thread_Handle)
VMM_Service (Test_Cur_Thread_Handle)
VMM_Service (Get_Sys_Thread_Handle)
VMM_Service (Test_Sys_Thread_Handle)
VMM_Service (Validate_Thread_Handle)
VMM_Servi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -