📄 vmm.h
字号:
/*****************************************************************************
*
* (C) Copyright MICROSOFT Corp., 1988-1990
*
* Title: VMM.H - Include file for Virtual Machine Manager
*
* Version: 1.00
*
* Date: 05-May-1988
*
* Author: RAL
*
*-----------------------------------------------------------------------------
*
* Change log:
*
* DATE REV DESCRIPTION
* ----------- --- -----------------------------------------------------------
* 05-May-1988 RAL Original
* 13-Nov-1991 PBS C version
* 17-Dec-1993 Adds Far East VxDs identifiers
*/
#ifndef _VMM_
#define _VMM_
/*
* NON Windows/386 Virtual Device sources can include this file to get
* some useful equates by declaring the symbol "Not_VxD" If this symbol
* is defined, then everything that has to do with the specifics of the
* 32 bit environment for virtual devices is removed. Useful equates
* include: device ID's, pushad structure, BeginDoc, EndDoc, BeginMsg,
* EndMsg, page table equates, etc.
*/
#define FALSE 0 // False
#define VMM_TRUE (~FALSE) // The opposite of False!
#define DEBLEVELRETAIL 0
#define DEBLEVELNORMAL 1
#define DEBLEVELMAX 2
#ifndef DEBLEVEL
#ifdef DEBUG
#define DEBLEVEL DEBLEVELNORMAL
#else
#define DEBLEVEL DEBLEVELRETAIL
#endif
#endif
#ifndef WIN31COMPAT
#define WIN40SERVICES
#ifndef WIN40COMPAT
#define WIN403SERVICES /*OPK-3 Services*/
#define WIN41SERVICES
#ifndef WIN41COMPAT
#define WIN49SERVICES
#endif
#endif
#endif
#ifdef WIN42SERVICES
#define WIN41SERVICES
#define WIN403SERVICES
#define WIN40SERVICES
#endif
#ifdef WIN41SERVICES
#define WIN403SERVICES
#define WIN40SERVICES
#endif
#ifdef WIN403SERVICES
#define WIN40SERVICES
#endif
/* ASM
ifdef MASM6
ifndef NO_MASM6_OPTIONS
;
; option switches necessary to build VMM/VxD sources with MASM 6
;
option oldmacros
ifndef NEWSTRUCTS ; define NEWSTRUCTS for MASM6 struct semantics
option oldstructs
endif
option noscoped
option segment:flat
option offset:flat
option proc:private
endif
endif
;
; These null macros are recognized by a utility program that produces
; documentation files.
;
IFDEF MASM6
BeginDoc MACRO
ENDM
EndDoc MACRO
ENDM
BeginMsg MACRO
ENDM
EndMsg MACRO
ENDM
ELSE
BeginDoc EQU <>
EndDoc EQU <>
BeginMsg EQU <>
EndMsg EQU <>
ENDIF
*/
/******************************************************************************
*
* EQUATES FOR REQUIRED DEVICES
*
* Device ID formulation note:
*
* The high bit of the device ID is reserved for future use.
* Microsoft reserves the device ID's 0-1FFh for standard devices. If
* an OEM VxD is a replacement for a standard VxD, then it must use the
* standard VxD ID.
*
* OEMS WHO WANT A VXD DEVICE ID ASSIGNED TO THEM,
* PLEASE CONTACT MICROSOFT PRODUCT SUPPORT. ID's are only required for
* devices which provide services, V86 API's or PM API's. Also, calling
* services or API's by VxD name is now supported in version 4.0, so an
* ID may not be necessary as long as a unique 8 character name is used.
*
*****************************************************************************/
#define UNDEFINED_DEVICE_ID 0x00000
#define VMM_DEVICE_ID 0x00001 /* Used for dynalink table */
#define DEBUG_DEVICE_ID 0x00002
#define VPICD_DEVICE_ID 0x00003
#define VDMAD_DEVICE_ID 0x00004
#define VTD_DEVICE_ID 0x00005
#define V86MMGR_DEVICE_ID 0x00006
#define PAGESWAP_DEVICE_ID 0x00007
#define PARITY_DEVICE_ID 0x00008
#define REBOOT_DEVICE_ID 0x00009
#define VDD_DEVICE_ID 0x0000A
#define VSD_DEVICE_ID 0x0000B
#define VMD_DEVICE_ID 0x0000C
#define VKD_DEVICE_ID 0x0000D
#define VCD_DEVICE_ID 0x0000E
#define VPD_DEVICE_ID 0x0000F
#define BLOCKDEV_DEVICE_ID 0x00010
#define IOS_DEVICE_ID BLOCKDEV_DEVICE_ID
#define VMCPD_DEVICE_ID 0x00011
#define EBIOS_DEVICE_ID 0x00012
#define BIOSXLAT_DEVICE_ID 0x00013
#define VNETBIOS_DEVICE_ID 0x00014
#define DOSMGR_DEVICE_ID 0x00015
#define WINLOAD_DEVICE_ID 0x00016
#define SHELL_DEVICE_ID 0x00017
#define VMPOLL_DEVICE_ID 0x00018
#define VPROD_DEVICE_ID 0x00019
#define DOSNET_DEVICE_ID 0x0001A
#define VFD_DEVICE_ID 0x0001B
#define VDD2_DEVICE_ID 0x0001C /* Secondary display adapter */
#define WINDEBUG_DEVICE_ID 0x0001D
#define TSRLOAD_DEVICE_ID 0x0001E /* TSR instance utility ID */
#define BIOSHOOK_DEVICE_ID 0x0001F /* Bios interrupt hooker VxD */
#define INT13_DEVICE_ID 0x00020
#define PAGEFILE_DEVICE_ID 0x00021 /* Paging File device */
#define SCSI_DEVICE_ID 0x00022 /* SCSI device */
#define MCA_POS_DEVICE_ID 0x00023 /* MCA_POS device */
#define SCSIFD_DEVICE_ID 0x00024 /* SCSI FastDisk device */
#define VPEND_DEVICE_ID 0x00025 /* Pen device */
#define APM_DEVICE_ID 0x00026 /* Power Management device */
#define VPOWERD_DEVICE_ID APM_DEVICE_ID /* We overload APM since we replace it */
#define VXDLDR_DEVICE_ID 0x00027 /* VxD Loader device */
#define NDIS_DEVICE_ID 0x00028 /* NDIS wrapper */
#define BIOS_EXT_DEVICE_ID 0x00029 /* Fix Broken BIOS device */
#define VWIN32_DEVICE_ID 0x0002A /* for new WIN32-VxD */
#define VCOMM_DEVICE_ID 0x0002B /* New COMM device driver */
#define SPOOLER_DEVICE_ID 0x0002C /* Local Spooler */
#define WIN32S_DEVICE_ID 0x0002D /* Win32S on Win 3.1 driver */
#define DEBUGCMD_DEVICE_ID 0x0002E /* Debug command extensions */
/* #define RESERVED_DEVICE_ID 0x0002F /* Not currently in use */
/* #define ATI_HELPER_DEVICE_ID 0x00030 /* grabbed by ATI */
/* 31-32 USED BY WFW NET COMPONENTS */
/* #define VNB_DEVICE_ID 0x00031 /* Netbeui of snowball */
/* #define SERVER_DEVICE_ID 0x00032 /* Server of snowball */
#define CONFIGMG_DEVICE_ID 0x00033 /* Configuration manager (Plug&Play) */
#define DWCFGMG_DEVICE_ID 0x00034 /* Configuration manager for win31 and DOS */
#define SCSIPORT_DEVICE_ID 0x00035 /* Dragon miniport loader/driver */
#define VFBACKUP_DEVICE_ID 0x00036 /* allows backup apps to work with NEC */
#define ENABLE_DEVICE_ID 0x00037 /* for access VxD */
#define VCOND_DEVICE_ID 0x00038 /* Virtual Console Device - check vcond.inc */
/* 39 used by WFW VFat Helper device */
/* 3A used by WFW E-FAX */
/* #define EFAX_DEVICE_ID 0x0003A /* EFAX VxD ID */
/* 3B used by MS-DOS 6.1 for the DblSpace VxD which has APIs */
/* #define DSVXD_DEVICE_ID 0x0003B /* Dbl Space VxD ID */
#define ISAPNP_DEVICE_ID 0x0003C /* ISA P&P Enumerator */
#define BIOS_DEVICE_ID 0x0003D /* BIOS P&P Enumerator */
/* #define WINSOCK_DEVICE_ID 0x0003E /* WinSockets */
/* #define WSIPX_DEVICE_ID 0x0003F /* WinSockets for IPX */
#define IFSMgr_Device_ID 0x00040 /* Installable File System Manager */
#define VCDFSD_DEVICE_ID 0x00041 /* Static CDFS ID */
#define MRCI2_DEVICE_ID 0x00042 /* DrvSpace compression engine */
#define PCI_DEVICE_ID 0x00043 /* PCI P&P Enumerator */
#define PELOADER_DEVICE_ID 0x00044 /* PE Image Loader */
#define EISA_DEVICE_ID 0x00045 /* EISA P&P Enumerator */
#define DRAGCLI_DEVICE_ID 0x00046 /* Dragon network client */
#define DRAGSRV_DEVICE_ID 0x00047 /* Dragon network server */
#define PERF_DEVICE_ID 0x00048 /* Config/stat info */
#define AWREDIR_DEVICE_ID 0x00049 /* AtWork Network FSD */
#define DDS_DEVICE_ID 0x0004A /* Device driver services */
#define NTKERN_DEVICE_ID 0x0004B /* NT kernel device id */
#define VDOSKEYD_DEVICE_ID 0x0004B /* DOSKEY device id */
#define ACPI_DEVICE_ID 0x0004C /* Advanced Configuration and Power Interfacec */
#define UDF_DEVICE_ID 0x0004D /* UDF FSD device id */
#define SMCLIB_DEVICE_ID 0x0004E /* Smart Card port driver */
#define NTMAP_DEVICE_ID 0x0004F /* WDM storage mapper */
#define NTMAPHLP_DEVICE_ID 0x00050
#define USBNTMAP_DEVICE_ID 0x00051 /* USB WDM storage mapper */
#define USBMPHLP_DEVICE_ID 0x00052 /* USB WDM storage helper */
/*
* Far East DOS support VxD ID
*/
#define ETEN_Device_ID 0x00060 /* ETEN DOS (Taiwan) driver */
#define CHBIOS_Device_ID 0x00061 /* CHBIOS DOS (Korean) driver */
#define VMSGD_Device_ID 0x00062 /* DBCS Message Mode driver */
#define VPPID_Device_ID 0x00063 /* PC-98 System Control PPI */
#define VIME_Device_ID 0x00064 /* Virtual DOS IME */
#define VHBIOSD_Device_ID 0x00065 /* HBIOS (Korean) for HWin31 driver */
#define VPBIOSD_DEVICE_ID 0x00066 /* PRC DOS driver */
#define VXDMON_DEVICE_ID 0x00067 /* SFP/SR IFSHook VxD */
#define BASEID_FOR_NAMEBASEDVXD 0xf000 /* Name based VxD IDs start here */
#define BASEID_FOR_NAMEBASEDVXD_MASK 0x0fff /* Mask to get the real vxd id */
/*
* Initialization order equates. Devices are initialized in order from
* LOWEST to HIGHEST. If 2 or more devices have the same initialization
* order value, then they are initialized in order of occurance, so a
* specific order is not guaranteed. Holes have been left to allow maximum
* flexibility in ordering devices.
*/
#define VMM_INIT_ORDER 0x000000000
#define DEBUG_INIT_ORDER 0x000000000 /* normally using 0 is bad */
#define DEBUGCMD_INIT_ORDER 0x000000000 /* but debug must be first */
#define PERF_INIT_ORDER 0x000900000
#define APM_INIT_ORDER 0x001000000
#define VPOWERD_INIT_ORDER APM_INIT_ORDER /* We overload APM since we replace it */
#define BIOSHOOK_INIT_ORDER 0x006000000
#define VPROD_INIT_ORDER 0x008000000
#define VPICD_INIT_ORDER 0x00C000000
#define VTD_INIT_ORDER 0x014000000
#define VWIN32_INIT_ORDER 0x014100000
#define VXDLDR_INIT_ORDER 0x016000000
#define NTKERN_INIT_ORDER 0x016200000 /* Must be after VxDLdr and before configmg */
#define CONFIGMG_INIT_ORDER 0x016400000 /* Must now be before enumerators */
#define ENUMERATOR_INIT_ORDER 0x016800000 /* Should be before IOS */
#define ISAPNP_INIT_ORDER ENUMERATOR_INIT_ORDER
#define EISA_INIT_ORDER ENUMERATOR_INIT_ORDER
#define PCI_INIT_ORDER ENUMERATOR_INIT_ORDER
#define BIOS_INIT_ORDER ENUMERATOR_INIT_ORDER+1 /* To simplify reenumeration */
#define ACPI_INIT_ORDER ENUMERATOR_INIT_ORDER+2 /* To simplify reenumeration */
#define NTMAP_INIT_ORDER ENUMERATOR_INIT_ORDER+3 /* To simplify reenumeration */
#define USBNTMAP_INIT_ORDER ENUMERATOR_INIT_ORDER+4 /* To simplify reenumeration */
#define VCDFSD_INIT_ORDER 0x016F00000
#define IOS_INIT_ORDER 0x017000000
#define PAGEFILE_INIT_ORDER 0x018000000
#define PAGESWAP_INIT_ORDER 0x01C000000
#define PARITY_INIT_ORDER 0x020000000
#define REBOOT_INIT_ORDER 0x024000000
#define EBIOS_INIT_ORDER 0x026000000
#define VDD_INIT_ORDER 0x028000000
#define VSD_INIT_ORDER 0x02C000000
#define VCD_INIT_ORDER 0x030000000
#define COMMDRVR_INIT_ORDER (VCD_INIT_ORDER - 1)
#define PRTCL_INIT_ORDER (COMMDRVR_INIT_ORDER - 2)
#define MODEM_INIT_ORDER (COMMDRVR_INIT_ORDER - 3)
#define PORT_INIT_ORDER (COMMDRVR_INIT_ORDER - 4)
#define VMD_INIT_ORDER 0x034000000
#define VKD_INIT_ORDER 0x038000000
#define VPD_INIT_ORDER 0x03C000000
#define BLOCKDEV_INIT_ORDER 0x040000000
#define MCA_POS_INIT_ORDER 0x041000000
#define SCSIFD_INIT_ORDER 0x041400000
#define SCSIMASTER_INIT_ORDER 0x041800000
#define INT13_INIT_ORDER 0x042000000
#define VMCPD_INIT_ORDER 0x048000000
#define BIOSXLAT_INIT_ORDER 0x050000000
#define VNETBIOS_INIT_ORDER 0x054000000
#define DOSMGR_INIT_ORDER 0x058000000
#define DOSNET_INIT_ORDER 0x05C000000
#define WINLOAD_INIT_ORDER 0x060000000
#define VMPOLL_INIT_ORDER 0x064000000
#define UNDEFINED_INIT_ORDER 0x080000000
#define VCOND_INIT_ORDER UNDEFINED_INIT_ORDER
#define WINDEBUG_INIT_ORDER 0x081000000
#define VDMAD_INIT_ORDER 0x090000000
#define V86MMGR_INIT_ORDER 0x0A0000000
#define IFSMgr_Init_Order 0x10000 + V86MMGR_Init_Order
#define FSD_Init_Order 0x00100 + IFSMgr_Init_Order
#define VFD_INIT_ORDER 0x50000 + IFSMgr_Init_Order
/* Device that must touch memory in 1st Mb at crit init (after V86mmgr) */
#define UNDEF_TOUCH_MEM_INIT_ORDER 0x0A8000000
#define SHELL_INIT_ORDER 0x0B0000000
/* ASM
;******************************************************************************
;
; Macro to cause a delay in between I/O accesses to the same device.
;
;------------------------------------------------------------------------------
IO_Delay macro
jmp $+2
ENDM
*/
#define VXD_FAILURE 0
#define VXD_SUCCESS 1
typedef ULONG HVM; /* VM handle typedef */
/*
* Registers as they appear on the stack after a PUSHAD.
*/
struct Pushad_Struc {
ULONG Pushad_EDI; /* Client's EDI */
ULONG Pushad_ESI; /* Client's ESI */
ULONG Pushad_EBP; /* Client's EBP */
ULONG Pushad_ESP; /* ESP before pushad */
ULONG Pushad_EBX; /* Client's EBX */
ULONG Pushad_EDX; /* Client's EDX */
ULONG Pushad_ECX; /* Client's ECX */
ULONG Pushad_EAX; /* Client's EAX */
};
/* XLATOFF */
#ifdef RC_INVOKED
#define NOBASEDEFS
#endif
#ifndef NOBASEDEFS
#pragma warning (disable:4209) // turn off redefinition warning
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
#pragma warning (default:4209) // turn off redefinition warning
#endif
#define GetVxDServiceOrdinal(service) __##service
#define Begin_Service_Table(device, seg) \
enum device##_SERVICES { \
device##_dummy = (device##_DEVICE_ID << 16) - 1,
#define Declare_Service(service, local) \
GetVxDServiceOrdinal(service),
#define Declare_SCService(service, args, local) \
GetVxDServiceOrdinal(service),
#define End_Service_Table(device, seg) \
Num_##device##_Services};
#define VXDINLINE static __inline
/* XLATON */
#ifndef Not_VxD
/* XLATOFF */
#define VxD_LOCKED_CODE_SEG code_seg("_LTEXT", "LCODE")
#define VxD_LOCKED_DATA_SEG data_seg("_LDATA", "LCODE")
#define VxD_INIT_CODE_SEG code_seg("_ITEXT", "ICODE")
#define VxD_INIT_DATA_SEG data_seg("_IDATA", "ICODE")
#define VxD_ICODE_SEG code_seg("_ITEXT", "ICODE")
#define VxD_IDATA_SEG data_seg("_IDATA", "ICODE")
#define VxD_PAGEABLE_CODE_SEG code_seg("_PTEXT", "PCODE")
#define VxD_PAGEABLE_DATA_SEG data_seg("_PDATA", "PDATA")
#define VxD_STATIC_CODE_SEG code_seg("_STEXT", "SCODE")
#define VxD_STATIC_DATA_SEG data_seg("_SDATA", "SCODE")
#define VxD_DEBUG_ONLY_CODE_SEG code_seg("_DB1CODE", "DBOCODE")
#define VxD_DEBUG_ONLY_DATA_SEG data_seg("_DB2DATA", "DBOCODE")
#define VxD_SYSEXIT_CODE_SEG code_seg("SYSEXIT", "SYSEXITCODE")
#define VxD_INT21_CODE_SEG code_seg("INT21", "INT21CODE")
#define VxD_RARE_CODE_SEG code_seg("RARE", "RARECODE")
#define VxD_W16_CODE_SEG code_seg("W16", "W16CODE")
#define VxD_W32_CODE_SEG code_seg("W32", "W32CODE")
#define VxD_VMCREATE_CODE_SEG code_seg("VMCREATE", "VMCREATECODE")
#define VxD_VMDESTROY_CODE_SEG code_seg("VMDESTROY", "VMDESTROYCODE")
#define VxD_THCREATE_CODE_SEG code_seg("THCREATE", "THCREATECODE")
#define VxD_THDESTROY_CODE_SEG code_seg("THDESTROY", "THDESTROYCODE")
#define VxD_VMSUSPEND_CODE_SEG code_seg("VMSUSPEND", "VMSUSPENDCODE")
#define VxD_VMRESUME_CODE_SEG code_seg("VMRESUME", "VMRESUMECODE")
#define VxD_PNP_CODE_SEG code_seg("PNP", "PNPCODE")
#define VxD_DOSVM_CODE_SEG code_seg("DOSVM", "DOSVMCODE")
#define VxD_LOCKABLE_CODE_SEG code_seg("LOCKABLE", "LOCKABLECODE")
#define VxD_LOCKABLE_DATA_SEG data_seg("LOCKABLE_DATA", "LOCKABLECODE")
#define VxD_LOCKED_CONST_SEG const_seg("_LCONST", "LCODE")
#define VxD_INIT_CONST_SEG const_seg("_ICONST", "ICODE")
#define VxD_PAGEABLE_CONST_SEG const_seg("_PCONST", "PCODE")
#define VxD_LOCKABLE_CONST_SEG const_seg("LOCKABLE_CONST", "LOCKABLECODE")
/* XLATON */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -