mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-22 22:56:53 +03:00
812bae4a84
git-svn-id: svn://kolibrios.org@2783 a494cfbc-eb01-0410-851d-a64ba20cac60
4523 lines
91 KiB
Plaintext
4523 lines
91 KiB
Plaintext
ifndef _VMM_
|
|
_VMM_ EQU 1
|
|
FALSE EQU 0
|
|
VMM_TRUE EQU (NOT FALSE)
|
|
DEBLEVELRETAIL EQU 0
|
|
DEBLEVELNORMAL EQU 1
|
|
DEBLEVELMAX EQU 2
|
|
ifndef DEBLEVEL
|
|
ifdef DEBUG
|
|
DEBLEVEL EQU DEBLEVELNORMAL
|
|
else
|
|
DEBLEVEL EQU DEBLEVELRETAIL
|
|
endif
|
|
endif
|
|
ifndef WIN31COMPAT
|
|
WIN40SERVICES EQU 1
|
|
WIN403SERVICES EQU 1
|
|
endif
|
|
ifndef WIN40COMPAT
|
|
WIN41SERVICES EQU 1
|
|
endif
|
|
ifdef MASM6
|
|
ifndef NO_MASM6_OPTIONS
|
|
|
|
|
|
|
|
option oldmacros
|
|
ifndef NEWSTRUCTS
|
|
option oldstructs
|
|
endif
|
|
option noscoped
|
|
option segment:flat
|
|
option offset:flat
|
|
option proc:private
|
|
endif
|
|
endif
|
|
|
|
|
|
|
|
|
|
IFDEF MASM6
|
|
BeginDoc MACRO
|
|
ENDM
|
|
EndDoc MACRO
|
|
ENDM
|
|
|
|
BeginMsg MACRO
|
|
ENDM
|
|
EndMsg MACRO
|
|
ENDM
|
|
ELSE
|
|
BeginDoc EQU <>
|
|
EndDoc EQU <>
|
|
|
|
BeginMsg EQU <>
|
|
EndMsg EQU <>
|
|
ENDIF
|
|
|
|
UNDEFINED_DEVICE_ID EQU 00000H
|
|
VMM_DEVICE_ID EQU 00001H
|
|
DEBUG_DEVICE_ID EQU 00002H
|
|
VPICD_DEVICE_ID EQU 00003H
|
|
VDMAD_DEVICE_ID EQU 00004H
|
|
VTD_DEVICE_ID EQU 00005H
|
|
V86MMGR_DEVICE_ID EQU 00006H
|
|
PAGESWAP_DEVICE_ID EQU 00007H
|
|
PARITY_DEVICE_ID EQU 00008H
|
|
REBOOT_DEVICE_ID EQU 00009H
|
|
VDD_DEVICE_ID EQU 0000AH
|
|
VSD_DEVICE_ID EQU 0000BH
|
|
VMD_DEVICE_ID EQU 0000CH
|
|
VKD_DEVICE_ID EQU 0000DH
|
|
VCD_DEVICE_ID EQU 0000EH
|
|
VPD_DEVICE_ID EQU 0000FH
|
|
BLOCKDEV_DEVICE_ID EQU 00010H
|
|
VMCPD_DEVICE_ID EQU 00011H
|
|
EBIOS_DEVICE_ID EQU 00012H
|
|
BIOSXLAT_DEVICE_ID EQU 00013H
|
|
VNETBIOS_DEVICE_ID EQU 00014H
|
|
DOSMGR_DEVICE_ID EQU 00015H
|
|
WINLOAD_DEVICE_ID EQU 00016H
|
|
SHELL_DEVICE_ID EQU 00017H
|
|
VMPOLL_DEVICE_ID EQU 00018H
|
|
VPROD_DEVICE_ID EQU 00019H
|
|
DOSNET_DEVICE_ID EQU 0001AH
|
|
VFD_DEVICE_ID EQU 0001BH
|
|
VDD2_DEVICE_ID EQU 0001CH
|
|
WINDEBUG_DEVICE_ID EQU 0001DH
|
|
TSRLOAD_DEVICE_ID EQU 0001EH
|
|
BIOSHOOK_DEVICE_ID EQU 0001FH
|
|
INT13_DEVICE_ID EQU 00020H
|
|
PAGEFILE_DEVICE_ID EQU 00021H
|
|
SCSI_DEVICE_ID EQU 00022H
|
|
MCA_POS_DEVICE_ID EQU 00023H
|
|
SCSIFD_DEVICE_ID EQU 00024H
|
|
VPEND_DEVICE_ID EQU 00025H
|
|
APM_DEVICE_ID EQU 00026H
|
|
VPOWERD_DEVICE_ID EQU APM_DEVICE_ID
|
|
VXDLDR_DEVICE_ID EQU 00027H
|
|
NDIS_DEVICE_ID EQU 00028H
|
|
BIOS_EXT_DEVICE_ID EQU 00029H
|
|
VWIN32_DEVICE_ID EQU 0002AH
|
|
VCOMM_DEVICE_ID EQU 0002BH
|
|
SPOOLER_DEVICE_ID EQU 0002CH
|
|
WIN32S_DEVICE_ID EQU 0002DH
|
|
DEBUGCMD_DEVICE_ID EQU 0002EH
|
|
CONFIGMG_DEVICE_ID EQU 00033H
|
|
DWCFGMG_DEVICE_ID EQU 00034H
|
|
SCSIPORT_DEVICE_ID EQU 00035H
|
|
VFBACKUP_DEVICE_ID EQU 00036H
|
|
ENABLE_DEVICE_ID EQU 00037H
|
|
VCOND_DEVICE_ID EQU 00038H
|
|
ISAPNP_DEVICE_ID EQU 0003CH
|
|
BIOS_DEVICE_ID EQU 0003DH
|
|
IFSMgr_Device_ID EQU 00040H
|
|
VCDFSD_DEVICE_ID EQU 00041H
|
|
MRCI2_DEVICE_ID EQU 00042H
|
|
PCI_DEVICE_ID EQU 00043H
|
|
PELOADER_DEVICE_ID EQU 00044H
|
|
EISA_DEVICE_ID EQU 00045H
|
|
DRAGCLI_DEVICE_ID EQU 00046H
|
|
DRAGSRV_DEVICE_ID EQU 00047H
|
|
PERF_DEVICE_ID EQU 00048H
|
|
AWREDIR_DEVICE_ID EQU 00049H
|
|
DDS_DEVICE_ID EQU 0004AH
|
|
NTKERN_DEVICE_ID EQU 0004BH
|
|
VDOSKEYD_DEVICE_ID EQU 0004BH
|
|
ACPI_DEVICE_ID EQU 0004CH
|
|
UDF_DEVICE_ID EQU 0004DH
|
|
SMCLIB_DEVICE_ID EQU 0004EH
|
|
ETEN_Device_ID EQU 00060H
|
|
CHBIOS_Device_ID EQU 00061H
|
|
VMSGD_Device_ID EQU 00062H
|
|
VPPID_Device_ID EQU 00063H
|
|
VIME_Device_ID EQU 00064H
|
|
VHBIOSD_Device_ID EQU 00065H
|
|
BASEID_FOR_NAMEBASEDVXD EQU 0f000H
|
|
BASEID_FOR_NAMEBASEDVXD_MASK EQU 0fffH
|
|
VMM_INIT_ORDER EQU 000000000H
|
|
DEBUG_INIT_ORDER EQU 000000000H
|
|
DEBUGCMD_INIT_ORDER EQU 000000000H
|
|
PERF_INIT_ORDER EQU 000900000H
|
|
APM_INIT_ORDER EQU 001000000H
|
|
VPOWERD_INIT_ORDER EQU APM_INIT_ORDER
|
|
BIOSHOOK_INIT_ORDER EQU 006000000H
|
|
VPROD_INIT_ORDER EQU 008000000H
|
|
VPICD_INIT_ORDER EQU 00C000000H
|
|
VTD_INIT_ORDER EQU 014000000H
|
|
VWIN32_INIT_ORDER EQU 014100000H
|
|
VXDLDR_INIT_ORDER EQU 016000000H
|
|
NTKERN_INIT_ORDER EQU 016200000H
|
|
CONFIGMG_INIT_ORDER EQU 016400000H
|
|
ENUMERATOR_INIT_ORDER EQU 016800000H
|
|
ISAPNP_INIT_ORDER EQU ENUMERATOR_INIT_ORDER
|
|
EISA_INIT_ORDER EQU ENUMERATOR_INIT_ORDER
|
|
PCI_INIT_ORDER EQU ENUMERATOR_INIT_ORDER
|
|
BIOS_INIT_ORDER EQU ENUMERATOR_INIT_ORDER+1
|
|
ACPI_INIT_ORDER EQU ENUMERATOR_INIT_ORDER+2
|
|
VCDFSD_INIT_ORDER EQU 016F00000H
|
|
IOS_INIT_ORDER EQU 017000000H
|
|
PAGEFILE_INIT_ORDER EQU 018000000H
|
|
PAGESWAP_INIT_ORDER EQU 01C000000H
|
|
PARITY_INIT_ORDER EQU 020000000H
|
|
REBOOT_INIT_ORDER EQU 024000000H
|
|
EBIOS_INIT_ORDER EQU 026000000H
|
|
VDD_INIT_ORDER EQU 028000000H
|
|
VSD_INIT_ORDER EQU 02C000000H
|
|
VCD_INIT_ORDER EQU 030000000H
|
|
COMMDRVR_INIT_ORDER EQU (VCD_INIT_ORDER-1)
|
|
PRTCL_INIT_ORDER EQU (COMMDRVR_INIT_ORDER-2)
|
|
MODEM_INIT_ORDER EQU (COMMDRVR_INIT_ORDER-3)
|
|
PORT_INIT_ORDER EQU (COMMDRVR_INIT_ORDER-4)
|
|
VMD_INIT_ORDER EQU 034000000H
|
|
VKD_INIT_ORDER EQU 038000000H
|
|
VPD_INIT_ORDER EQU 03C000000H
|
|
BLOCKDEV_INIT_ORDER EQU 040000000H
|
|
MCA_POS_INIT_ORDER EQU 041000000H
|
|
SCSIFD_INIT_ORDER EQU 041400000H
|
|
SCSIMASTER_INIT_ORDER EQU 041800000H
|
|
INT13_INIT_ORDER EQU 042000000H
|
|
VMCPD_INIT_ORDER EQU 048000000H
|
|
BIOSXLAT_INIT_ORDER EQU 050000000H
|
|
VNETBIOS_INIT_ORDER EQU 054000000H
|
|
DOSMGR_INIT_ORDER EQU 058000000H
|
|
DOSNET_INIT_ORDER EQU 05C000000H
|
|
WINLOAD_INIT_ORDER EQU 060000000H
|
|
VMPOLL_INIT_ORDER EQU 064000000H
|
|
UNDEFINED_INIT_ORDER EQU 080000000H
|
|
VCOND_INIT_ORDER EQU UNDEFINED_INIT_ORDER
|
|
WINDEBUG_INIT_ORDER EQU 081000000H
|
|
VDMAD_INIT_ORDER EQU 090000000H
|
|
V86MMGR_INIT_ORDER EQU 0A0000000H
|
|
IFSMgr_Init_Order EQU 10000H+V86MMGR_Init_Order
|
|
FSD_Init_Order EQU 00100H+IFSMgr_Init_Order
|
|
VFD_INIT_ORDER EQU 50000H+IFSMgr_Init_Order
|
|
UNDEF_TOUCH_MEM_INIT_ORDER EQU 0A8000000H
|
|
SHELL_INIT_ORDER EQU 0B0000000H
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IO_Delay macro
|
|
jmp $+2
|
|
ENDM
|
|
|
|
VXD_FAILURE EQU 0
|
|
VXD_SUCCESS EQU 1
|
|
|
|
Pushad_Struc STRUC
|
|
Pushad_EDI DD ?
|
|
Pushad_ESI DD ?
|
|
Pushad_EBP DD ?
|
|
Pushad_ESP DD ?
|
|
Pushad_EBX DD ?
|
|
Pushad_EDX DD ?
|
|
Pushad_ECX DD ?
|
|
Pushad_EAX DD ?
|
|
Pushad_Struc ENDS
|
|
ifndef Not_VxD
|
|
??_CUR_CODE_SEG = 0
|
|
|
|
??_LCODE = 1
|
|
??_ICODE = 2
|
|
??_PCODE = 3
|
|
??_SCODE = 4
|
|
??_DBOCODE = 5
|
|
??_16ICODE = 6
|
|
??_RCODE = 7
|
|
??_LOCKABLECODE = 8
|
|
|
|
?_LCODE equ <(??_CUR_CODE_SEG MOD 16) - ??_LCODE>
|
|
?_ICODE equ <(??_CUR_CODE_SEG MOD 16) - ??_ICODE>
|
|
?_PCODE equ <(??_CUR_CODE_SEG MOD 16) - ??_PCODE>
|
|
?_SCODE equ <(??_CUR_CODE_SEG MOD 16) - ??_SCODE>
|
|
?_DBOCODE equ <(??_CUR_CODE_SEG MOD 16) - ??_DBOCODE>
|
|
?_16ICODE equ <(??_CUR_CODE_SEG MOD 16) - ??_16ICODE>
|
|
?_RCODE equ <(??_CUR_CODE_SEG MOD 16) - ??_RCODE>
|
|
?_LOCKABLECODE equ <(??_CUR_CODE_SEG MOD 16) - ??_LOCKABLECODE>
|
|
|
|
ifndef NO_SEGMENTS
|
|
|
|
|
|
|
|
|
|
|
|
IFDEF MASM6
|
|
_FLAT EQU FLAT
|
|
ELSE
|
|
_FLAT EQU USE32
|
|
ENDIF
|
|
|
|
|
|
_LTEXT SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_LTEXT ENDS
|
|
|
|
_TEXT SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_TEXT ENDS
|
|
|
|
|
|
_PTEXT SEGMENT DWORD PUBLIC _FLAT 'PCODE'
|
|
_PTEXT ENDS
|
|
|
|
|
|
|
|
MakeCodeSeg MACRO seglist, classname, grpname, iseg
|
|
|
|
IRP segname,<seglist>
|
|
|
|
IFNB <classname>
|
|
segname SEGMENT DWORD PUBLIC _FLAT "&classname&CODE"
|
|
ELSE
|
|
segname SEGMENT DWORD PUBLIC _FLAT "&segname&CODE"
|
|
ENDIF
|
|
|
|
IFB <iseg>
|
|
VxD_&&segname&&_CODE_SEG MACRO
|
|
segname SEGMENT
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + ??_PCODE
|
|
ASSUME cs:FLAT, ds:FLAT, es:FLAT, ss:FLAT
|
|
|
|
ENDM
|
|
ELSE
|
|
VxD_&&segname&&_CODE_SEG MACRO
|
|
segname SEGMENT
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + iseg
|
|
ASSUME cs:FLAT, ds:FLAT, es:FLAT, ss:FLAT
|
|
|
|
ENDM
|
|
ENDIF
|
|
|
|
VxD_&&segname&&_CODE_ENDS MACRO
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHR 4
|
|
segname ENDS
|
|
ENDM
|
|
|
|
segname ENDS
|
|
|
|
IFNDEF BLD_COFF
|
|
IFNB <grpname>
|
|
_&grpname GROUP segname
|
|
ELSE
|
|
_&&segname GROUP segname
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDM
|
|
|
|
ENDM
|
|
|
|
MakeCodeSeg <L0CKABLE_BEGIN, LOCKABLE, LOCKABLE_END>, \
|
|
LOCKABLE, LOCKABLE, ??_LOCKABLECODE
|
|
MakeCodeSeg INT21
|
|
MakeCodeSeg SYSEXIT
|
|
MakeCodeSeg RARE
|
|
MakeCodeSeg W16
|
|
MakeCodeSeg W32
|
|
MakeCodeSeg VMCREATE
|
|
MakeCodeSeg VMDESTROY
|
|
MakeCodeSeg THCREATE
|
|
MakeCodeSeg THDESTROY
|
|
MakeCodeSeg VMSUSPEND
|
|
MakeCodeSeg VMRESUME
|
|
MakeCodeSeg PNP
|
|
MakeCodeSeg DOSVM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DefLockableCodeBegin MACRO name, private
|
|
VxD_L0CKABLE_BEGIN_CODE_SEG
|
|
IFB <private>
|
|
PUBLIC name
|
|
ENDIF
|
|
name LABEL NEAR
|
|
ifdef BLD_COFF
|
|
DD ?
|
|
endif
|
|
VxD_L0CKABLE_BEGIN_CODE_ENDS
|
|
ifndef WIN31COMPAT
|
|
if DEBLEVEL
|
|
VxD_LOCKED_DATA_SEG
|
|
PUBLIC name&_Debug_Flags
|
|
name&_Debug_Flags DD DFS_TEST_BLOCK
|
|
VxD_LOCKED_DATA_ENDS
|
|
??_debug_flags equ <name&_Debug_Flags>
|
|
endif
|
|
endif
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DefLockableCodeEnd MACRO name, private
|
|
VxD_LOCKABLE_END_CODE_SEG
|
|
IFB <private>
|
|
PUBLIC name
|
|
ENDIF
|
|
name LABEL NEAR
|
|
ifdef BLD_COFF
|
|
DD ?
|
|
endif
|
|
VxD_LOCKABLE_END_CODE_ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
CodeLockFlags MACRO name
|
|
ifndef WIN31COMPAT
|
|
if DEBLEVEL
|
|
ifndef name&_Debug_Flags
|
|
VxD_LOCKED_DATA_SEG
|
|
extrn name&_Debug_Flags:dword
|
|
VxD_LOCKED_DATA_ENDS
|
|
??_debug_flags equ <name&_Debug_Flags>
|
|
endif
|
|
endif
|
|
endif
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MarkCodeLocked MACRO
|
|
ifndef WIN31COMPAT
|
|
if DEBLEVEL
|
|
ifdef ??_debug_flags
|
|
pushfd
|
|
and ??_debug_flags,NOT DFS_TEST_BLOCK
|
|
popfd
|
|
endif
|
|
endif
|
|
endif
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MarkCodeUnlocked MACRO
|
|
ifndef WIN31COMPAT
|
|
if DEBLEVEL
|
|
ifdef ??_debug_flags
|
|
pushfd
|
|
or ??_debug_flags,DFS_TEST_BLOCK
|
|
popfd
|
|
endif
|
|
endif
|
|
endif
|
|
ENDM
|
|
|
|
|
|
|
|
_ITEXT SEGMENT DWORD PUBLIC _FLAT 'ICODE'
|
|
_ITEXT ENDS
|
|
|
|
|
|
_LDATA SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_LDATA ENDS
|
|
|
|
_DATA SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_DATA ENDS
|
|
|
|
|
|
_PDATA SEGMENT DWORD PUBLIC _FLAT 'PDATA'
|
|
_PDATA ENDS
|
|
|
|
|
|
_IDATA SEGMENT DWORD PUBLIC _FLAT 'ICODE'
|
|
_IDATA ENDS
|
|
|
|
|
|
_BSS SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_BSS ENDS
|
|
|
|
CONST SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
CONST ENDS
|
|
|
|
_TLS SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_TLS ENDS
|
|
|
|
|
|
_STEXT SEGMENT DWORD PUBLIC _FLAT 'SCODE'
|
|
_STEXT ENDS
|
|
|
|
|
|
_SDATA SEGMENT DWORD PUBLIC _FLAT 'SCODE'
|
|
_SDATA ENDS
|
|
|
|
|
|
_DB0START SEGMENT DWORD PUBLIC _FLAT 'DBOCODE'
|
|
_DB0START ENDS
|
|
|
|
|
|
_DB1CODE SEGMENT DWORD PUBLIC _FLAT 'DBOCODE'
|
|
_DB1CODE ENDS
|
|
|
|
|
|
_DB2DATA SEGMENT DWORD PUBLIC _FLAT 'DBOCODE'
|
|
_DB2DATA ENDS
|
|
|
|
if DEBLEVEL
|
|
|
|
_PATHSTART SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_PATHSTART ENDS
|
|
|
|
|
|
_PATHDATA SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_PATHDATA ENDS
|
|
|
|
|
|
_PATHEND SEGMENT DWORD PUBLIC _FLAT 'LCODE'
|
|
_PATHEND ENDS
|
|
endif
|
|
|
|
|
|
_16ICODE SEGMENT WORD USE16 PUBLIC '16ICODE'
|
|
_16ICODE ENDS
|
|
|
|
|
|
_RCODE SEGMENT WORD USE16 PUBLIC 'RCODE'
|
|
_RCODE ENDS
|
|
|
|
IFNDEF BLD_COFF
|
|
_LGROUP GROUP _LTEXT, _TEXT, _LDATA, _DATA, _BSS, CONST, _TLS
|
|
_IGROUP GROUP _ITEXT, _IDATA
|
|
_SGROUP GROUP _STEXT, _SDATA
|
|
_DBOGROUP GROUP _DB0START, _DB1CODE, _DB2DATA
|
|
IF DEBLEVEL
|
|
_PGROUP GROUP _PATHSTART, _PATHDATA, _PATHEND
|
|
ENDIF
|
|
ENDIF
|
|
|
|
endif
|
|
|
|
ASSUME CS:FLAT, DS:FLAT, ES:FLAT, SS:FLAT
|
|
|
|
OFFSET32 EQU <OFFSET FLAT:>
|
|
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
Begin_Service_Table MACRO Device_Name, Def_Segment
|
|
|
|
IFDEF Device_Name&_Name_Based
|
|
IFNDEF @@NextInternalID
|
|
@@NextInternalID = 0
|
|
ENDIF
|
|
@@NextInternalID = (@@NextInternalID + 1)
|
|
Device_Name&_Internal_ID = @@NextInternalID + BASEID_FOR_NAMEBASEDVXD
|
|
DefineVxDName Device_Name, %Device_Name&_Internal_ID
|
|
ENDIF
|
|
|
|
IFB <Def_Segment>
|
|
BST2 Device_Name, VxD
|
|
ELSE
|
|
BST2 Device_Name, Def_Segment
|
|
ENDIF
|
|
ENDM
|
|
|
|
DefineVxDName MACRO Device_Name, InternalID
|
|
@@VxDName&InternalID EQU <___&Device_Name&STable>
|
|
ENDM
|
|
|
|
|
|
BST2 MACRO Device_Name, Def_Segment
|
|
|
|
Num_&Device_Name&_Services = 0
|
|
|
|
IFDEF Create_&Device_Name&_Service_Table
|
|
|
|
|
|
Def_Segment&_LOCKED_DATA_SEG
|
|
|
|
Device_Name&_Service_Table LABEL DWORD
|
|
|
|
Device_Name&_Service MACRO Procedure, Local_Seg, Condition, StdCallBytes, fastcall
|
|
LOCAL $$&Procedure, extrnproc, tableproc
|
|
|
|
extrnproc MACRO
|
|
IFNB <fastcall>
|
|
IFB <StdCallBytes>
|
|
.err
|
|
ENDIF
|
|
EXTRN @&&Procedure&&@&&StdCallBytes:NEAR
|
|
ELSE
|
|
IFNB <StdCallBytes>
|
|
EXTRN _&&Procedure&&@&&StdCallBytes:NEAR
|
|
ELSE
|
|
EXTRN Procedure:NEAR
|
|
ENDIF
|
|
ENDIF
|
|
ENDM
|
|
|
|
tableproc MACRO
|
|
IFNB <fastcall>
|
|
dd OFFSET32 @&&Procedure&&@&&StdCallBytes
|
|
ELSE
|
|
IFNB <StdCallBytes>
|
|
dd OFFSET32 _&&Procedure&&@&&StdCallBytes
|
|
ELSE
|
|
dd OFFSET32 Procedure
|
|
ENDIF
|
|
ENDIF
|
|
ENDM
|
|
|
|
IFNB <Condition>
|
|
$$&&Procedure MACRO extern
|
|
IFDEF &Condition
|
|
IFNB <extern>
|
|
extrnproc
|
|
ELSE
|
|
tableproc
|
|
ENDIF
|
|
ELSE
|
|
IFB <extern>
|
|
dd 0
|
|
ENDIF
|
|
ENDIF
|
|
ENDM
|
|
ENDIF
|
|
|
|
IFDIFI <Procedure>, <RESERVED>
|
|
PUBLIC _&&Procedure
|
|
IF1
|
|
_&&Procedure LABEL DWORD
|
|
IFNB <fastcall>
|
|
PUBLIC __&&Procedure
|
|
__&&Procedure LABEL DWORD
|
|
ENDIF
|
|
ENDIF
|
|
IFDIFI <Local_Seg>, <LOCAL>
|
|
IFNB <Local_Seg>
|
|
Local_Seg&&_SEG
|
|
ELSE
|
|
Def_Segment&_CODE_SEG
|
|
ENDIF
|
|
IFNB <Condition>
|
|
$$&&Procedure extern
|
|
ELSE
|
|
extrnproc
|
|
ENDIF
|
|
IFNB <Local_Seg>
|
|
Local_Seg&&_ENDS
|
|
ELSE
|
|
Def_Segment&_CODE_ENDS
|
|
ENDIF
|
|
ENDIF
|
|
IFNB <Condition>
|
|
$$&&Procedure
|
|
ELSE
|
|
tableproc
|
|
ENDIF
|
|
|
|
IFDEF Device_Name&_Name_Based
|
|
@@&&Procedure = (Device_Name&_Internal_ID SHL 16) + Num_&Device_Name&_Services
|
|
ELSE
|
|
@@&&Procedure = (Device_Name&_Device_ID SHL 16) + Num_&Device_Name&_Services
|
|
ENDIF
|
|
ELSE
|
|
dd 0
|
|
ENDIF
|
|
Num_&Device_Name&_Services = Num_&Device_Name&_Services + 1
|
|
IFNB <Condition>
|
|
Purge $$&&Procedure
|
|
ENDIF
|
|
Purge extrnproc
|
|
Purge tableproc
|
|
ENDM
|
|
|
|
Device_Name&_StdCall_Service MACRO Procedure, Args, Local_Seg, Condition
|
|
Device_Name&_Service Procedure, Local_Seg, Condition, %Args*4
|
|
??_standardccall&&_Procedure = Args
|
|
ENDM
|
|
|
|
Device_Name&_FastCall_Service MACRO Procedure, Args, Local_Seg, Condition
|
|
Device_Name&_Service Procedure, Local_Seg, Condition, %Args*4, TRUE
|
|
??_fastcall&&_Procedure = Args
|
|
ENDM
|
|
|
|
ELSE
|
|
|
|
|
|
|
|
IFDEF Device_Name&_Name_Based
|
|
|
|
Device_Name&_Service MACRO Procedure, Local_Seg, Condition
|
|
|
|
|
|
IFDIFI <Procedure>, <RESERVED>
|
|
@@&&Procedure = (Device_Name&_Internal_ID SHL 16) + Num_&Device_Name&_Services
|
|
ENDIF
|
|
Num_&Device_Name&_Services = Num_&Device_Name&_Services + 1
|
|
|
|
ENDM
|
|
ELSE
|
|
|
|
Device_Name&_Service MACRO Procedure, Local_Seg, Condition
|
|
|
|
IFDIFI <Procedure>, <RESERVED>
|
|
@@&&Procedure = (Device_Name&_Device_ID SHL 16) + Num_&Device_Name&_Services
|
|
ENDIF
|
|
Num_&Device_Name&_Services = Num_&Device_Name&_Services + 1
|
|
|
|
ENDM
|
|
|
|
ENDIF
|
|
|
|
Device_Name&_StdCall_Service MACRO Procedure, Args, Local_Seg, Condition
|
|
Device_Name&_Service Procedure, Local_Seg, Condition
|
|
??_standardccall_&&Procedure = Args
|
|
ENDM
|
|
|
|
Device_Name&_FastCall_Service MACRO Procedure, Args, Local_Seg, Condition
|
|
Device_Name&_Service Procedure, Local_Seg, Condition
|
|
??_fastcall_&&Procedure = Args
|
|
ENDM
|
|
|
|
ENDIF
|
|
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
End_Service_Table MACRO Device_Name, Def_Segment
|
|
|
|
PURGE Device_Name&_Service
|
|
|
|
IFDEF Create_&Device_Name&_Service_Table
|
|
|
|
IFB <Def_Segment>
|
|
VxD_LOCKED_DATA_ENDS
|
|
ELSE
|
|
Def_Segment&_LOCKED_DATA_ENDS
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDM
|
|
|
|
GetVxDServiceOrdinal macro reg,service
|
|
mov reg,@@&service
|
|
endm
|
|
|
|
GetVxDServiceAddress macro reg,service
|
|
mov reg,OFFSET32 service
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Begin_Win32_Services MACRO VxDName
|
|
ifndef Create_Win32_Services
|
|
Create_Win32_Services = 0
|
|
endif
|
|
.errb <VxDName>, <VxD name missing>
|
|
??w32svcno = 0
|
|
if Create_Win32_Services
|
|
VxDName&_Win32_Services label dword
|
|
dd csvc&VxDName, 0
|
|
endif
|
|
??inw32svc = 1
|
|
|
|
VxDName&_Win32_Service MACRO Name
|
|
.erre ??inw32svc, <Missing Begin_Win32_Services>
|
|
if Create_Win32_Services
|
|
dd OFFSET32 Name,cparm&&Name
|
|
endif
|
|
@32&&Name equ ((VxDName&_Device_ID SHL 16) + ??w32svcno)
|
|
??w32svcno = ??w32svcno + 1
|
|
ENDM
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End_Win32_Services MACRO VxDName
|
|
.errb <VxDName>, <VxD name misssing>
|
|
if Create_Win32_Services
|
|
csvc&VxDName equ ($ - VxDName&_Win32_Services)/8 - 1
|
|
endif
|
|
??inw32svc = 0
|
|
PURGE VxDName&_Win32_Service
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Declare_Win32_Service MACRO Name, cParms
|
|
ifndef Create_Win32_Services
|
|
Create_Win32_Services = 0
|
|
endif
|
|
if Create_Win32_Services
|
|
?merge <Name>,,,,<EQU>,<_>,<Name>,<@>,%(cParms*4 + 8)
|
|
?merge <cparm>,<Name>,,,<EQU>,<cParms>
|
|
VxD_CODE_SEG
|
|
?merge <EXTRN>,,,,,<_>,<Name>,<@>,%(cParms*4 + 8),<:NEAR>
|
|
VxD_CODE_ENDS
|
|
endif
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Win32call MACRO Service, CallBack
|
|
ifndef Create_Win32_Services
|
|
Create_Win32_Services = 0
|
|
endif
|
|
ife Create_Win32_Services
|
|
mov eax,@32&Service
|
|
ifdef IS_16
|
|
movzx esp,sp
|
|
endif
|
|
call fword ptr [CallBack]
|
|
ifdef DEBUG
|
|
int 3
|
|
endif
|
|
endif
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dword_Align MACRO Seg_Name
|
|
LOCAL segn
|
|
IFDEF MASM6
|
|
align 4
|
|
ELSE
|
|
IFNB <Seg_Name>
|
|
segn equ Seg_Name
|
|
ELSE
|
|
IFE ?_LCODE
|
|
segn equ <_LTEXT>
|
|
ELSE
|
|
IFE ?_ICODE
|
|
segn equ <_ITEXT>
|
|
ELSE
|
|
IFE ?_PCODE
|
|
segn equ <_PTEXT>
|
|
ELSE
|
|
IFE ?_SCODE
|
|
segn equ <_STEXT>
|
|
ELSE
|
|
.err <Dword_Align not supported>
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF (($-OFFSET segn:0) MOD 4)
|
|
db 4 - (($-OFFSET segn:0) MOD 4) DUP (90h)
|
|
ENDIF
|
|
ENDIF
|
|
ENDM
|
|
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
Fatal_Error MACRO Msg_Ptr, Exit_Flags
|
|
pushad
|
|
IFB <Msg_Ptr>
|
|
xor esi, esi
|
|
ELSE
|
|
mov esi, Msg_Ptr
|
|
IFB <Exit_Flags>
|
|
xor eax, eax
|
|
ELSE
|
|
mov eax, Exit_Flags
|
|
ENDIF
|
|
ENDIF
|
|
VMMCall Fatal_Error_Handler
|
|
ENDM
|
|
|
|
EF_Hang_On_Exit EQU 1h
|
|
|
|
|
|
cb_s STRUC
|
|
CB_VM_Status DD ?
|
|
CB_High_Linear DD ?
|
|
CB_Client_Pointer DD ?
|
|
CB_VMID DD ?
|
|
CB_Signature DD ?
|
|
cb_s ENDS
|
|
VMCB_ID EQU 62634D56H
|
|
VMSTAT_EXCLUSIVE_BIT EQU 00H
|
|
VMSTAT_EXCLUSIVE EQU (1 SHL VMSTAT_EXCLUSIVE_BIT)
|
|
VMSTAT_BACKGROUND_BIT EQU 01H
|
|
VMSTAT_BACKGROUND EQU (1 SHL VMSTAT_BACKGROUND_BIT)
|
|
VMSTAT_CREATING_BIT EQU 02H
|
|
VMSTAT_CREATING EQU (1 SHL VMSTAT_CREATING_BIT)
|
|
VMSTAT_SUSPENDED_BIT EQU 03H
|
|
VMSTAT_SUSPENDED EQU (1 SHL VMSTAT_SUSPENDED_BIT)
|
|
VMSTAT_NOT_EXECUTEABLE_BIT EQU 04H
|
|
VMSTAT_NOT_EXECUTEABLE EQU (1 SHL VMSTAT_NOT_EXECUTEABLE_BIT)
|
|
VMSTAT_PM_EXEC_BIT EQU 05H
|
|
VMSTAT_PM_EXEC EQU (1 SHL VMSTAT_PM_EXEC_BIT)
|
|
VMSTAT_PM_APP_BIT EQU 06H
|
|
VMSTAT_PM_APP EQU (1 SHL VMSTAT_PM_APP_BIT)
|
|
VMSTAT_PM_USE32_BIT EQU 07H
|
|
VMSTAT_PM_USE32 EQU (1 SHL VMSTAT_PM_USE32_BIT)
|
|
VMSTAT_VXD_EXEC_BIT EQU 08H
|
|
VMSTAT_VXD_EXEC EQU (1 SHL VMSTAT_VXD_EXEC_BIT)
|
|
VMSTAT_HIGH_PRI_BACK_BIT EQU 09H
|
|
VMSTAT_HIGH_PRI_BACK EQU (1 SHL VMSTAT_HIGH_PRI_BACK_BIT)
|
|
VMSTAT_BLOCKED_BIT EQU 0AH
|
|
VMSTAT_BLOCKED EQU (1 SHL VMSTAT_BLOCKED_BIT)
|
|
VMSTAT_AWAKENING_BIT EQU 0BH
|
|
VMSTAT_AWAKENING EQU (1 SHL VMSTAT_AWAKENING_BIT)
|
|
VMSTAT_PAGEABLEV86BIT EQU 0CH
|
|
VMSTAT_PAGEABLEV86_BIT EQU VMSTAT_PAGEABLEV86BIT
|
|
VMSTAT_PAGEABLEV86 EQU (1 SHL VMSTAT_PAGEABLEV86BIT)
|
|
VMSTAT_V86INTSLOCKEDBIT EQU 0DH
|
|
VMSTAT_V86INTSLOCKED_BIT EQU VMSTAT_V86INTSLOCKEDBIT
|
|
VMSTAT_V86INTSLOCKED EQU (1 SHL VMSTAT_V86INTSLOCKEDBIT)
|
|
VMSTAT_IDLE_TIMEOUT_BIT EQU 0EH
|
|
VMSTAT_IDLE_TIMEOUT EQU (1 SHL VMSTAT_IDLE_TIMEOUT_BIT)
|
|
VMSTAT_IDLE_BIT EQU 0FH
|
|
VMSTAT_IDLE EQU (1 SHL VMSTAT_IDLE_BIT)
|
|
VMSTAT_CLOSING_BIT EQU 10H
|
|
VMSTAT_CLOSING EQU (1 SHL VMSTAT_CLOSING_BIT)
|
|
VMSTAT_TS_SUSPENDED_BIT EQU 11H
|
|
VMSTAT_TS_SUSPENDED EQU (1 SHL VMSTAT_TS_SUSPENDED_BIT)
|
|
VMSTAT_TS_MAXPRI_BIT EQU 12H
|
|
VMSTAT_TS_MAXPRI EQU (1 SHL VMSTAT_TS_MAXPRI_BIT)
|
|
VMSTAT_USE32_MASK EQU (VMSTAT_PM_USE32 OR VMSTAT_VXD_EXEC)
|
|
|
|
tcb_s STRUC
|
|
TCB_Flags DD ?
|
|
TCB_Reserved1 DD ?
|
|
TCB_Reserved2 DD ?
|
|
TCB_Signature DD ?
|
|
TCB_ClientPtr DD ?
|
|
TCB_VMHandle DD ?
|
|
TCB_ThreadId DW ?
|
|
TCB_PMLockOrigSS DW ?
|
|
TCB_PMLockOrigESP DD ?
|
|
TCB_PMLockOrigEIP DD ?
|
|
TCB_PMLockStackCount DD ?
|
|
TCB_PMLockOrigCS DW ?
|
|
TCB_PMPSPSelector DW ?
|
|
TCB_ThreadType DD ?
|
|
TCB_pad1 DW ?
|
|
TCB_pad2 DB ?
|
|
TCB_extErrLocus DB ?
|
|
TCB_extErr DW ?
|
|
TCB_extErrAction DB ?
|
|
TCB_extErrClass DB ?
|
|
TCB_extErrPtr DD ?
|
|
tcb_s ENDS
|
|
SCHED_OBJ_ID_THREAD EQU 42434854H
|
|
THFLAG_SUSPENDED_BIT EQU 03H
|
|
THFLAG_SUSPENDED EQU (1 SHL THFLAG_SUSPENDED_BIT)
|
|
THFLAG_NOT_EXECUTEABLE_BIT EQU 04H
|
|
THFLAG_NOT_EXECUTEABLE EQU (1 SHL THFLAG_NOT_EXECUTEABLE_BIT)
|
|
THFLAG_THREAD_CREATION_BIT EQU 08H
|
|
THFLAG_THREAD_CREATION EQU (1 SHL THFLAG_THREAD_CREATION_BIT)
|
|
THFLAG_THREAD_BLOCKED_BIT EQU 0AH
|
|
THFLAG_THREAD_BLOCKED EQU (1 SHL THFLAG_THREAD_BLOCKED_BIT)
|
|
THFLAG_RING0_THREAD_BIT EQU 1CH
|
|
THFLAG_RING0_THREAD EQU (1 SHL THFLAG_RING0_THREAD_BIT)
|
|
THFLAG_ASYNC_THREAD_BIT EQU 1FH
|
|
THFLAG_ASYNC_THREAD EQU (1 SHL THFLAG_ASYNC_THREAD_BIT)
|
|
THFLAG_CHARSET_BITS EQU 10H
|
|
THFLAG_CHARSET_MASK EQU (3 SHL THFLAG_CHARSET_BITS)
|
|
THFLAG_ANSI EQU (0 SHL THFLAG_CHARSET_BITS)
|
|
THFLAG_OEM EQU (1 SHL THFLAG_CHARSET_BITS)
|
|
THFLAG_UNICODE EQU (2 SHL THFLAG_CHARSET_BITS)
|
|
THFLAG_RESERVED EQU (3 SHL THFLAG_CHARSET_BITS)
|
|
THFLAG_EXTENDED_HANDLES_BIT EQU 12H
|
|
THFLAG_EXTENDED_HANDLES EQU (1 SHL THFLAG_EXTENDED_HANDLES_BIT)
|
|
THFLAG_OPEN_AS_IMMOVABLE_FILE_BIT EQU 13H
|
|
THFLAG_OPEN_AS_IMMOVABLE_FILE EQU (1 SHL THFLAG_OPEN_AS_IMMOVABLE_FILE_BIT)
|
|
|
|
pmcb_s STRUC
|
|
PMCB_Flags DD ?
|
|
PMCB_Parent DD ?
|
|
pmcb_s ENDS
|
|
|
|
VMFaultInfo STRUC
|
|
VMFI_EIP DD ?
|
|
VMFI_CS DW ?
|
|
VMFI_Ints DW ?
|
|
VMFaultInfo ENDS
|
|
Begin_Service_Table VMM, VMM
|
|
VMM_Service Get_VMM_Version, LOCAL
|
|
VMM_Service Get_Cur_VM_Handle
|
|
VMM_Service Test_Cur_VM_Handle
|
|
VMM_Service Get_Sys_VM_Handle
|
|
VMM_Service Test_Sys_VM_Handle
|
|
VMM_Service Validate_VM_Handle
|
|
VMM_Service Get_VMM_Reenter_Count
|
|
VMM_Service Begin_Reentrant_Execution
|
|
VMM_Service End_Reentrant_Execution
|
|
VMM_Service Install_V86_Break_Point
|
|
VMM_Service Remove_V86_Break_Point
|
|
VMM_Service Allocate_V86_Call_Back
|
|
VMM_Service Allocate_PM_Call_Back
|
|
VMM_Service Call_When_VM_Returns
|
|
VMM_Service Schedule_Global_Event
|
|
VMM_Service Schedule_VM_Event
|
|
VMM_Service Call_Global_Event
|
|
VMM_Service Call_VM_Event
|
|
VMM_Service Cancel_Global_Event
|
|
VMM_Service Cancel_VM_Event
|
|
VMM_Service Call_Priority_VM_Event
|
|
VMM_Service Cancel_Priority_VM_Event
|
|
VMM_Service Get_NMI_Handler_Addr
|
|
VMM_Service Set_NMI_Handler_Addr
|
|
VMM_Service Hook_NMI_Event
|
|
VMM_Service Call_When_VM_Ints_Enabled
|
|
VMM_Service Enable_VM_Ints
|
|
VMM_Service Disable_VM_Ints
|
|
VMM_Service Map_Flat
|
|
VMM_Service Map_Lin_To_VM_Addr
|
|
VMM_Service Adjust_Exec_Priority
|
|
VMM_Service Begin_Critical_Section
|
|
VMM_Service End_Critical_Section
|
|
VMM_Service End_Crit_And_Suspend
|
|
VMM_Service Claim_Critical_Section
|
|
VMM_Service Release_Critical_Section
|
|
VMM_Service Call_When_Not_Critical
|
|
VMM_Service Create_Semaphore
|
|
VMM_Service Destroy_Semaphore
|
|
VMM_Service Wait_Semaphore
|
|
VMM_Service Signal_Semaphore
|
|
VMM_Service Get_Crit_Section_Status
|
|
VMM_Service Call_When_Task_Switched
|
|
VMM_Service Suspend_VM
|
|
VMM_Service Resume_VM
|
|
VMM_Service No_Fail_Resume_VM
|
|
VMM_Service Nuke_VM
|
|
VMM_Service Crash_Cur_VM
|
|
VMM_Service Get_Execution_Focus
|
|
VMM_Service Set_Execution_Focus
|
|
VMM_Service Get_Time_Slice_Priority
|
|
VMM_Service Set_Time_Slice_Priority
|
|
VMM_Service Get_Time_Slice_Granularity
|
|
VMM_Service Set_Time_Slice_Granularity
|
|
VMM_Service Get_Time_Slice_Info
|
|
VMM_Service Adjust_Execution_Time
|
|
VMM_Service Release_Time_Slice
|
|
VMM_Service Wake_Up_VM
|
|
VMM_Service Call_When_Idle
|
|
VMM_Service Get_Next_VM_Handle
|
|
VMM_Service Set_Global_Time_Out
|
|
VMM_Service Set_VM_Time_Out
|
|
VMM_Service Cancel_Time_Out
|
|
VMM_Service Get_System_Time
|
|
VMM_Service Get_VM_Exec_Time
|
|
VMM_Service Hook_V86_Int_Chain
|
|
VMM_Service Get_V86_Int_Vector
|
|
VMM_Service Set_V86_Int_Vector
|
|
VMM_Service Get_PM_Int_Vector
|
|
VMM_Service Set_PM_Int_Vector
|
|
VMM_Service Simulate_Int
|
|
VMM_Service Simulate_Iret
|
|
VMM_Service Simulate_Far_Call
|
|
VMM_Service Simulate_Far_Jmp
|
|
VMM_Service Simulate_Far_Ret
|
|
VMM_Service Simulate_Far_Ret_N
|
|
VMM_Service Build_Int_Stack_Frame
|
|
VMM_Service Simulate_Push
|
|
VMM_Service Simulate_Pop
|
|
VMM_Service _HeapAllocate
|
|
VMM_Service _HeapReAllocate
|
|
VMM_Service _HeapFree
|
|
VMM_Service _HeapGetSize
|
|
HEAPZEROINIT EQU 00000001H
|
|
HEAPZEROREINIT EQU 00000002H
|
|
HEAPNOCOPY EQU 00000004H
|
|
HEAPALIGN_SHIFT EQU 16
|
|
HEAPALIGN_MASK EQU 000F0000H
|
|
HEAPALIGN_4 EQU 00000000H
|
|
HEAPALIGN_8 EQU 00000000H
|
|
HEAPALIGN_16 EQU 00000000H
|
|
HEAPALIGN_32 EQU 00010000H
|
|
HEAPALIGN_64 EQU 00020000H
|
|
HEAPALIGN_128 EQU 00030000H
|
|
HEAPALIGN_256 EQU 00040000H
|
|
HEAPALIGN_512 EQU 00050000H
|
|
HEAPALIGN_1K EQU 00060000H
|
|
HEAPALIGN_2K EQU 00070000H
|
|
HEAPALIGN_4K EQU 00080000H
|
|
HEAPALIGN_8K EQU 00090000H
|
|
HEAPALIGN_16K EQU 000A0000H
|
|
HEAPALIGN_32K EQU 000B0000H
|
|
HEAPALIGN_64K EQU 000C0000H
|
|
HEAPALIGN_128K EQU 000D0000H
|
|
HEAPTYPESHIFT EQU 8
|
|
HEAPTYPEMASK EQU 00000700H
|
|
HEAPLOCKEDHIGH EQU 00000000H
|
|
HEAPLOCKEDIFDP EQU 00000100H
|
|
HEAPSWAP EQU 00000200H
|
|
HEAPINIT EQU 00000400H
|
|
HEAPCLEAN EQU 00000800H
|
|
HEAPCONTIG EQU 00001000H
|
|
HEAPFORGET EQU 00002000H
|
|
HEAPLOCKEDLOW EQU 00000300H
|
|
HEAPSYSVM EQU 00000500H
|
|
HEAPPREEMPT EQU 00000600H
|
|
VMM_Service _PageAllocate
|
|
VMM_Service _PageReAllocate
|
|
VMM_Service _PageFree
|
|
VMM_Service _PageLock
|
|
VMM_Service _PageUnLock
|
|
VMM_Service _PageGetSizeAddr
|
|
VMM_Service _PageGetAllocInfo
|
|
VMM_Service _GetFreePageCount
|
|
VMM_Service _GetSysPageCount
|
|
VMM_Service _GetVMPgCount
|
|
VMM_Service _MapIntoV86
|
|
VMM_Service _PhysIntoV86
|
|
VMM_Service _TestGlobalV86Mem
|
|
VMM_Service _ModifyPageBits
|
|
VMM_Service _CopyPageTable
|
|
VMM_Service _LinMapIntoV86
|
|
VMM_Service _LinPageLock
|
|
VMM_Service _LinPageUnLock
|
|
VMM_Service _SetResetV86Pageable
|
|
VMM_Service _GetV86PageableArray
|
|
VMM_Service _PageCheckLinRange
|
|
VMM_Service _PageOutDirtyPages
|
|
VMM_Service _PageDiscardPages
|
|
PAGEZEROINIT EQU 00000001H
|
|
PAGEUSEALIGN EQU 00000002H
|
|
PAGECONTIG EQU 00000004H
|
|
PAGEFIXED EQU 00000008H
|
|
PAGEDEBUGNULFAULT EQU 00000010H
|
|
PAGEZEROREINIT EQU 00000020H
|
|
PAGENOCOPY EQU 00000040H
|
|
PAGELOCKED EQU 00000080H
|
|
PAGELOCKEDIFDP EQU 00000100H
|
|
PAGESETV86PAGEABLE EQU 00000200H
|
|
PAGECLEARV86PAGEABLE EQU 00000400H
|
|
PAGESETV86INTSLOCKED EQU 00000800H
|
|
PAGECLEARV86INTSLOCKED EQU 00001000H
|
|
PAGEMARKPAGEOUT EQU 00002000H
|
|
PAGEPDPSETBASE EQU 00004000H
|
|
PAGEPDPCLEARBASE EQU 00008000H
|
|
PAGEDISCARD EQU 00010000H
|
|
PAGEPDPQUERYDIRTY EQU 00020000H
|
|
PAGEMAPFREEPHYSREG EQU 00040000H
|
|
PAGEPHYSONLY EQU 04000000H
|
|
PAGENOMOVE EQU 10000000H
|
|
PAGEMAPGLOBAL EQU 40000000H
|
|
PAGEMARKDIRTY EQU 80000000H
|
|
MAPV86_IGNOREWRAP EQU 00000001H
|
|
MPL_NonCached EQU 00000000H
|
|
MPL_HardwareCoherentCached EQU 00000001H
|
|
MPL_FrameBufferCached EQU 00000002H
|
|
MPL_Cached EQU 00000004H
|
|
VMM_Service _GetNulPageHandle
|
|
VMM_Service _GetFirstV86Page
|
|
VMM_Service _MapPhysToLinear
|
|
VMM_Service _GetAppFlatDSAlias
|
|
VMM_Service _SelectorMapFlat
|
|
VMM_Service _GetDemandPageInfo
|
|
VMM_Service _GetSetPageOutCount
|
|
GSPOC_F_GET EQU 00000001H
|
|
VMM_Service Hook_V86_Page
|
|
VMM_Service _Assign_Device_V86_Pages
|
|
VMM_Service _DeAssign_Device_V86_Pages
|
|
VMM_Service _Get_Device_V86_Pages_Array
|
|
VMM_Service MMGR_SetNULPageAddr
|
|
VMM_Service _Allocate_GDT_Selector
|
|
VMM_Service _Free_GDT_Selector
|
|
VMM_Service _Allocate_LDT_Selector
|
|
VMM_Service _Free_LDT_Selector
|
|
VMM_Service _BuildDescriptorDWORDs
|
|
VMM_Service _GetDescriptor
|
|
VMM_Service _SetDescriptor
|
|
ALLOCFROMEND EQU 40000000H
|
|
BDDEXPLICITDPL EQU 00000001H
|
|
ALDTSPECSEL EQU 00000001H
|
|
VMM_Service _MMGR_Toggle_HMA
|
|
MMGRHMAPHYSICAL EQU 00000001H
|
|
MMGRHMAENABLE EQU 00000002H
|
|
MMGRHMADISABLE EQU 00000004H
|
|
MMGRHMAQUERY EQU 00000008H
|
|
VMM_Service Get_Fault_Hook_Addrs
|
|
VMM_Service Hook_V86_Fault
|
|
VMM_Service Hook_PM_Fault
|
|
VMM_Service Hook_VMM_Fault
|
|
VMM_Service Begin_Nest_V86_Exec
|
|
VMM_Service Begin_Nest_Exec
|
|
VMM_Service Exec_Int
|
|
VMM_Service Resume_Exec
|
|
VMM_Service End_Nest_Exec
|
|
VMM_Service Allocate_PM_App_CB_Area, VMM_ICODE
|
|
VMM_Service Get_Cur_PM_App_CB
|
|
VMM_Service Set_V86_Exec_Mode
|
|
VMM_Service Set_PM_Exec_Mode
|
|
VMM_Service Begin_Use_Locked_PM_Stack
|
|
VMM_Service End_Use_Locked_PM_Stack
|
|
VMM_Service Save_Client_State
|
|
VMM_Service Restore_Client_State
|
|
VMM_Service Exec_VxD_Int
|
|
VMM_Service Hook_Device_Service
|
|
VMM_Service Hook_Device_V86_API
|
|
VMM_Service Hook_Device_PM_API
|
|
VMM_Service System_Control
|
|
VMM_Service Simulate_IO
|
|
VMM_Service Install_Mult_IO_Handlers
|
|
VMM_Service Install_IO_Handler
|
|
VMM_Service Enable_Global_Trapping
|
|
VMM_Service Enable_Local_Trapping
|
|
VMM_Service Disable_Global_Trapping
|
|
VMM_Service Disable_Local_Trapping
|
|
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
|
|
LF_ASYNC_BIT EQU 0
|
|
LF_ASYNC EQU (1 SHL LF_ASYNC_BIT)
|
|
LF_USE_HEAP_BIT EQU 1
|
|
LF_USE_HEAP EQU (1 SHL LF_USE_HEAP_BIT)
|
|
LF_ALLOC_ERROR_BIT EQU 2
|
|
LF_ALLOC_ERROR EQU (1 SHL LF_ALLOC_ERROR_BIT)
|
|
LF_SWAP EQU (LF_USE_HEAP+(1 SHL 3))
|
|
VMM_Service _AddInstanceItem
|
|
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
|
|
GVDAWordAlign EQU 00000001H
|
|
GVDADWordAlign EQU 00000002H
|
|
GVDAParaAlign EQU 00000004H
|
|
GVDAPageAlign EQU 00000008H
|
|
GVDAInstance EQU 00000100H
|
|
GVDAZeroInit EQU 00000200H
|
|
GVDAReclaim EQU 00000400H
|
|
GVDAInquire EQU 00000800H
|
|
GVDAHighSysCritOK EQU 00001000H
|
|
GVDAOptInstance EQU 00002000H
|
|
GVDAForceLow EQU 00004000H
|
|
TVDANeedTilInitComplete EQU 00000001H
|
|
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
|
|
VMM_OPENFILE_BUF_SIZE EQU 260
|
|
VMM_Service Get_PSP_Segment, VMM_ICODE
|
|
VMM_Service GetDOSVectors, VMM_ICODE
|
|
VMM_Service Get_Machine_Info
|
|
GMIF_80486_BIT EQU 10H
|
|
GMIF_80486 EQU (1 SHL GMIF_80486_BIT)
|
|
GMIF_PCXT_BIT EQU 11H
|
|
GMIF_PCXT EQU (1 SHL GMIF_PCXT_BIT)
|
|
GMIF_MCA_BIT EQU 12H
|
|
GMIF_MCA EQU (1 SHL GMIF_MCA_BIT)
|
|
GMIF_EISA_BIT EQU 13H
|
|
GMIF_EISA EQU (1 SHL GMIF_EISA_BIT)
|
|
GMIF_CPUID_BIT EQU 14H
|
|
GMIF_CPUID EQU (1 SHL GMIF_CPUID_BIT)
|
|
GMIF_80586_BIT EQU 15H
|
|
GMIF_80586 EQU (1 SHL GMIF_80586_BIT)
|
|
GMIF_4MEGPG_BIT EQU 16H
|
|
GMIF_4MEGPG EQU (1 SHL GMIF_4MEGPG_BIT)
|
|
GMIF_RDTSC_BIT EQU 17H
|
|
GMIF_RDTSC EQU (1 SHL GMIF_RDTSC_BIT)
|
|
VMM_Service GetSet_HMA_Info
|
|
VMM_Service Set_System_Exit_Code
|
|
VMM_Service Fatal_Error_Handler
|
|
VMM_Service Fatal_Memory_Error
|
|
VMM_Service Update_System_Clock
|
|
VMM_Service Test_Debug_Installed
|
|
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
|
|
.errnz @@Test_DBCS_Lead_Byte - 100D1h
|
|
|
|
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
|
|
AFPP_SWAPOUT EQU 0001H
|
|
PCP_CHANGEPAGER EQU 1H
|
|
PCP_CHANGEPAGERDATA EQU 2H
|
|
PCP_VIRGINONLY EQU 4H
|
|
GNA_HIDOSLINKED EQU 0002H
|
|
GNA_ISHIGHDOS EQU 0004H
|
|
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
|
|
GSDVME_PRIVINST EQU 00010001H
|
|
GSDVME_INVALINST EQU 00010002H
|
|
GSDVME_INVALPGFLT EQU 00010003H
|
|
GSDVME_INVALGPFLT EQU 00010004H
|
|
GSDVME_INVALFLT EQU 00010005H
|
|
GSDVME_USERNUKE EQU 00010006H
|
|
GSDVME_DEVNUKE EQU 00010007H
|
|
GSDVME_DEVNUKEHDWR EQU 00010008H
|
|
GSDVME_NUKENOMSG EQU 00010009H
|
|
GSDVME_OKNUKEMASK EQU 80000000H
|
|
GSDVME_INSMEMV86 EQU 00020001H
|
|
GSDVME_INSV86SPACE EQU 00020002H
|
|
GSDVME_INSMEMXMS EQU 00020003H
|
|
GSDVME_INSMEMEMS EQU 00020004H
|
|
GSDVME_INSMEMV86HI EQU 00020005H
|
|
GSDVME_INSMEMVID EQU 00020006H
|
|
GSDVME_INSMEMVM EQU 00020007H
|
|
GSDVME_INSMEMDEV EQU 00020008H
|
|
GSDVME_CRTNOMSG EQU 00020009H
|
|
VMM_Service Is_Debug_Chr
|
|
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
|
|
VMM_Service Locate_Byte_In_ROM, VMM_ICODE
|
|
VMM_Service Hook_Invalid_Page_Fault
|
|
VMM_Service Unhook_Invalid_Page_Fault
|
|
IPF_PGDIR EQU 00000001H
|
|
IPF_V86PG EQU 00000002H
|
|
IPF_V86PGH EQU 00000004H
|
|
IPF_INVTYP EQU 00000008H
|
|
IPF_PGERR EQU 00000010H
|
|
IPF_REFLT EQU 00000020H
|
|
IPF_VMM EQU 00000040H
|
|
IPF_PM EQU 00000080H
|
|
IPF_V86 EQU 00000100H
|
|
VMM_Service Set_Delete_On_Exit_File
|
|
VMM_Service Close_VM
|
|
CVF_CONTINUE_EXEC_BIT EQU 0
|
|
CVF_CONTINUE_EXEC EQU (1 SHL CVF_CONTINUE_EXEC_BIT)
|
|
VMM_Service Enable_Touch_1st_Meg
|
|
VMM_Service Disable_Touch_1st_Meg
|
|
VMM_Service Install_Exception_Handler
|
|
VMM_Service Remove_Exception_Handler
|
|
VMM_Service Get_Crit_Status_No_Block
|
|
|
|
.errnz @@Get_Crit_Status_No_Block - 100F1h
|
|
|
|
ifdef WIN40SERVICES
|
|
VMM_Service _GetLastUpdatedThreadExecTime
|
|
VMM_Service _Trace_Out_Service
|
|
VMM_Service _Debug_Out_Service
|
|
VMM_Service _Debug_Flags_Service
|
|
endif
|
|
DFS_LOG_BIT EQU 0
|
|
DFS_LOG EQU (1 SHL DFS_LOG_BIT)
|
|
DFS_PROFILE_BIT EQU 1
|
|
DFS_PROFILE EQU (1 SHL DFS_PROFILE_BIT)
|
|
DFS_TEST_CLD_BIT EQU 2
|
|
DFS_TEST_CLD EQU (1 SHL DFS_TEST_CLD_BIT)
|
|
DFS_NEVER_REENTER_BIT EQU 3
|
|
DFS_NEVER_REENTER EQU (1 SHL DFS_NEVER_REENTER_BIT)
|
|
DFS_TEST_REENTER_BIT EQU 4
|
|
DFS_TEST_REENTER EQU (1 SHL DFS_TEST_REENTER_BIT)
|
|
DFS_NOT_SWAPPING_BIT EQU 5
|
|
DFS_NOT_SWAPPING EQU (1 SHL DFS_NOT_SWAPPING_BIT)
|
|
DFS_TEST_BLOCK_BIT EQU 6
|
|
DFS_TEST_BLOCK EQU (1 SHL DFS_TEST_BLOCK_BIT)
|
|
DFS_RARE_SERVICES EQU 0FFFFFF80H
|
|
DFS_EXIT_NOBLOCK EQU (DFS_RARE_SERVICES+0)
|
|
DFS_ENTER_NOBLOCK EQU (DFS_RARE_SERVICES+DFS_TEST_BLOCK)
|
|
DFS_TEST_NEST_EXEC EQU (DFS_RARE_SERVICES+1)
|
|
DFS_WIMP_DEBUG EQU (DFS_RARE_SERVICES+2)
|
|
ifdef WIN40SERVICES
|
|
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
|
|
MUTEX_MUST_COMPLETE EQU 1
|
|
MUTEX_NO_CLEANUP_THREAD_STATE EQU 2
|
|
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_Service Get_Initial_Thread_Handle
|
|
VMM_Service Test_Initial_Thread_Handle
|
|
VMM_Service Debug_Test_Valid_Thread_Handle
|
|
VMM_Service Debug_Test_Cur_Thread
|
|
VMM_Service VMM_GetSystemInitState
|
|
VMM_Service Cancel_Call_When_Thread_Switched
|
|
VMM_Service Get_Next_Thread_Handle
|
|
VMM_Service Adjust_Thread_Exec_Priority
|
|
VMM_Service _Deallocate_Device_CB_Area
|
|
VMM_Service Remove_IO_Handler
|
|
VMM_Service Remove_Mult_IO_Handlers
|
|
VMM_Service Unhook_V86_Int_Chain
|
|
VMM_Service Unhook_V86_Fault
|
|
VMM_Service Unhook_PM_Fault
|
|
VMM_Service Unhook_VMM_Fault
|
|
VMM_Service Unhook_Device_Service
|
|
VMM_Service _PageReserve
|
|
VMM_Service _PageCommit
|
|
VMM_Service _PageDecommit
|
|
VMM_Service _PagerRegister
|
|
VMM_Service _PagerQuery
|
|
VMM_Service _PagerDeregister
|
|
VMM_Service _ContextCreate
|
|
VMM_Service _ContextDestroy
|
|
VMM_Service _PageAttach
|
|
VMM_Service _PageFlush
|
|
VMM_Service _SignalID
|
|
VMM_Service _PageCommitPhys
|
|
VMM_Service _Register_Win32_Services
|
|
VMM_Service Cancel_Call_When_Not_Critical
|
|
VMM_Service Cancel_Call_When_Idle
|
|
VMM_Service Cancel_Call_When_Task_Switched
|
|
VMM_Service _Debug_Printf_Service
|
|
VMM_Service _EnterMutex
|
|
VMM_Service _LeaveMutex
|
|
VMM_Service Simulate_VM_IO
|
|
VMM_Service Signal_Semaphore_No_Switch
|
|
VMM_Service _ContextSwitch
|
|
VMM_Service _PageModifyPermissions
|
|
VMM_Service _PageQuery
|
|
VMM_Service _EnterMustComplete
|
|
VMM_Service _LeaveMustComplete
|
|
VMM_Service _ResumeExecMustComplete
|
|
THREAD_TERM_STATUS_CRASH_PEND EQU 1
|
|
THREAD_TERM_STATUS_NUKE_PEND EQU 2
|
|
THREAD_TERM_STATUS_SUSPEND_PEND EQU 4
|
|
VMM_Service _GetThreadTerminationStatus
|
|
VMM_Service _GetInstanceInfo
|
|
INSTINFO_NONE EQU 0
|
|
INSTINFO_SOME EQU 1
|
|
INSTINFO_ALL EQU 2
|
|
VMM_Service _ExecIntMustComplete
|
|
VMM_Service _ExecVxDIntMustComplete
|
|
VMM_Service Begin_V86_Serialization
|
|
VMM_Service Unhook_V86_Page
|
|
VMM_Service VMM_GetVxDLocationList
|
|
VMM_Service VMM_GetDDBList
|
|
VMM_Service Unhook_NMI_Event
|
|
VMM_Service Get_Instanced_V86_Int_Vector
|
|
VMM_Service Get_Set_Real_DOS_PSP
|
|
GSRDP_Set EQU 0001H
|
|
VMM_Service Call_Priority_Thread_Event
|
|
VMM_Service Get_System_Time_Address
|
|
VMM_Service Get_Crit_Status_Thread
|
|
VMM_Service Get_DDB
|
|
VMM_Service Directed_Sys_Control
|
|
VMM_Service _RegOpenKey
|
|
VMM_Service _RegCloseKey
|
|
VMM_Service _RegCreateKey
|
|
VMM_Service _RegDeleteKey
|
|
VMM_Service _RegEnumKey
|
|
VMM_Service _RegQueryValue
|
|
VMM_Service _RegSetValue
|
|
VMM_Service _RegDeleteValue
|
|
VMM_Service _RegEnumValue
|
|
VMM_Service _RegQueryValueEx
|
|
VMM_Service _RegSetValueEx
|
|
ifndef REG_SZ
|
|
REG_SZ EQU 0001H
|
|
REG_BINARY EQU 0003H
|
|
endif
|
|
ifndef HKEY_LOCAL_MACHINE
|
|
HKEY_CLASSES_ROOT EQU 80000000H
|
|
HKEY_CURRENT_USER EQU 80000001H
|
|
HKEY_LOCAL_MACHINE EQU 80000002H
|
|
HKEY_USERS EQU 80000003H
|
|
HKEY_PERFORMANCE_DATA EQU 80000004H
|
|
HKEY_CURRENT_CONFIG EQU 80000005H
|
|
HKEY_DYN_DATA EQU 80000006H
|
|
endif
|
|
VMM_Service _CallRing3
|
|
VMM_Service Exec_PM_Int
|
|
VMM_Service _RegFlushKey
|
|
VMM_Service _PageCommitContig
|
|
VMM_Service _GetCurrentContext
|
|
VMM_Service _LocalizeSprintf
|
|
VMM_Service _LocalizeStackSprintf
|
|
VMM_Service Call_Restricted_Event
|
|
VMM_Service Cancel_Restricted_Event
|
|
VMM_Service Register_PEF_Provider, VMM_ICODE
|
|
VMM_Service _GetPhysPageInfo
|
|
VMM_Service _RegQueryInfoKey
|
|
VMM_Service MemArb_Reserve_Pages
|
|
PHYSINFO_NONE EQU 0
|
|
PHYSINFO_SOME EQU 1
|
|
PHYSINFO_ALL EQU 2
|
|
VMM_Service Time_Slice_Sys_VM_Idle
|
|
VMM_Service Time_Slice_Sleep
|
|
VMM_Service Boost_With_Decay
|
|
VMM_Service Set_Inversion_Pri
|
|
VMM_Service Reset_Inversion_Pri
|
|
VMM_Service Release_Inversion_Pri
|
|
VMM_Service Get_Thread_Win32_Pri
|
|
VMM_Service Set_Thread_Win32_Pri
|
|
VMM_Service Set_Thread_Static_Boost
|
|
VMM_Service Set_VM_Static_Boost
|
|
VMM_Service Release_Inversion_Pri_ID
|
|
VMM_Service Attach_Thread_To_Group
|
|
VMM_Service Detach_Thread_From_Group
|
|
VMM_Service Set_Group_Static_Boost
|
|
VMM_Service _GetRegistryPath, VMM_ICODE
|
|
VMM_Service _GetRegistryKey
|
|
REGTYPE_ENUM EQU 0
|
|
REGTYPE_CLASS EQU 1
|
|
REGTYPE_VXD EQU 2
|
|
REGKEY_OPEN EQU 0
|
|
REGKEY_CREATE_IFNOTEXIST EQU 1
|
|
ASSERT_RANGE_NULL_BAD EQU 00000000H
|
|
ASSERT_RANGE_NULL_OK EQU 00000001H
|
|
ASSERT_RANGE_IS_ASCIIZ EQU 00000002H
|
|
ASSERT_RANGE_IS_NOT_ASCIIZ EQU 00000000H
|
|
ASSERT_RANGE_NO_DEBUG EQU 80000000H
|
|
ASSERT_RANGE_BITS EQU 80000003H
|
|
VMM_Service Cleanup_Thread_State
|
|
VMM_Service _RegRemapPreDefKey
|
|
VMM_Service End_V86_Serialization
|
|
VMM_Service _Assert_Range
|
|
VMM_Service _Sprintf
|
|
VMM_Service _PageChangePager
|
|
VMM_Service _RegCreateDynKey
|
|
VMM_Service _RegQueryMultipleValues
|
|
VMM_Service Boost_Thread_With_VM
|
|
BOOT_CLEAN EQU 00000001H
|
|
BOOT_DOSCLEAN EQU 00000002H
|
|
BOOT_NETCLEAN EQU 00000004H
|
|
BOOT_INTERACTIVE EQU 00000008H
|
|
VMM_Service Get_Boot_Flags
|
|
VMM_Service Set_Boot_Flags
|
|
VMM_Service _lstrcpyn
|
|
VMM_Service _lstrlen
|
|
VMM_Service _lmemcpy
|
|
VMM_Service _GetVxDName
|
|
VMM_Service Force_Mutexes_Free
|
|
VMM_Service Restore_Forced_Mutexes
|
|
VMM_Service _AddReclaimableItem
|
|
VMM_Service _SetReclaimableItem
|
|
VMM_Service _EnumReclaimableItem
|
|
VMM_Service Time_Slice_Wake_Sys_VM
|
|
VMM_Service VMM_Replace_Global_Environment
|
|
VMM_Service Begin_Non_Serial_Nest_V86_Exec
|
|
VMM_Service Get_Nest_Exec_Status
|
|
VMM_Service Open_Boot_Log
|
|
VMM_Service Write_Boot_Log
|
|
VMM_Service Close_Boot_Log
|
|
VMM_Service EnableDisable_Boot_Log
|
|
VMM_Service _Call_On_My_Stack
|
|
VMM_Service Get_Inst_V86_Int_Vec_Base
|
|
VMM_Service _lstrcmpi
|
|
VMM_Service _strupr
|
|
VMM_Service Log_Fault_Call_Out
|
|
VMM_Service _AtEventTime
|
|
endif
|
|
ifdef WIN403SERVICES
|
|
VMM_Service _PageOutPages
|
|
PAGEOUT_PRIVATE EQU 00000001H
|
|
PAGEOUT_SHARED EQU 00000002H
|
|
PAGEOUT_SYSTEM EQU 00000004H
|
|
PAGEOUT_REGION EQU 00000008H
|
|
PAGEOUT_ALL EQU (PAGEOUT_PRIVATE OR PAGEOUT_SHARED OR PAGEOUT_SYSTEM)
|
|
VMM_Service _Call_On_My_Not_Flat_Stack
|
|
VMM_Service _LinRegionLock
|
|
VMM_Service _LinRegionUnLock
|
|
VMM_Service _AttemptingSomethingDangerous
|
|
VMM_Service _Vsprintf
|
|
VMM_Service _Vsprintfw
|
|
VMM_Service Load_FS_Service
|
|
VMM_Service Assert_FS_Service
|
|
VMM_StdCall_Service ObsoleteRtlUnwind, 4
|
|
VMM_StdCall_Service ObsoleteRtlRaiseException, 1
|
|
VMM_StdCall_Service ObsoleteRtlRaiseStatus, 1
|
|
VMM_StdCall_Service ObsoleteKeGetCurrentIrql, 0
|
|
VMM_FastCall_Service ObsoleteKfRaiseIrql, 1
|
|
VMM_FastCall_Service ObsoleteKfLowerIrql, 1
|
|
VMM_Service _Begin_Preemptable_Code
|
|
VMM_Service _End_Preemptable_Code
|
|
VMM_FastCall_Service Set_Preemptable_Count, 1
|
|
VMM_StdCall_Service ObsoleteKeInitializeDpc, 3
|
|
VMM_StdCall_Service ObsoleteKeInsertQueueDpc, 3
|
|
VMM_StdCall_Service ObsoleteKeRemoveQueueDpc, 1
|
|
VMM_StdCall_Service HeapAllocateEx, 4
|
|
VMM_StdCall_Service HeapReAllocateEx, 5
|
|
VMM_StdCall_Service HeapGetSizeEx, 2
|
|
VMM_StdCall_Service HeapFreeEx, 2
|
|
VMM_Service _Get_CPUID_Flags
|
|
VMM_StdCall_Service KeCheckDivideByZeroTrap, 1
|
|
endif
|
|
ifdef WIN41SERVICES
|
|
VMM_Service _RegisterGARTHandler
|
|
VMM_Service _GARTReserve
|
|
VMM_Service _GARTCommit
|
|
VMM_Service _GARTUnCommit
|
|
VMM_Service _GARTFree
|
|
VMM_Service _GARTMemAttributes
|
|
VMM_StdCall_Service KfRaiseIrqlToDpcLevel, 0
|
|
VMM_Service VMMCreateThreadEx
|
|
VMM_Service _FlushCaches
|
|
PG_UNCACHED EQU 00000001H
|
|
PG_WRITECOMBINED EQU 00000002H
|
|
FLUSHCACHES_NORMAL EQU 00000000H
|
|
FLUSHCACHES_GET_CACHE_LINE_PTR EQU 00000001H
|
|
FLUSHCACHES_GET_CACHE_SIZE_PTR EQU 00000002H
|
|
FLUSHCACHES_TAKE_OVER EQU 00000003H
|
|
FLUSHCACHES_FORCE_PAGES_OUT EQU 00000004H
|
|
FLUSHCACHES_LOCK_LOCKABLE EQU 00000005H
|
|
FLUSHCACHES_UNLOCK_LOCKABLE EQU 00000006H
|
|
VMM_Service Set_Thread_Win32_Pri_NoYield
|
|
VMM_Service _FlushMappedCacheBlock
|
|
VMM_Service _ReleaseMappedCacheBlock
|
|
VMM_Service Run_Preemptable_Events
|
|
VMM_Service _MMPreSystemExit
|
|
VMM_Service _MMPageFileShutDown
|
|
VMM_Service _Set_Global_Time_Out_Ex
|
|
VMM_Service Query_Thread_Priority
|
|
endif
|
|
End_Service_Table VMM, VMM
|
|
COMNFS_FLAT EQU 0FFFFFFFFH
|
|
RS_RECLAIM EQU 00000001H
|
|
RS_RESTORE EQU 00000002H
|
|
RS_DOSARENA EQU 00000004H
|
|
|
|
ReclaimStruc STRUC
|
|
RS_Linear DD ?
|
|
RS_Bytes DD ?
|
|
RS_CallBack DD ?
|
|
RS_RefData DD ?
|
|
RS_HookTable DD ?
|
|
RS_Flags DD ?
|
|
ReclaimStruc ENDS
|
|
|
|
frmtx STRUC
|
|
frmtx_pfrmtxNext DD ?
|
|
frmtx_hmutex DD ?
|
|
frmtx_cEnterCount DD ?
|
|
frmtx_pthcbOwner DD ?
|
|
frmtx_htimeout DD ?
|
|
frmtx ENDS
|
|
|
|
vmmfrinfo STRUC
|
|
vmmfrinfo_frmtxDOS DB SIZE frmtx DUP (?)
|
|
vmmfrinfo_frmtxV86 DB SIZE frmtx DUP (?)
|
|
vmmfrinfo_frmtxOther DB SIZE frmtx DUP (?)
|
|
vmmfrinfo ENDS
|
|
|
|
DemandInfoStruc STRUC
|
|
DILin_Total_Count DD ?
|
|
DIPhys_Count DD ?
|
|
DIFree_Count DD ?
|
|
DIUnlock_Count DD ?
|
|
DILinear_Base_Addr DD ?
|
|
DILin_Total_Free DD ?
|
|
DIPage_Faults DD ?
|
|
DIPage_Ins DD ?
|
|
DIPage_Outs DD ?
|
|
DIPage_Discards DD ?
|
|
DIInstance_Faults DD ?
|
|
DIPagingFileMax DD ?
|
|
DIPagingFileInUse DD ?
|
|
DICommit_Count DD ?
|
|
DIReserved DD 2 DUP (?)
|
|
DemandInfoStruc ENDS
|
|
|
|
InstDataStruc STRUC
|
|
InstLinkF DD 0
|
|
InstLinkB DD 0
|
|
InstLinAddr DD ?
|
|
InstSize DD ?
|
|
InstType DD ?
|
|
InstDataStruc ENDS
|
|
INDOS_FIELD EQU 100H
|
|
ALWAYS_FIELD EQU 200H
|
|
OPTIONAL_FIELD EQU 400H
|
|
|
|
IPF_Data STRUC
|
|
IPF_LinAddr DD ?
|
|
IPF_MapPageNum DD ?
|
|
IPF_PTEEntry DD ?
|
|
IPF_FaultingVM DD ?
|
|
IPF_Flags DD ?
|
|
IPF_Data ENDS
|
|
|
|
Exception_Handler_Struc STRUC
|
|
EH_Reserved DD ?
|
|
EH_Start_EIP DD ?
|
|
EH_End_EIP DD ?
|
|
EH_Handler DD ?
|
|
Exception_Handler_Struc ENDS
|
|
PR_PRIVATE EQU 80000400H
|
|
PR_SHARED EQU 80060000H
|
|
PR_SYSTEM EQU 80080000H
|
|
PR_FIXED EQU 00000008H
|
|
PR_4MEG EQU 00000001H
|
|
PR_STATIC EQU 00000010H
|
|
PD_ZEROINIT EQU 00000001H
|
|
PD_NOINIT EQU 00000002H
|
|
PD_FIXEDZERO EQU 00000003H
|
|
PD_FIXED EQU 00000004H
|
|
PC_FIXED EQU 00000008H
|
|
PC_LOCKED EQU 00000080H
|
|
PC_LOCKEDIFDP EQU 00000100H
|
|
PC_WRITEABLE EQU 00020000H
|
|
PC_USER EQU 00040000H
|
|
PC_INCR EQU 40000000H
|
|
PC_PRESENT EQU 80000000H
|
|
PC_STATIC EQU 20000000H
|
|
PC_DIRTY EQU 08000000H
|
|
PC_CACHEDIS EQU 00100000H
|
|
PC_CACHEWT EQU 00080000H
|
|
PC_PAGEFLUSH EQU 00008000H
|
|
ifdef WRITE_WATCH
|
|
PC_WRITE_WATCH EQU 00200000H
|
|
endif
|
|
PCC_ZEROINIT EQU 00000001H
|
|
PCC_NOLIN EQU 10000000H
|
|
MTRR_UC EQU 0
|
|
MTRR_WC EQU 1
|
|
MTRR_WT EQU 4
|
|
MTRR_WP EQU 5
|
|
MTRR_WB EQU 6
|
|
ifndef _WINNT_
|
|
|
|
_MEMORY_BASIC_INFORMATION STRUC
|
|
mbi_BaseAddress DD ?
|
|
mbi_AllocationBase DD ?
|
|
mbi_AllocationProtect DD ?
|
|
mbi_RegionSize DD ?
|
|
mbi_State DD ?
|
|
mbi_Protect DD ?
|
|
mbi_Type DD ?
|
|
_MEMORY_BASIC_INFORMATION ENDS
|
|
PAGE_NOACCESS EQU 01H
|
|
PAGE_READONLY EQU 02H
|
|
PAGE_READWRITE EQU 04H
|
|
MEM_COMMIT EQU 1000H
|
|
MEM_RESERVE EQU 2000H
|
|
MEM_FREE EQU 10000H
|
|
MEM_PRIVATE EQU 20000H
|
|
endif
|
|
|
|
pd_s STRUC
|
|
pd_virginin DD ?
|
|
pd_taintedin DD ?
|
|
pd_cleanout DD ?
|
|
pd_dirtyout DD ?
|
|
pd_virginfree DD ?
|
|
pd_taintedfree DD ?
|
|
pd_dirty DD ?
|
|
pd_type DD ?
|
|
pd_s ENDS
|
|
PD_SWAPPER EQU 0
|
|
PD_PAGERONLY EQU 1
|
|
PD_NESTEXEC EQU 2
|
|
endif
|
|
PAGESHIFT EQU 12
|
|
PAGESIZE EQU (1 SHL PAGESHIFT)
|
|
PAGEMASK EQU (PAGESIZE-1)
|
|
MAXSYSTEMLADDR EQU (0ffbfffffH)
|
|
MINSYSTEMLADDR EQU (0c0000000H)
|
|
MAXSHAREDLADDR EQU (0bfffffffH)
|
|
MINSHAREDLADDR EQU (80000000H)
|
|
MAXPRIVATELADDR EQU (7fffffffH)
|
|
MINPRIVATELADDR EQU (00400000H)
|
|
MAXDOSLADDR EQU (003fffffH)
|
|
MINDOSLADDR EQU (00000000H)
|
|
MAXSYSTEMPAGE EQU (MAXSYSTEMLADDR SHR PAGESHIFT)
|
|
MINSYSTEMPAGE EQU (MINSYSTEMLADDR SHR PAGESHIFT)
|
|
MAXSHAREDPAGE EQU (MAXSHAREDLADDR SHR PAGESHIFT)
|
|
MINSHAREDPAGE EQU (MINSHAREDLADDR SHR PAGESHIFT)
|
|
MAXPRIVATEPAGE EQU (MAXPRIVATELADDR SHR PAGESHIFT)
|
|
MINPRIVATEPAGE EQU (MINPRIVATELADDR SHR PAGESHIFT)
|
|
MAXDOSPAGE EQU (MAXDOSLADDR SHR PAGESHIFT)
|
|
MINDOSPAGE EQU (MINDOSLADDR SHR PAGESHIFT)
|
|
CBPRIVATE EQU (1+MAXPRIVATELADDR-MINPRIVATELADDR)
|
|
CBSHARED EQU (1+MAXSHAREDLADDR-MINSHAREDLADDR)
|
|
CBSYSTEM EQU (1+MAXSYSTEMLADDR-MINSYSTEMLADDR)
|
|
CBDOS EQU (1+MAXDOSLADDR-MINDOSLADDR)
|
|
CPGPRIVATE EQU (1+MAXPRIVATEPAGE-MINPRIVATEPAGE)
|
|
CPGSHARED EQU (1+MAXSHAREDPAGE-MINSHAREDPAGE)
|
|
CPGSYSTEM EQU (1+MAXSYSTEMPAGE-MINSYSTEMPAGE)
|
|
CPGDOS EQU (1+MAXDOSPAGE-MINDOSPAGE)
|
|
IFDEF DEBUG
|
|
DebFar EQU NEAR PTR
|
|
ELSE
|
|
DebFar EQU SHORT
|
|
ENDIF
|
|
|
|
ASD_MAX_REF_DATA EQU 256
|
|
|
|
_vmmguid STRUC
|
|
Data1 DD ?
|
|
Data2 DW ?
|
|
Data3 DW ?
|
|
Data4 DB 8 DUP (?)
|
|
_vmmguid ENDS
|
|
ASD_ERROR_NONE EQU 00000000H
|
|
ASD_CHECK_FAIL EQU 00000001H
|
|
ASD_CHECK_SUCCESS EQU 00000002H
|
|
ASD_CHECK_UNKNOWN EQU 00000003H
|
|
ASD_ERROR_BAD_TIME EQU 00000004H
|
|
ASD_REGISTRY_ERROR EQU 00000005H
|
|
ASD_CLEAN_BOOT EQU 00000006H
|
|
ASD_OUT_OF_MEMORY EQU 00000007H
|
|
ASD_FILE_ERROR EQU 00000008H
|
|
ASD_ALREADY_SET EQU 00000009H
|
|
ASD_MISSING_CHECK EQU 0000000AH
|
|
ASD_BAD_PARAMETER EQU 0000000BH
|
|
ASD_OP_CHECK_AND_WRITE_FAIL_IF_UNKNOWN EQU 00000000H
|
|
ASD_OP_CHECK_AND_ALWAYS_WRITE_FAIL EQU 00000001H
|
|
ASD_OP_CHECK EQU 00000002H
|
|
ASD_OP_DONE_AND_SET_SUCCESS EQU 00000003H
|
|
ASD_OP_SET_FAIL EQU 00000004H
|
|
ASD_OP_SET_SUCCESS EQU 00000005H
|
|
ASD_OP_SET_UNKNOWN EQU 00000006H
|
|
ASD_OP_DONE EQU 00000007H
|
|
ASD_FLAG_STRING EQU 00000001H
|
|
ifndef Not_VxD
|
|
SYS_CRITICAL_INIT EQU 0000H
|
|
DEVICE_INIT EQU 0001H
|
|
INIT_COMPLETE EQU 0002H
|
|
SYS_VM_INIT EQU 0003H
|
|
SYS_VM_TERMINATE EQU 0004H
|
|
SYSTEM_EXIT EQU 0005H
|
|
SYS_CRITICAL_EXIT EQU 0006H
|
|
CREATE_VM EQU 0007H
|
|
VM_CRITICAL_INIT EQU 0008H
|
|
VM_INIT EQU 0009H
|
|
VM_TERMINATE EQU 000AH
|
|
VM_NOT_EXECUTEABLE EQU 000BH
|
|
DESTROY_VM EQU 000CH
|
|
VNE_CRASHED_BIT EQU 00H
|
|
VNE_CRASHED EQU (1 SHL VNE_CRASHED_BIT)
|
|
VNE_NUKED_BIT EQU 01H
|
|
VNE_NUKED EQU (1 SHL VNE_NUKED_BIT)
|
|
VNE_CREATEFAIL_BIT EQU 02H
|
|
VNE_CREATEFAIL EQU (1 SHL VNE_CREATEFAIL_BIT)
|
|
VNE_CRINITFAIL_BIT EQU 03H
|
|
VNE_CRINITFAIL EQU (1 SHL VNE_CRINITFAIL_BIT)
|
|
VNE_INITFAIL_BIT EQU 04H
|
|
VNE_INITFAIL EQU (1 SHL VNE_INITFAIL_BIT)
|
|
VNE_CLOSED_BIT EQU 05H
|
|
VNE_CLOSED EQU (1 SHL VNE_CLOSED_BIT)
|
|
VM_SUSPEND EQU 000DH
|
|
VM_RESUME EQU 000EH
|
|
SET_DEVICE_FOCUS EQU 000FH
|
|
BEGIN_MESSAGE_MODE EQU 0010H
|
|
END_MESSAGE_MODE EQU 0011H
|
|
REBOOT_PROCESSOR EQU 0012H
|
|
QUERY_DESTROY EQU 0013H
|
|
DEBUG_QUERY EQU 0014H
|
|
BEGIN_PM_APP EQU 0015H
|
|
BPA_32_BIT EQU 01H
|
|
BPA_32_BIT_FLAG EQU 1
|
|
END_PM_APP EQU 0016H
|
|
DEVICE_REBOOT_NOTIFY EQU 0017H
|
|
CRIT_REBOOT_NOTIFY EQU 0018H
|
|
CLOSE_VM_NOTIFY EQU 0019H
|
|
CVNF_CRIT_CLOSE_BIT EQU 0
|
|
CVNF_CRIT_CLOSE EQU (1 SHL CVNF_CRIT_CLOSE_BIT)
|
|
POWER_EVENT EQU 001AH
|
|
SYS_DYNAMIC_DEVICE_INIT EQU 001BH
|
|
SYS_DYNAMIC_DEVICE_EXIT EQU 001CH
|
|
CREATE_THREAD EQU 001DH
|
|
THREAD_INIT EQU 001EH
|
|
TERMINATE_THREAD EQU 001FH
|
|
THREAD_Not_Executeable EQU 0020H
|
|
DESTROY_THREAD EQU 0021H
|
|
PNP_NEW_DEVNODE EQU 0022H
|
|
W32_DEVICEIOCONTROL EQU 0023H
|
|
DIOC_GETVERSION EQU 0H
|
|
DIOC_OPEN EQU DIOC_GETVERSION
|
|
DIOC_CLOSEHANDLE EQU -1
|
|
SYS_VM_TERMINATE2 EQU 0024H
|
|
SYSTEM_EXIT2 EQU 0025H
|
|
SYS_CRITICAL_EXIT2 EQU 0026H
|
|
VM_TERMINATE2 EQU 0027H
|
|
VM_NOT_EXECUTEABLE2 EQU 0028H
|
|
DESTROY_VM2 EQU 0029H
|
|
VM_SUSPEND2 EQU 002AH
|
|
END_MESSAGE_MODE2 EQU 002BH
|
|
END_PM_APP2 EQU 002CH
|
|
DEVICE_REBOOT_NOTIFY2 EQU 002DH
|
|
CRIT_REBOOT_NOTIFY2 EQU 002EH
|
|
CLOSE_VM_NOTIFY2 EQU 002FH
|
|
GET_CONTENTION_HANDLER EQU 0030H
|
|
KERNEL32_INITIALIZED EQU 0031H
|
|
KERNEL32_SHUTDOWN EQU 0032H
|
|
CREATE_PROCESS EQU 0033H
|
|
DESTROY_PROCESS EQU 0034H
|
|
ifndef WIN40COMPAT
|
|
SYS_DYNAMIC_DEVICE_REINIT EQU 0035H
|
|
endif
|
|
SYS_POWER_DOWN EQU 0036H
|
|
MAX_SYSTEM_CONTROL EQU 0036H
|
|
BEGIN_RESERVED_PRIVATE_SYSTEM_CONTROL EQU 70000000H
|
|
END_RESERVED_PRIVATE_SYSTEM_CONTROL EQU 7FFFFFFFH
|
|
endif
|
|
SYSSTATE_PRESYSCRITINIT EQU 00000000H
|
|
SYSSTATE_PREDEVICEINIT EQU 10000000H
|
|
SYSSTATE_PREINITCOMPLETE EQU 20000000H
|
|
SYSSTATE_VXDINITCOMPLETED EQU 40000000H
|
|
SYSSTATE_KERNEL32INITED EQU 50000000H
|
|
SYSSTATE_KERNEL32TERMINATED EQU 0A0000000H
|
|
SYSSTATE_PRESYSVMTERMINATE EQU 0B0000000H
|
|
SYSSTATE_PRESYSTEMEXIT EQU 0E0000000H
|
|
SYSSTATE_PRESYSTEMEXIT2 EQU 0E4000000H
|
|
SYSSTATE_PRESYSCRITEXIT EQU 0F0000000H
|
|
SYSSTATE_PRESYSCRITEXIT2 EQU 0F4000000H
|
|
SYSSTATE_POSTSYSCRITEXIT2 EQU 0FFF00000H
|
|
SYSSTATE_PREDEVICEREBOOT EQU 0FFFF0000H
|
|
SYSSTATE_PRECRITREBOOT EQU 0FFFFF000H
|
|
SYSSTATE_PREREBOOTCPU EQU 0FFFFFF00H
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
??_pf_Check equ 1
|
|
??_pf_ArgsUsed equ 2
|
|
??_pf_Entered equ 4
|
|
??_pf_Left equ 8
|
|
??_pf_Returned equ 16
|
|
|
|
??_pushed = 0
|
|
??_align = 0
|
|
??_ends equ <>
|
|
|
|
BeginProc macro Name, P1, P2, P3, P4, P5, P6, P7, LastArg
|
|
local Profile_Data, prelabeldata, ??_hookvar
|
|
??_frame = 0
|
|
??_aframe = 0
|
|
??_taframe = 0
|
|
??_initaframe = 0
|
|
??_numargs = 0
|
|
??_numlocals = 0
|
|
??_numlocalsymbols = 0
|
|
??_procflags = 0
|
|
??_esp = 0
|
|
??_pushed = 0
|
|
??_align = 0
|
|
??_hook = 0
|
|
??_hookarg = 0
|
|
??_service = 0
|
|
??_async_service = 0
|
|
IF DEBLEVEL GT DEBLEVELNORMAL
|
|
??_log = DFS_LOG
|
|
??_profile = DFS_PROFILE
|
|
??_test_cld = DFS_TEST_CLD
|
|
ELSE
|
|
??_log = 0
|
|
IFDEF DEBUG
|
|
IFDEF profileall
|
|
IF ?_ICODE
|
|
??_profile = DFS_PROFILE
|
|
ELSE
|
|
??_profile = 0
|
|
ENDIF
|
|
ELSE
|
|
??_profile = 0
|
|
ENDIF
|
|
ELSE
|
|
??_profile = 0
|
|
ENDIF
|
|
??_test_cld = 0
|
|
ENDIF
|
|
??_might_block = 0
|
|
??_test_reenter = 0
|
|
??_never_reenter = 0
|
|
??_not_swapping = 0
|
|
??_prolog_disabled = 0
|
|
??_public = 1
|
|
??_cleanoff = 0
|
|
??_ccall = 0
|
|
??_pcall = 0
|
|
??_scall = 0
|
|
??_fastcall = 0
|
|
??_w32svc = 0
|
|
??_fleave = FALSE
|
|
|
|
??_name equ <Name>
|
|
|
|
.errnb ??_ends, <Cannot nest functions with named segments>
|
|
.errnb <LastArg>, <Too many arguments to BeginProc>
|
|
|
|
|
|
irp arg, <P1, P2, P3, P4, P5, P6, P7>
|
|
if ??_hookarg
|
|
??_hookarg = 0
|
|
??_hookvar equ <arg>
|
|
elseifdef ?&&arg&&_BeginProc
|
|
?&&arg&&_BeginProc
|
|
elseifdef VxD_&&arg&&_CODE_SEG
|
|
??_ends textequ <VxD_&&arg&&_CODE_ENDS>
|
|
VxD_&&arg&&_CODE_SEG
|
|
else
|
|
.err <Bad param "&arg" to BeginProc>
|
|
endif
|
|
endm
|
|
|
|
|
|
ifndef Not_VxD
|
|
ife ??_service
|
|
ifndef profileall
|
|
??_profile = 0
|
|
endif
|
|
ifdef VMMSYS
|
|
??_prolog_disabled = 1
|
|
endif
|
|
else
|
|
??_test_cld = DFS_TEST_CLD
|
|
endif
|
|
|
|
ife ?_16ICODE
|
|
??_prolog_disabled = 1
|
|
else
|
|
ife ?_RCODE
|
|
??_prolog_disabled = 1
|
|
else
|
|
ife ?_PCODE
|
|
??_might_block = DFS_TEST_BLOCK
|
|
endif
|
|
if ??_service
|
|
ife ??_async_service
|
|
??_test_reenter = DFS_TEST_REENTER
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
if ??_esp
|
|
|
|
??_basereg equ <esp+??_pushed>
|
|
??_initaframe = 4
|
|
else
|
|
|
|
??_basereg equ <ebp>
|
|
??_initaframe = 8
|
|
endif
|
|
@Caller equ <dword ptr [??_basereg+??_initaframe-4]>
|
|
|
|
??_cleanoff = ??_pcall or ??_scall or ??_fastcall
|
|
|
|
|
|
??_dfs = ??_never_reenter + ??_test_reenter + ??_not_swapping + \
|
|
??_log + ??_profile + ??_test_cld + ??_might_block
|
|
|
|
if ??_prolog_disabled
|
|
??_dfs = 0
|
|
endif
|
|
|
|
|
|
|
|
ifndef Not_VxD
|
|
|
|
if ??_hook
|
|
if ??_align
|
|
Dword_Align
|
|
endif
|
|
prelabeldata:
|
|
ifndef ??_hookvar
|
|
.err <HOOK_PROC requires next arg to be name of dword location>
|
|
endif
|
|
jmp short Name
|
|
jmp [??_hookvar]
|
|
ifdef DEBUG
|
|
Profile_Data dd 0
|
|
endif
|
|
if ??_align
|
|
.errnz ($ - prelabeldata) mod 4
|
|
endif
|
|
endif
|
|
|
|
ifdef DEBUG
|
|
?prolog_&Name label near
|
|
if (??_service OR ??_profile) AND (??_hook EQ 0)
|
|
jmp short Name
|
|
if ??_align
|
|
Dword_Align
|
|
endif
|
|
|
|
IF ?_ICODE
|
|
ifdef profileall
|
|
?ProfileHeader_BeginProc Profile_Data, %@filename
|
|
else
|
|
Profile_Data dd 0
|
|
endif
|
|
ELSE
|
|
Profile_Data dd 0
|
|
ENDIF
|
|
|
|
endif
|
|
endif
|
|
|
|
if ??_align
|
|
Dword_Align
|
|
endif
|
|
|
|
endif
|
|
|
|
Name proc near
|
|
|
|
|
|
|
|
ife ??_pcall or ??_ccall or ??_scall or ??_fastcall
|
|
if ??_public
|
|
public Name
|
|
else
|
|
ifdef DEBUG
|
|
% ?merge @FileName,$,Name,:
|
|
% ?merge public,,,,,@FileName,$,Name
|
|
endif
|
|
endif
|
|
endif
|
|
if ??_ccall
|
|
if ??_public
|
|
_&Name equ Name
|
|
ifdef Not_VxD
|
|
public C Name
|
|
else
|
|
public _&Name
|
|
endif
|
|
endif
|
|
endif
|
|
if ??_pcall
|
|
if ??_public
|
|
?toupper Name
|
|
?merge public,,,,%?upper
|
|
endif
|
|
endif
|
|
|
|
|
|
|
|
ife ??_scall or ??_fastcall
|
|
?_BeginProc_Debug_Prologue
|
|
endif
|
|
|
|
|
|
|
|
endm
|
|
|
|
?_BeginProc_Debug_Prologue MACRO
|
|
ifndef Not_VxD
|
|
ifdef DEBUG
|
|
if ??_dfs EQ DFS_LOG
|
|
VMMCall Log_Proc_Call
|
|
else
|
|
if ??_dfs EQ DFS_TEST_REENTER
|
|
VMMCall Test_Reenter
|
|
else
|
|
if ??_dfs or ?_LOCKABLECODE eq 0
|
|
ifdef WIN31COMPAT
|
|
if ??_dfs AND DFS_LOG
|
|
VMMCall Log_Proc_Call
|
|
endif
|
|
if ??_dfs AND DFS_TEST_REENTER
|
|
VMMCall Test_Reenter
|
|
endif
|
|
else
|
|
ife ?_LOCKABLECODE
|
|
ifdef ??_debug_flags
|
|
push ??_debug_flags
|
|
if ??_dfs
|
|
pushfd
|
|
or dword ptr [esp+4],??_dfs
|
|
popfd
|
|
endif
|
|
VMMCall _Debug_Flags_Service
|
|
elseif ??_dfs
|
|
push ??_dfs
|
|
VMMCall _Debug_Flags_Service
|
|
endif
|
|
else
|
|
push ??_dfs
|
|
VMMCall _Debug_Flags_Service
|
|
endif
|
|
endif
|
|
else
|
|
ifdef profileall
|
|
IncProfileCount
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
?_BeginProc macro
|
|
endm
|
|
|
|
?PUBLIC_BeginProc macro
|
|
??_public = 1
|
|
endm
|
|
|
|
?LOCAL_BeginProc macro
|
|
??_public = 0
|
|
endm
|
|
|
|
?HIGH_FREQ_BeginProc macro
|
|
??_align = 1
|
|
endm
|
|
|
|
?HOOK_PROC_BeginProc macro
|
|
??_hook = 1
|
|
??_hookarg = 1
|
|
endm
|
|
|
|
?SERVICE_BeginProc macro
|
|
??_service = 1
|
|
.erre ?_16ICODE, <SERVICEs must be in 32 bit code>
|
|
.erre ?_RCODE, <SERVICEs must be in 32 bit code>
|
|
endm
|
|
|
|
?ASYNC_SERVICE_BeginProc macro
|
|
??_service = 1
|
|
??_async_service = 1
|
|
.errnz ?_LCODE, <ASYNC_SERVICE's must be in LOCKED code>
|
|
endm
|
|
|
|
?NO_LOG_BeginProc macro
|
|
??_log = 0
|
|
endm
|
|
|
|
?NO_PROFILE_BeginProc macro
|
|
??_profile = 0
|
|
endm
|
|
|
|
?NO_TEST_CLD_BeginProc macro
|
|
??_test_cld = 0
|
|
endm
|
|
|
|
?TEST_BLOCK_BeginProc macro
|
|
??_might_block = DFS_TEST_BLOCK
|
|
endm
|
|
|
|
?TEST_REENTER_BeginProc macro
|
|
??_test_reenter = DFS_TEST_REENTER
|
|
endm
|
|
|
|
?NEVER_REENTER_BeginProc macro
|
|
??_never_reenter = DFS_NEVER_REENTER
|
|
endm
|
|
|
|
?NOT_SWAPPING_BeginProc macro
|
|
??_not_swapping = DFS_NOT_SWAPPING
|
|
endm
|
|
|
|
?NO_PROLOG_BeginProc macro
|
|
??_prolog_disabled = 1
|
|
endm
|
|
|
|
?ESP_BeginProc macro
|
|
??_esp = VMM_TRUE
|
|
ifndef Not_VxD
|
|
.erre ?_16ICODE, <Beginproc ESP attribute invalid in 16 bit seg.>
|
|
.erre ?_RCODE, <Beginproc ESP attribute invalid in real-mode seg.>
|
|
endif
|
|
endm
|
|
|
|
?CCALL_BeginProc macro
|
|
??_ccall = 1
|
|
endm
|
|
|
|
?PCALL_BeginProc macro
|
|
??_pcall = 1
|
|
endm
|
|
|
|
?SCALL_BeginProc macro
|
|
??_scall = 1
|
|
endm
|
|
|
|
?FASTCALL_BeginProc macro
|
|
??_fastcall = 1
|
|
endm
|
|
|
|
?ICALL_BeginProc macro
|
|
??_scall = 1
|
|
endm
|
|
|
|
?W32SVC_BeginProc macro
|
|
??_scall = 1
|
|
??_w32svc = 1
|
|
endm
|
|
|
|
ifdef DEBUG
|
|
ifdef profileall
|
|
?ProfileHeader_BeginProc macro PL, filename
|
|
ifndef _&filename&__proc_list
|
|
_&filename&__proc_list = 0
|
|
PUBLIC _&filename&__proc_list
|
|
endif
|
|
dd OFFSET32 _&filename&__proc_list
|
|
PL dd 0
|
|
_&filename&__proc_list = PL
|
|
endm
|
|
endif
|
|
|
|
IncProfileCount macro
|
|
if ??_service OR ??_profile
|
|
inc dword ptr [??_name-4]
|
|
else
|
|
ifndef profileall
|
|
.err <IncProfileCount can be used only in services.>
|
|
endif
|
|
endif
|
|
endm
|
|
else
|
|
IncProfileCount macro
|
|
endm
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ArgVar macro name,length,used
|
|
??_numargs = ??_numargs + 1
|
|
if ??_pcall
|
|
?mkarg <name>, <length>, <used>, %??_numargs
|
|
else
|
|
?arg <name>, <length>, <used>
|
|
endif
|
|
??_procflags = ??_procflags OR ??_pf_Check
|
|
endm
|
|
|
|
?mkarg macro name, length, used, num
|
|
.xcref ?MKA&num
|
|
?deflocal <name>
|
|
?MKA&num ¯o
|
|
?argvar <name>, <length>, <used>
|
|
&endm
|
|
??_aframe = ??_aframe + 4
|
|
endm
|
|
.xcref ?mkarg
|
|
|
|
?argvar macro name,length,used
|
|
local a
|
|
a = ??_taframe
|
|
??_aframe = ??_aframe + 4
|
|
??_taframe = ??_taframe + 4
|
|
ifidni <length>,<BYTE>
|
|
?setname <name>, <byte ptr [??_basereg+??_initaframe+a]>, <used>
|
|
elseifidni <length>,<WORD>
|
|
?setname <name>, <word ptr [??_basereg+??_initaframe+a]>, <used>
|
|
elseifidni <length>,<DWORD>
|
|
?setname <name>, <dword ptr [??_basereg+??_initaframe+a]>, <used>
|
|
?setname <name&l>,<word ptr [??_basereg+??_initaframe+a]>, <used>
|
|
?setname <name&ll>,<byte ptr [??_basereg+??_initaframe+a]>, <used>
|
|
?setname <name&lh>,<byte ptr [??_basereg+??_initaframe+a+1]>, <used>
|
|
?setname <name&h>,<word ptr [??_basereg+??_initaframe+a+2]>, <used>
|
|
?setname <name&hl>,<byte ptr [??_basereg+??_initaframe+a+2]>, <used>
|
|
?setname <name&hh>,<byte ptr [??_basereg+??_initaframe+a+3]>, <used>
|
|
else
|
|
??_aframe = ??_aframe - 4 + ((length + 3)/4)*4
|
|
??_taframe = ??_taframe - 4 + ((length + 3)/4)*4
|
|
?setname <name>, <[??_basereg+??_initaframe+a]>, <used>
|
|
endif
|
|
endm
|
|
|
|
?arg macro name,length,used
|
|
if ??_fastcall
|
|
if ??_numargs le 2
|
|
if length gt 4
|
|
.err <First 2 parameters are dwords (ecx,edx) for fastcall functions>
|
|
endif
|
|
??_aframe = ??_aframe + 4
|
|
if ??_numargs eq 1
|
|
?merge ecx_,name,,,equ,ecx
|
|
else
|
|
?merge edx_,name,,,equ,edx
|
|
endif
|
|
else
|
|
?argvar name, length, used
|
|
endif
|
|
else
|
|
?argvar name, length, used
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
?setname macro name, value, used
|
|
?deflocal <name>
|
|
ifidni <used>, <NOTUSED>
|
|
name equ _inaccessible_NOTUSED_
|
|
else
|
|
name equ value
|
|
??_procflags = ??_procflags OR ??_pf_ArgsUsed OR ??_pf_Check
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LocalVar macro name,length,flag
|
|
local a
|
|
??_numlocals = ??_numlocals + 1
|
|
??_pad = 1
|
|
ifidni <flag>, <PACK>
|
|
??_pad = 0
|
|
endif
|
|
ifidni <length>,<BYTE>
|
|
??_frame = ??_frame + 1 + 3 * ??_pad
|
|
a = ??_frame
|
|
?deflocal <name>
|
|
name equ byte ptr [??_basereg-a]
|
|
elseifidni <length>,<WORD>
|
|
??_frame = ??_frame + 2 + 2 * ??_pad
|
|
a = ??_frame
|
|
?deflocal <name>
|
|
name equ word ptr [??_basereg-a]
|
|
elseifidni <length>,<DWORD>
|
|
??_frame = ??_frame + 4
|
|
a = ??_frame
|
|
?deflocal <name, name&l, name&ll, name&lh, name&h, name&hl, name&hh>
|
|
name equ dword ptr [??_basereg-a]
|
|
name&l equ word ptr [??_basereg-a]
|
|
name&ll equ byte ptr [??_basereg-a]
|
|
name&lh equ byte ptr [??_basereg-a+1]
|
|
name&h equ word ptr [??_basereg-a+2]
|
|
name&hl equ byte ptr [??_basereg-a+2]
|
|
name&hh equ byte ptr [??_basereg-a+3]
|
|
else
|
|
??_frame = ??_frame + ((length + 3)/4)*4
|
|
a = ??_frame
|
|
?deflocal <name>
|
|
name equ [??_basereg-a]
|
|
endif
|
|
??_procflags = ??_procflags OR ??_pf_Check
|
|
endm
|
|
|
|
?deflocal macro name
|
|
irp nm, <name>
|
|
??_numlocalsymbols = ??_numlocalsymbols + 1
|
|
?dodeflocal <nm>, %(??_numlocalsymbols)
|
|
endm
|
|
endm
|
|
.xcref ?deflocal
|
|
|
|
?dodeflocal macro name, num
|
|
.xcref ?LOC&num
|
|
?LOC&num ¯o
|
|
name equ <__inaccessible__NOTINSCOPE__>
|
|
&endm
|
|
endm
|
|
.xcref ?dodeflocal
|
|
|
|
|
|
|
|
EnterProc macro
|
|
.errnz ??_frame and 3, <Total size of local variables not a multiple of 4.>
|
|
if ??_scall
|
|
if ??_public
|
|
ifdef Not_VxD
|
|
?merge %??_name,@,%(??_aframe),,label,near
|
|
?merge public,,,,C,%??_name,@,%(??_aframe)
|
|
else
|
|
?merge _,%??_name,@,%(??_aframe),label,near
|
|
?merge public,,,,,_,%??_name,@,%(??_aframe)
|
|
endif
|
|
endif
|
|
?_BeginProc_Debug_Prologue
|
|
endif
|
|
if ??_fastcall
|
|
if ??_public
|
|
ifdef Not_VxD
|
|
?merge %??_name,@,%(??_aframe),,label,near
|
|
?merge public,,,,C,%??_name,@,%(??_aframe)
|
|
else
|
|
?merge @,%??_name,@,%(??_aframe),label,near
|
|
?merge public,,,,,@,%??_name,@,%(??_aframe)
|
|
endif
|
|
endif
|
|
?_BeginProc_Debug_Prologue
|
|
endif
|
|
if ??_pcall
|
|
??_aframe = 0
|
|
?count = ??_numargs
|
|
rept ??_numargs
|
|
?invprg <?MKA>,%?count
|
|
?count = ?count - 1
|
|
endm
|
|
endif
|
|
??_fleave = FALSE
|
|
if ??_esp
|
|
if ??_frame
|
|
sub esp, ??_frame
|
|
??_pushed = ??_pushed + ??_frame
|
|
??_fleave = VMM_TRUE
|
|
endif
|
|
else
|
|
if ??_frame eq 0
|
|
if (??_taframe eq 0) OR ((??_procflags AND ??_pf_ArgsUsed) EQ 0)
|
|
ifdef DEBUG
|
|
push ebp
|
|
mov ebp,esp
|
|
??_fleave = VMM_TRUE
|
|
endif
|
|
else
|
|
push ebp
|
|
mov ebp,esp
|
|
??_fleave = VMM_TRUE
|
|
endif
|
|
else
|
|
enter ??_frame, 0
|
|
??_fleave = VMM_TRUE
|
|
endif
|
|
endif
|
|
??_procflags = ??_procflags OR ??_pf_Entered
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LeaveProc macro flags
|
|
if ??_fleave
|
|
if ??_esp
|
|
ifidni <flags>,<PRESERVE_FLAGS>
|
|
lea esp,[esp + ??_frame]
|
|
else
|
|
add esp,??_frame
|
|
endif
|
|
else
|
|
leave
|
|
endif
|
|
endif
|
|
??_procflags = ??_procflags OR ??_pf_Left
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Return macro
|
|
if ??_cleanoff OR ??_w32svc
|
|
if ??_w32svc AND (??_taframe LT 8)
|
|
ret 8
|
|
else
|
|
ret ??_taframe
|
|
endif
|
|
else
|
|
ret
|
|
endif
|
|
??_procflags = ??_procflags OR ??_pf_Returned
|
|
endm
|
|
|
|
|
|
|
|
|
|
EndProc macro Name, Flag
|
|
Name endp
|
|
if ??_w32svc
|
|
if ??_taframe lt 8
|
|
cparm&Name equ 0
|
|
else
|
|
cparm&Name equ (??_taframe/4 - 2)
|
|
endif
|
|
endif
|
|
if ??_procflags AND ??_pf_Left
|
|
if ??_fleave
|
|
if ??_esp
|
|
??_pushed = ??_pushed - ??_frame
|
|
endif
|
|
endif
|
|
endif
|
|
ifdifi <Flag>,<NOCHECK>
|
|
if ??_pushed ne 0
|
|
%out Warning: stack not balanced in Name
|
|
endif
|
|
if ??_procflags AND ??_pf_Check
|
|
ife ??_procflags AND ??_pf_Entered
|
|
%out Warning: ArgVar/LocalVar without EnterProc in Name
|
|
endif
|
|
ife ??_procflags AND ??_pf_Left
|
|
%out Warning: ArgVar/LocalVar without LeaveProc in Name
|
|
endif
|
|
ife ??_procflags AND ??_pf_Returned
|
|
%out Warning: ArgVar/LocalVar without Return in Name
|
|
endif
|
|
endif
|
|
endif
|
|
ifdifi <Flag>,<KEEPFRAMEVARS>
|
|
?count = 0
|
|
rept ??_numlocalsymbols
|
|
?count = ?count + 1
|
|
?invprg <?LOC>,%?count
|
|
endm
|
|
endif
|
|
??_ends
|
|
??_ends equ <>
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cCall macro name, arglst, flags
|
|
ife .TYPE name
|
|
CondExtern name, near
|
|
endif
|
|
ifdef ??_nonstandardccall_&name
|
|
PushCParams <arglst>, <FAST>
|
|
else
|
|
PushCParams <arglst>, <flags>
|
|
endif
|
|
call name
|
|
ifdef ??_nonstandardccall_&name
|
|
ClearCParams PRESERVE_FLAGS
|
|
else
|
|
ClearCParams <flags>
|
|
endif
|
|
endm
|
|
.xcref cCall
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pCall macro name, arglst
|
|
local ??saved
|
|
ife .TYPE name
|
|
?toupper name
|
|
else
|
|
?upper equ <name>
|
|
endif
|
|
CondExtern %?upper, near
|
|
??saved = ??_pushed
|
|
irp x,<arglst>
|
|
push x
|
|
??_pushed = ??_pushed + 4
|
|
endm
|
|
call ?upper
|
|
??_pushed = ??saved
|
|
endm
|
|
.xcref pCall
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sCall macro name, arglst
|
|
local ??saved
|
|
??saved = ??_pushed
|
|
PushCParams <arglst>
|
|
?scall _, name, %(??_argc * 4)
|
|
??_pushed = ??saved
|
|
endm
|
|
.xcref sCall
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fCall macro name, arglst, flags
|
|
local ??saved
|
|
??saved = ??_pushed
|
|
ife .TYPE name
|
|
CondExtern name, near
|
|
endif
|
|
PushCParams <arglst>, <FASTCALL>
|
|
?scall @, name, %(??_argc * 4)
|
|
ifdef ??_nonstandardccall_&name
|
|
ClearCParams PRESERVE_FLAGS
|
|
else
|
|
ClearCParams <flags>
|
|
endif
|
|
??_pushed = ??saved
|
|
endm
|
|
.xcref fCall
|
|
|
|
|
|
|
|
|
|
|
|
iCall equ <sCall>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IFNDEF STANDARD_CCALL
|
|
NONSTANDARD_CCALL = 1
|
|
ENDIF
|
|
|
|
PushCParams macro arglst, flags
|
|
LOCAL ??_pushedargs
|
|
|
|
??_argc = 0
|
|
IFDEF NONSTANDARD_CCALL
|
|
??_popargs = 0
|
|
ELSE
|
|
??_popargs = ??_align EQ 0
|
|
ENDIF
|
|
ifidni <flags>, <SMALL>
|
|
??_popargs = 1
|
|
elseifidni <flags>, <FAST>
|
|
??_popargs = 0
|
|
elseifidni <flags>, <FASTCALL>
|
|
??_popargs = 0
|
|
endif
|
|
|
|
irp x,<arglst>
|
|
??_argc = ??_argc + 1
|
|
ifidni <flags>, <FASTCALL>
|
|
if ??_argc eq 1
|
|
ifdifi <x>, <ecx>
|
|
.err <first parameter must be ECX for fastcall functions>
|
|
endif
|
|
elseif ??_argc eq 2
|
|
ifdifi <x>, <edx>
|
|
.err <first parameter must be EDX for fastcall functions>
|
|
endif
|
|
else
|
|
?marg <x>,%??_argc
|
|
endif
|
|
else
|
|
?marg <x>,%??_argc
|
|
endif
|
|
endm
|
|
?count = ??_argc
|
|
ifidni <flags>, <FASTCALL>
|
|
??_pushedargs = ??_argc-2
|
|
else
|
|
??_pushedargs = ??_argc
|
|
endif
|
|
if ??_pushedargs GT 0
|
|
rept ??_argc
|
|
?invprg <?AM>,%?count
|
|
?count = ?count - 1
|
|
endm
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ClearCParams macro fPreserveFlags
|
|
if ??_argc ne 0
|
|
if (??_popargs) AND (??_argc LE 2)
|
|
rept ??_argc
|
|
pop ecx
|
|
endm
|
|
elseifidni <fPreserveFlags>, <PRESERVE_FLAGS>
|
|
lea esp, [esp][??_argc * 4]
|
|
else
|
|
add esp,??_argc * 4
|
|
endif
|
|
endif
|
|
??_pushed = ??_pushed - (??_argc * 4)
|
|
endm
|
|
|
|
|
|
|
|
?marg macro name, num
|
|
.xcref
|
|
.xcref ?AM&num
|
|
.cref
|
|
?AM&num ¯o
|
|
push name
|
|
??_pushed = ??_pushed + 4
|
|
&endm
|
|
endm
|
|
.xcref ?marg
|
|
|
|
|
|
|
|
?invprg macro name1, name2
|
|
name1&name2
|
|
purge name1&name2
|
|
endm
|
|
.xcref ?invprg
|
|
|
|
|
|
|
|
?scall macro prefix, name1, name2
|
|
CondExtern prefix&name1&@&name2, near
|
|
call prefix&name1&@&name2
|
|
endm
|
|
.xcref ?scall
|
|
|
|
|
|
|
|
?merge macro l1, l2, l3, l4, op, r1, r2, r3, r4, r5, r6, r7, r8, r9
|
|
l1&l2&l3&l4 op r1&r2&r3&r4&r5&r6&r7&r8&r9
|
|
endm
|
|
|
|
|
|
|
|
?toupper macro s
|
|
?upper equ <>
|
|
irpc x,<s>
|
|
if '&x' GE 'a'
|
|
if '&x' LE 'z'
|
|
?t1 substr <ABCDEFGHIJKLMNOPQRSTUVWXYZ>,'&x'-'a'+1,1
|
|
?upper catstr ?upper,?t1
|
|
else
|
|
?upper catstr ?upper,<&x>
|
|
endif
|
|
else
|
|
?upper catstr ?upper,<&x>
|
|
endif
|
|
endm
|
|
endm
|
|
.xcref
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CondExtern macro name,dist
|
|
ifdef MASM6
|
|
ifndef name
|
|
externdef name:dist
|
|
endif
|
|
else
|
|
if2
|
|
ifndef name
|
|
extrn name:dist
|
|
endif
|
|
endif
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
SaveReg macro reglist
|
|
irp reg,<reglist>
|
|
ifidni <reg>, <fd>
|
|
pushfd
|
|
??_pushed = ??_pushed + 4
|
|
else
|
|
ifidni <reg>, <ad>
|
|
pushad
|
|
??_pushed = ??_pushed + SIZE Pushad_Struc
|
|
else
|
|
push reg
|
|
??_pushed = ??_pushed + 4
|
|
endif
|
|
endif
|
|
endm
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RestoreReg macro reglist
|
|
irp reg,<reglist>
|
|
ifidni <reg>, <fd>
|
|
popfd
|
|
??_pushed = ??_pushed - 4
|
|
else
|
|
ifidni <reg>, <ad>
|
|
popad
|
|
??_pushed = ??_pushed - SIZE Pushad_Struc
|
|
else
|
|
pop reg
|
|
??_pushed = ??_pushed - 4
|
|
endif
|
|
endif
|
|
endm
|
|
endm
|
|
|
|
ifdef DEBUG
|
|
Begin_Profile_List macro devname
|
|
ifdef profileall
|
|
VxD_DATA_SEG
|
|
db 'PROCLIST'
|
|
PUBLIC devname&_Proc_Profile_List
|
|
devname&_Proc_Profile_List label dword
|
|
endif
|
|
endm
|
|
|
|
Profile_Link macro modname
|
|
ifdef profileall
|
|
ifdifi <modname>,@filename
|
|
EXTRN _&modname&__proc_list:near
|
|
endif
|
|
dd OFFSET32 _&modname&__proc_list
|
|
endif
|
|
endm
|
|
|
|
End_Profile_List macro
|
|
ifdef profileall
|
|
dd 0
|
|
VxD_DATA_ENDS
|
|
endif
|
|
endm
|
|
|
|
|
|
endif
|
|
ifndef Not_VxD
|
|
RESERVED_LOW_BOOST EQU 00000001H
|
|
CUR_RUN_VM_BOOST EQU 00000004H
|
|
LOW_PRI_DEVICE_BOOST EQU 00000010H
|
|
HIGH_PRI_DEVICE_BOOST EQU 00001000H
|
|
CRITICAL_SECTION_BOOST EQU 00100000H
|
|
TIME_CRITICAL_BOOST EQU 00400000H
|
|
RESERVED_HIGH_BOOST EQU 40000000H
|
|
PEF_WAIT_FOR_STI_BIT EQU 0
|
|
PEF_WAIT_FOR_STI EQU (1 SHL PEF_WAIT_FOR_STI_BIT)
|
|
PEF_WAIT_NOT_CRIT_BIT EQU 1
|
|
PEF_WAIT_NOT_CRIT EQU (1 SHL PEF_WAIT_NOT_CRIT_BIT)
|
|
PEF_DONT_UNBOOST_BIT EQU 2
|
|
PEF_DONT_UNBOOST EQU (1 SHL PEF_DONT_UNBOOST_BIT)
|
|
PEF_ALWAYS_SCHED_BIT EQU 3
|
|
PEF_ALWAYS_SCHED EQU (1 SHL PEF_ALWAYS_SCHED_BIT)
|
|
PEF_TIME_OUT_BIT EQU 4
|
|
PEF_TIME_OUT EQU (1 SHL PEF_TIME_OUT_BIT)
|
|
PEF_WAIT_NOT_HW_INT_BIT EQU 5
|
|
PEF_WAIT_NOT_HW_INT EQU (1 SHL PEF_WAIT_NOT_HW_INT_BIT)
|
|
PEF_WAIT_NOT_NESTED_EXEC_BIT EQU 6
|
|
PEF_WAIT_NOT_NESTED_EXEC EQU (1 SHL PEF_WAIT_NOT_NESTED_EXEC_BIT)
|
|
PEF_WAIT_IN_PM_BIT EQU 7
|
|
PEF_WAIT_IN_PM EQU (1 SHL PEF_WAIT_IN_PM_BIT)
|
|
PEF_THREAD_EVENT_BIT EQU 8
|
|
PEF_THREAD_EVENT EQU (1 SHL PEF_THREAD_EVENT_BIT)
|
|
PEF_WAIT_FOR_THREAD_STI_BIT EQU 9
|
|
PEF_WAIT_FOR_THREAD_STI EQU (1 SHL PEF_WAIT_FOR_THREAD_STI_BIT)
|
|
PEF_RING0_EVENT_BIT EQU 10
|
|
PEF_RING0_EVENT EQU (1 SHL PEF_RING0_EVENT_BIT)
|
|
PEF_WAIT_CRIT_BIT EQU 11
|
|
PEF_WAIT_CRIT EQU (1 SHL PEF_WAIT_CRIT_BIT)
|
|
PEF_WAIT_CRIT_VM_BIT EQU 12
|
|
PEF_WAIT_CRIT_VM EQU (1 SHL PEF_WAIT_CRIT_VM_BIT)
|
|
PEF_PROCESS_LAST_BIT EQU 13
|
|
PEF_PROCESS_LAST EQU (1 SHL PEF_PROCESS_LAST_BIT)
|
|
PEF_WAIT_PREEMPTABLE_BIT EQU 14
|
|
PEF_WAIT_PREEMPTABLE EQU (1 SHL PEF_WAIT_PREEMPTABLE_BIT)
|
|
PEF_WAIT_FOR_PASSIVE_BIT EQU 15
|
|
PEF_WAIT_FOR_PASSIVE EQU (1 SHL PEF_WAIT_FOR_PASSIVE_BIT)
|
|
PEF_WAIT_FOR_APPY_BIT EQU 16
|
|
PEF_WAIT_FOR_APPY EQU (1 SHL PEF_WAIT_FOR_APPY_BIT)
|
|
PEF_WAIT_FOR_WORKER_BIT EQU 17
|
|
PEF_WAIT_FOR_WORKER EQU (1 SHL PEF_WAIT_FOR_WORKER_BIT)
|
|
PEF_WAIT_NOT_TIME_CRIT_BIT EQU PEF_WAIT_NOT_HW_INT_BIT
|
|
PEF_WAIT_NOT_TIME_CRIT EQU PEF_WAIT_NOT_HW_INT
|
|
PEF_WAIT_NOT_PM_LOCKED_STACK_BIT EQU PEF_WAIT_NOT_NESTED_EXEC_BIT
|
|
PEF_WAIT_NOT_PM_LOCKED_STACK EQU PEF_WAIT_NOT_NESTED_EXEC
|
|
PEF_WAIT_FOR_CONFIGMG_CALLABLE EQU PEF_WAIT_FOR_WORKER
|
|
PEF_WAIT_FOR_CONFIGMG_QUICK EQU PEF_WAIT_FOR_APPY
|
|
BLOCK_SVC_INTS_BIT EQU 0
|
|
BLOCK_SVC_INTS EQU (1 SHL BLOCK_SVC_INTS_BIT)
|
|
BLOCK_SVC_IF_INTS_LOCKED_BIT EQU 1
|
|
BLOCK_SVC_IF_INTS_LOCKED EQU (1 SHL BLOCK_SVC_IF_INTS_LOCKED_BIT)
|
|
BLOCK_ENABLE_INTS_BIT EQU 2
|
|
BLOCK_ENABLE_INTS EQU (1 SHL BLOCK_ENABLE_INTS_BIT)
|
|
BLOCK_POLL_BIT EQU 3
|
|
BLOCK_POLL EQU (1 SHL BLOCK_POLL_BIT)
|
|
BLOCK_THREAD_IDLE_BIT EQU 4
|
|
BLOCK_THREAD_IDLE EQU (1 SHL BLOCK_THREAD_IDLE_BIT)
|
|
BLOCK_FORCE_SVC_INTS_BIT EQU 5
|
|
BLOCK_FORCE_SVC_INTS EQU (1 SHL BLOCK_FORCE_SVC_INTS_BIT)
|
|
|
|
Client_Reg_Struc STRUC
|
|
Client_EDI DD ?
|
|
Client_ESI DD ?
|
|
Client_EBP DD ?
|
|
Client_res0 DD ?
|
|
Client_EBX DD ?
|
|
Client_EDX DD ?
|
|
Client_ECX DD ?
|
|
Client_EAX DD ?
|
|
Client_Error DD ?
|
|
Client_EIP DD ?
|
|
Client_CS DW ?
|
|
Client_res1 DW ?
|
|
Client_EFlags DD ?
|
|
Client_ESP DD ?
|
|
Client_SS DW ?
|
|
Client_res2 DW ?
|
|
Client_ES DW ?
|
|
Client_res3 DW ?
|
|
Client_DS DW ?
|
|
Client_res4 DW ?
|
|
Client_FS DW ?
|
|
Client_res5 DW ?
|
|
Client_GS DW ?
|
|
Client_res6 DW ?
|
|
Client_Alt_EIP DD ?
|
|
Client_Alt_CS DW ?
|
|
Client_res7 DW ?
|
|
Client_Alt_EFlags DD ?
|
|
Client_Alt_ESP DD ?
|
|
Client_Alt_SS DW ?
|
|
Client_res8 DW ?
|
|
Client_Alt_ES DW ?
|
|
Client_res9 DW ?
|
|
Client_Alt_DS DW ?
|
|
Client_res10 DW ?
|
|
Client_Alt_FS DW ?
|
|
Client_res11 DW ?
|
|
Client_Alt_GS DW ?
|
|
Client_res12 DW ?
|
|
Client_Reg_Struc ENDS
|
|
|
|
Client_Word_Reg_Struc STRUC
|
|
Client_DI DW ?
|
|
Client_res13 DW ?
|
|
Client_SI DW ?
|
|
Client_res14 DW ?
|
|
Client_BP DW ?
|
|
Client_res15 DW ?
|
|
Client_res16 DD ?
|
|
Client_BX DW ?
|
|
Client_res17 DW ?
|
|
Client_DX DW ?
|
|
Client_res18 DW ?
|
|
Client_CX DW ?
|
|
Client_res19 DW ?
|
|
Client_AX DW ?
|
|
Client_res20 DW ?
|
|
Client_res21 DD ?
|
|
Client_IP DW ?
|
|
Client_res22 DW ?
|
|
Client_res23 DD ?
|
|
Client_Flags DW ?
|
|
Client_res24 DW ?
|
|
Client_SP DW ?
|
|
Client_res25 DW ?
|
|
Client_res26 DD 5 DUP (?)
|
|
Client_Alt_IP DW ?
|
|
Client_res27 DW ?
|
|
Client_res28 DD ?
|
|
Client_Alt_Flags DW ?
|
|
Client_res29 DW ?
|
|
Client_Alt_SP DW ?
|
|
Client_Word_Reg_Struc ENDS
|
|
|
|
Client_Byte_Reg_Struc STRUC
|
|
Client_res30 DD 4 DUP (?)
|
|
Client_BL DB ?
|
|
Client_BH DB ?
|
|
Client_res31 DW ?
|
|
Client_DL DB ?
|
|
Client_DH DB ?
|
|
Client_res32 DW ?
|
|
Client_CL DB ?
|
|
Client_CH DB ?
|
|
Client_res33 DW ?
|
|
Client_AL DB ?
|
|
Client_AH DB ?
|
|
Client_Byte_Reg_Struc ENDS
|
|
?UnionSize = 0
|
|
if size Client_Reg_Struc gt ?UnionSize
|
|
?UnionSize = size Client_Reg_Struc
|
|
endif
|
|
CRS equ <(byte ptr 0)>
|
|
|
|
if size Client_Word_Reg_Struc gt ?UnionSize
|
|
?UnionSize = size Client_Word_Reg_Struc
|
|
endif
|
|
CWRS equ <(byte ptr 0)>
|
|
|
|
if size Client_Byte_Reg_Struc gt ?UnionSize
|
|
?UnionSize = size Client_Byte_Reg_Struc
|
|
endif
|
|
CBRS equ <(byte ptr 0)>
|
|
|
|
|
|
tagCLIENT_STRUC STRUC
|
|
DB ?UnionSize dup(?)
|
|
tagCLIENT_STRUC ENDS
|
|
|
|
IF 0
|
|
.ERRNZ Client_SP - Client_ESP
|
|
.ERRNZ Client_AL - Client_EAX
|
|
|
|
endif
|
|
DYNA_LINK_INT EQU 20H
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DeclareNonstandardCcallService macro arglst
|
|
irp x,<arglst>
|
|
??_nonstandardccall_&&x = 1
|
|
endm
|
|
endm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DeclareNonstandardCcallService <_BlockOnID, _LocalizeSprintf>
|
|
DeclareNonstandardCcallService <_SetLastV86Page>
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
DefTable MACRO vt, vn
|
|
vt EQU <vn>
|
|
ENDM
|
|
|
|
GenDD2 MACRO vt, sn, jf
|
|
dd OFFSET32 vt[sn+jf]
|
|
ENDM
|
|
|
|
GenDD MACRO P, vid, snum, jflag
|
|
LOCAL vtable
|
|
IFDEF @@VxDName&vid
|
|
Deftable vtable, %@@VxDName&vid
|
|
EXTRN vtable:DWORD
|
|
GenDD2 %vtable, snum, jflag
|
|
ELSE
|
|
dd @@&P+jflag
|
|
ENDIF
|
|
|
|
ENDM
|
|
|
|
|
|
VxDCall MACRO P, Param, flags
|
|
??_vxdid = (@@&P SHR 16)
|
|
??_servicenum = (@@&P AND 0FFFFh)
|
|
|
|
ifdef ??_standardccall_&P
|
|
PushCParams <Param>, <FAST>
|
|
.errnz ??_argc ne ??_standardccall_&P, <wrong # of parameters passed to &P&>
|
|
else
|
|
ifdef ??_fastcall_&P
|
|
PushCParams <Param>, <FASTCALL>
|
|
.errnz ??_argc ne (??_fastcall_&P), <wrong # of parameters passed to fastcall function &P&>
|
|
else
|
|
ifdef ??_nonstandardccall_&P
|
|
PushCParams <Param>, <flags>
|
|
else
|
|
PushCParams <Param>, <FAST>
|
|
endif
|
|
endif
|
|
endif
|
|
int Dyna_Link_Int
|
|
GenDD P, %??_vxdid, %??_servicenum, 0
|
|
ifndef ??_standardccall_&P
|
|
ifndef ??_fastcall_&P
|
|
ifdef ??_nonstandardccall_&P
|
|
ClearCParams PRESERVE_FLAGS
|
|
else
|
|
ClearCParams
|
|
endif
|
|
else
|
|
if(??_argc gt 2)
|
|
??_pushed = ??_pushed - ((??_argc - 2) * 4)
|
|
endif
|
|
endif
|
|
else
|
|
??_pushed = ??_pushed - (??_argc * 4)
|
|
endif
|
|
ENDM
|
|
|
|
VxDJmp MACRO P, Param
|
|
??_vxdid = (@@&P SHR 16)
|
|
??_servicenum = (@@&P AND 0FFFFh)
|
|
ifdef ??_fastcall_&P
|
|
PushCParams <Param>, <FASTCALL>
|
|
.errnz ??_argc gt 2, <More than 2 parameters may not be passed to fastcall functions thru VxDJmp>
|
|
else
|
|
.errnb <Param>, <Parameters may not be passed to VxDJmp or VMMJmp>
|
|
endif
|
|
int Dyna_Link_Int
|
|
GenDD P, %??_vxdid, %??_servicenum, DL_Jmp_Mask
|
|
ENDM
|
|
|
|
DL_Jmp_Mask EQU 8000h
|
|
DL_Jmp_Bit EQU 0Fh
|
|
|
|
VMMCall MACRO P, Param
|
|
.ERRNZ (@@&P SHR 16) - VMM_DEVICE_ID
|
|
VxDCall <P>, <Param>
|
|
ENDM
|
|
|
|
VMMJmp MACRO P, Param
|
|
.ERRNZ (@@&P SHR 16) - VMM_DEVICE_ID
|
|
VxDJmp <P>, <Param>
|
|
ENDM
|
|
|
|
WDMCall MACRO P, Param, flags
|
|
ifdef ??_standardccall_&P
|
|
PushCParams <Param>, <FAST>
|
|
.errnz ??_argc ne ??_standardccall_&P, <wrong # of parameters passed to &P&>
|
|
else
|
|
ifdef ??_fastcall_&P
|
|
PushCParams <Param>, <FASTCALL>
|
|
.errnz ??_argc ne (??_fastcall_&P), <wrong # of parameters passed to fastcall function &P&>
|
|
else
|
|
ifdef ??_nonstandardccall_&P
|
|
PushCParams <Param>, <flags>
|
|
else
|
|
PushCParams <Param>, <FAST>
|
|
endif
|
|
endif
|
|
endif
|
|
mov eax,WDM@@&P
|
|
int WDM_DynaLink_Int
|
|
nop
|
|
nop
|
|
nop
|
|
ifndef ??_standardccall_&P
|
|
ifndef ??_fastcall_&P
|
|
ifdef ??_nonstandardccall_&P
|
|
ClearCParams PRESERVE_FLAGS
|
|
else
|
|
ClearCParams
|
|
endif
|
|
else
|
|
if(??_argc gt 2)
|
|
??_pushed = ??_pushed - ((??_argc - 2) * 4)
|
|
endif
|
|
endif
|
|
else
|
|
??_pushed = ??_pushed - (??_argc * 4)
|
|
endif
|
|
ENDM
|
|
|
|
WDMJmp MACRO P, Param
|
|
ifdef ??_fastcall_&P
|
|
PushCParams <Param>, <FASTCALL>
|
|
.errnz ??_argc gt 2, <More than 2 parameters may not be passed to fastcall functions thru VxDJmp>
|
|
else
|
|
.errnb <Param>, <Parameters may not be passed to WDMJmp>
|
|
endif
|
|
mov eax, WDM@@&P+WDM_DL_Jmp_Mask
|
|
int WDM_DynaLink_Int
|
|
nop
|
|
nop
|
|
nop
|
|
ENDM
|
|
|
|
WDM_DL_Jmp_Mask EQU 80000000h
|
|
WDM_DL_Jmp_Bit EQU 31
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
|
|
|
|
|
|
VxD_CODE_SEG EQU <VxD_LOCKED_CODE_SEG>
|
|
VxD_CODE_ENDS EQU <VxD_LOCKED_CODE_ENDS>
|
|
|
|
|
|
VxD_LOCKED_CODE_SEG MACRO
|
|
_LTEXT SEGMENT
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + ??_LCODE
|
|
ASSUME cs:FLAT, ds:FLAT, es:FLAT, ss:FLAT
|
|
|
|
ENDM
|
|
|
|
VxD_LOCKED_CODE_ENDS MACRO
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHR 4
|
|
_LTEXT ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
VxD_PAGEABLE_CODE_SEG MACRO
|
|
_PTEXT SEGMENT
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + ??_PCODE
|
|
ASSUME cs:FLAT, ds:FLAT, es:FLAT, ss:FLAT
|
|
|
|
ENDM
|
|
|
|
VxD_PAGEABLE_CODE_ENDS MACRO
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHR 4
|
|
_PTEXT ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
VxD_DEBUG_ONLY_CODE_SEG MACRO
|
|
_DB1CODE SEGMENT
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + ??_DBOCODE
|
|
ASSUME cs:FLAT, ds:FLAT, es:FLAT, ss:FLAT
|
|
ENDM
|
|
|
|
VxD_DEBUG_ONLY_CODE_ENDS MACRO
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHR 4
|
|
_DB1CODE ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
VxD_INIT_CODE_SEG MACRO
|
|
_ITEXT SEGMENT
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + ??_ICODE
|
|
ASSUME cs:FLAT, ds:FLAT, es:FLAT, ss:FLAT
|
|
ENDM
|
|
|
|
VxD_INIT_CODE_ENDS MACRO
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHR 4
|
|
_ITEXT ENDS
|
|
ENDM
|
|
|
|
VxD_ICODE_SEG equ VxD_INIT_CODE_SEG
|
|
VxD_ICODE_ENDS equ VxD_INIT_CODE_ENDS
|
|
|
|
|
|
|
|
|
|
VxD_DATA_SEG EQU <VxD_LOCKED_DATA_SEG>
|
|
VxD_DATA_ENDS EQU <VxD_LOCKED_DATA_ENDS>
|
|
|
|
VxD_LOCKED_DATA_SEG MACRO NO_ALIGN
|
|
_LDATA SEGMENT
|
|
IFB <NO_ALIGN>
|
|
ALIGN 4
|
|
ENDIF
|
|
ENDM
|
|
|
|
VxD_LOCKED_DATA_ENDS MACRO
|
|
_LDATA ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
VxD_IDATA_SEG MACRO
|
|
_IDATA SEGMENT
|
|
ENDM
|
|
VxD_IDATA_ENDS MACRO
|
|
_IDATA ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
VxD_PAGEABLE_DATA_SEG MACRO NO_ALIGN
|
|
_PDATA SEGMENT
|
|
IFB <NO_ALIGN>
|
|
ALIGN 4
|
|
ENDIF
|
|
ENDM
|
|
|
|
VxD_PAGEABLE_DATA_ENDS MACRO
|
|
_PDATA ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
VxD_STATIC_CODE_SEG MACRO
|
|
_STEXT SEGMENT
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + ??_SCODE
|
|
ASSUME cs:FLAT, ds:FLAT, es:FLAT, ss:FLAT
|
|
|
|
ENDM
|
|
|
|
VxD_STATIC_CODE_ENDS MACRO
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHR 4
|
|
_STEXT ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
VxD_STATIC_DATA_SEG MACRO NO_ALIGN
|
|
_SDATA SEGMENT
|
|
IFB <NO_ALIGN>
|
|
ALIGN 4
|
|
ENDIF
|
|
ENDM
|
|
|
|
VxD_STATIC_DATA_ENDS MACRO
|
|
_SDATA ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
VxD_DEBUG_ONLY_DATA_SEG MACRO NO_ALIGN
|
|
_DB2DATA SEGMENT
|
|
IFB <NO_ALIGN>
|
|
ALIGN 4
|
|
ENDIF
|
|
ENDM
|
|
|
|
VxD_DEBUG_ONLY_DATA_ENDS MACRO
|
|
_DB2DATA ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
VxD_16BIT_INIT_SEG MACRO
|
|
_16ICODE SEGMENT
|
|
ASSUME CS:_16ICODE, DS:NOTHING, ES:NOTHING, SS:NOTHING
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + ??_16ICODE
|
|
ENDM
|
|
|
|
VxD_16BIT_INIT_ENDS MACRO
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHR 4
|
|
_16ICODE ENDS
|
|
ENDM
|
|
|
|
|
|
|
|
VxD_REAL_INIT_SEG MACRO
|
|
_RCODE SEGMENT
|
|
ASSUME CS:_RCODE, DS:_RCODE, ES:_RCODE, SS:_RCODE
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHL 4 + ??_RCODE
|
|
ENDM
|
|
|
|
VxD_REAL_INIT_ENDS MACRO
|
|
??_CUR_CODE_SEG = ??_CUR_CODE_SEG SHR 4
|
|
_RCODE ENDS
|
|
ENDM
|
|
|
|
endif
|
|
ifndef DDK_VERSION
|
|
ifdef WIN31COMPAT
|
|
DDK_VERSION EQU 30AH
|
|
else
|
|
ifdef WIN40COMPAT
|
|
DDK_VERSION EQU 400H
|
|
else
|
|
DDK_VERSION EQU 40AH
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
VxD_Desc_Block STRUC
|
|
DDB_Next DD ?
|
|
DDB_SDK_Version DW DDK_VERSION
|
|
DDB_Req_Device_Number DW UNDEFINED_DEVICE_ID
|
|
DDB_Dev_Major_Version DB 0
|
|
DDB_Dev_Minor_Version DB 0
|
|
DDB_Flags DW 0
|
|
DDB_Name DB " "
|
|
DDB_Init_Order DD UNDEFINED_INIT_ORDER
|
|
DDB_Control_Proc DD ?
|
|
DDB_V86_API_Proc DD 0
|
|
DDB_PM_API_Proc DD 0
|
|
DDB_V86_API_CSIP DD 0
|
|
DDB_PM_API_CSIP DD 0
|
|
DDB_Reference_Data DD ?
|
|
DDB_Service_Table_Ptr DD 0
|
|
DDB_Service_Table_Size DD 0
|
|
DDB_Win32_Service_Table DD 0
|
|
DDB_Prev DD 'Prev'
|
|
DDB_Size DD SIZE(VxD_Desc_Block)
|
|
DDB_Reserved1 DD 'Rsv1'
|
|
DDB_Reserved2 DD 'Rsv2'
|
|
DDB_Reserved3 DD 'Rsv3'
|
|
VxD_Desc_Block ENDS
|
|
ifndef Not_VxD
|
|
DDB_SYS_CRIT_INIT_DONE_BIT EQU 0
|
|
DDB_SYS_CRIT_INIT_DONE EQU (1 SHL DDB_SYS_CRIT_INIT_DONE_BIT)
|
|
DDB_DEVICE_INIT_DONE_BIT EQU 1
|
|
DDB_DEVICE_INIT_DONE EQU (1 SHL DDB_DEVICE_INIT_DONE_BIT)
|
|
DDB_HAS_WIN32_SVCS_BIT EQU 14
|
|
DDB_HAS_WIN32_SVCS EQU (1 SHL DDB_HAS_WIN32_SVCS_BIT)
|
|
DDB_DYNAMIC_VXD_BIT EQU 15
|
|
DDB_DYNAMIC_VXD EQU (1 SHL DDB_DYNAMIC_VXD_BIT)
|
|
DDB_DEVICE_DYNALINKED_BIT EQU 13
|
|
DDB_DEVICE_DYNALINKED EQU (1 SHL DDB_DEVICE_DYNALINKED_BIT)
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
Declare_Virtual_Device MACRO Name, Major_Ver, Minor_Ver, Ctrl_Proc, Device_Num, Init_Order, V86_Proc, PM_Proc, Reference_Data
|
|
LOCAL V86_API_Offset, PM_API_Offset, Serv_Tab_Offset, Serv_Tab_Len, Ref_Data_Offset
|
|
|
|
dev_id_err MACRO
|
|
|
|
IFNDEF Name&_Name_Based
|
|
.err <Device ID required when providing services>
|
|
ENDIF
|
|
ENDM
|
|
|
|
IFB <V86_Proc>
|
|
V86_API_Offset EQU 0
|
|
ELSE
|
|
IFB <Device_Num>
|
|
dev_id_err
|
|
ENDIF
|
|
V86_API_Offset EQU <OFFSET32 V86_Proc>
|
|
ENDIF
|
|
|
|
IFB <PM_Proc>
|
|
PM_API_Offset EQU 0
|
|
ELSE
|
|
IFB <Device_Num>
|
|
dev_id_err
|
|
ENDIF
|
|
PM_API_Offset EQU <OFFSET32 PM_Proc>
|
|
ENDIF
|
|
|
|
IFDEF Name&_Service_Table
|
|
IFB <Device_Num>
|
|
dev_id_err
|
|
ELSE
|
|
IFE Device_Num - UNDEFINED_DEVICE_ID
|
|
dev_id_err
|
|
ENDIF
|
|
ENDIF
|
|
Serv_Tab_Offset EQU <OFFSET32 Name&_Service_Table>
|
|
Serv_Tab_Len EQU Num_&Name&_Services
|
|
ELSE
|
|
Serv_Tab_Offset EQU 0
|
|
Serv_Tab_Len EQU 0
|
|
ENDIF
|
|
|
|
IFNB <Device_Num>
|
|
.erre (Device_Num LT BASEID_FOR_NAMEBASEDVXD), <Device ID must be less than BASEID_FOR_NAMEBASEDVXD>
|
|
ENDIF
|
|
|
|
IFB <Reference_Data>
|
|
Ref_Data_Offset EQU 0
|
|
ELSE
|
|
Ref_Data_Offset EQU <OFFSET32 Reference_Data>
|
|
ENDIF
|
|
|
|
IFDEF DEBUG
|
|
VxD_IDATA_SEG
|
|
db 0dh, 0ah, 'D_E_B_U_G===>'
|
|
db "&Name", '<===', 0dh, 0ah
|
|
VxD_IDATA_ENDS
|
|
ENDIF
|
|
|
|
VxD_LOCKED_DATA_SEG
|
|
|
|
PUBLIC Name&_DDB
|
|
Name&_DDB VxD_Desc_Block <,,Device_Num,Major_Ver,Minor_Ver,,"&Name",Init_Order,\
|
|
OFFSET32 Ctrl_Proc, V86_API_Offset, PM_API_Offset, \
|
|
,,Ref_Data_Offset,Serv_Tab_Offset, Serv_Tab_Len>
|
|
|
|
VxD_LOCKED_DATA_ENDS
|
|
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Begin_Control_Dispatch MACRO VxD_Name, p1, p2
|
|
??_cd_low = 0FFFFFFFFh
|
|
??_cd_high = 0
|
|
|
|
BeginProc VxD_Name&_Control, p1, p2, LOCKED
|
|
ENDM
|
|
|
|
End_Control_Dispatch MACRO VxD_Name
|
|
LOCAL ignore, table
|
|
|
|
procoff MACRO num
|
|
IFDEF ??_cd_&&num
|
|
dd OFFSET32 ??_cd_&&num
|
|
ELSE
|
|
dd OFFSET32 ignore
|
|
ENDIF
|
|
ENDM
|
|
|
|
IF ??_cd_low EQ ??_cd_high
|
|
cmp eax, ??_cd_low
|
|
?merge <jz>,,,,,<??_cd_>, %(??_cd_low)
|
|
clc
|
|
ret
|
|
ELSE
|
|
IF ??_cd_low GT 0
|
|
sub eax, ??_cd_low
|
|
ENDIF
|
|
cmp eax, ??_cd_high - ??_cd_low + 1
|
|
jae short ignore
|
|
jmp [eax*4+table]
|
|
ignore:
|
|
clc
|
|
ret
|
|
|
|
table label dword
|
|
REPT ??_cd_high - ??_cd_low + 1
|
|
procoff %(??_cd_low)
|
|
??_cd_low = ??_cd_low + 1
|
|
ENDM
|
|
ENDIF
|
|
|
|
EndProc VxD_Name&_Control
|
|
|
|
PURGE procoff
|
|
PURGE Begin_Control_Dispatch
|
|
PURGE Control_Dispatch
|
|
PURGE End_Control_Dispatch
|
|
ENDM
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
Control_Dispatch MACRO Service, Procedure, callc, arglst
|
|
LOCAL Skip_Interseg_Jump
|
|
|
|
.errnz ?_LCODE, <Control_Dispatch must be in VxD_LOCKED_CODE_SEG.>
|
|
|
|
IFB <callc>
|
|
|
|
IFDEF ??_cd_low
|
|
Equate_Service MACRO Serv
|
|
??_cd_&&Serv equ Procedure
|
|
ENDM
|
|
|
|
Equate_Service %(Service)
|
|
|
|
IF Service LT ??_cd_low
|
|
??_cd_low = Service
|
|
ENDIF
|
|
IF Service GT ??_cd_high
|
|
??_cd_high = Service
|
|
ENDIF
|
|
|
|
PURGE Equate_Service
|
|
|
|
ELSE
|
|
cmp eax, Service
|
|
jz Procedure
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
cmp eax, Service
|
|
jne SHORT Skip_Interseg_Jump
|
|
callc Procedure, <arglst>
|
|
IF Service EQ PNP_NEW_DEVNODE
|
|
stc
|
|
ELSE
|
|
cmp eax,1
|
|
ENDIF
|
|
ret
|
|
Skip_Interseg_Jump:
|
|
|
|
ENDIF
|
|
|
|
ENDM
|
|
|
|
BYTE_INPUT EQU 000H
|
|
BYTE_OUTPUT EQU 004H
|
|
WORD_INPUT EQU 008H
|
|
WORD_OUTPUT EQU 00CH
|
|
DWORD_INPUT EQU 010H
|
|
DWORD_OUTPUT EQU 014H
|
|
OUTPUT_BIT EQU 2
|
|
OUTPUT EQU (1 SHL OUTPUT_BIT)
|
|
WORD_IO_BIT EQU 3
|
|
WORD_IO EQU (1 SHL WORD_IO_BIT)
|
|
DWORD_IO_BIT EQU 4
|
|
DWORD_IO EQU (1 SHL DWORD_IO_BIT)
|
|
STRING_IO_BIT EQU 5
|
|
STRING_IO EQU (1 SHL STRING_IO_BIT)
|
|
REP_IO_BIT EQU 6
|
|
REP_IO EQU (1 SHL REP_IO_BIT)
|
|
ADDR_32_IO_BIT EQU 7
|
|
ADDR_32_IO EQU (1 SHL ADDR_32_IO_BIT)
|
|
REVERSE_IO_BIT EQU 8
|
|
REVERSE_IO EQU (1 SHL REVERSE_IO_BIT)
|
|
IO_SEG_MASK EQU 0FFFF0000H
|
|
IO_SEG_SHIFT EQU 10H
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
Dispatch_Byte_IO MACRO In_Proc, Out_Proc
|
|
LOCAL Byte_IO
|
|
cmp ecx, Byte_Output
|
|
jbe SHORT Byte_IO
|
|
VMMJmp Simulate_IO
|
|
Byte_IO:
|
|
IFIDNI <In_Proc>, <Fall_Through>
|
|
je Out_Proc
|
|
ELSE
|
|
IFIDNI <Out_Proc>, <Fall_Through>
|
|
jb In_Proc
|
|
ELSE
|
|
je Out_Proc
|
|
jmp In_Proc
|
|
ENDIF
|
|
ENDIF
|
|
ENDM
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
Emulate_Non_Byte_IO MACRO
|
|
LOCAL Byte_IO
|
|
cmp ecx, Byte_Output
|
|
jbe SHORT Byte_IO
|
|
VMMJmp Simulate_IO
|
|
Byte_IO:
|
|
ENDM
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
|
|
VxD_IOT_Hdr STRUC
|
|
VxD_IO_Ports DW ?
|
|
VxD_IOT_Hdr ENDS
|
|
|
|
VxD_IO_Struc STRUC
|
|
VxD_IO_Port DW ?
|
|
VxD_IO_Proc DD ?
|
|
VxD_IO_Struc ENDS
|
|
.ERRNZ SIZE VxD_IOT_Hdr - 2
|
|
Begin_VxD_IO_Table MACRO Table_Name
|
|
PUBLIC Table_Name
|
|
Table_Name LABEL WORD
|
|
|
|
ifndef MASM6
|
|
IF2
|
|
IFNDEF Table_Name&_Entries
|
|
.err <No End_VxD_IO_Table for &Table_Name>
|
|
ENDIF
|
|
dw Table_Name&_Entries
|
|
ELSE
|
|
dw ?
|
|
ENDIF
|
|
ELSE
|
|
dw Table_Name&_Entries
|
|
ENDIF
|
|
|
|
ENDM
|
|
|
|
.ERRNZ SIZE VxD_IO_Struc - 6
|
|
VxD_IO MACRO Port, Proc_Name
|
|
dw Port
|
|
dd OFFSET32 Proc_Name
|
|
ENDM
|
|
|
|
End_VxD_IO_Table MACRO Table_Name
|
|
|
|
IFNDEF Table_Name
|
|
.err <No Begin_VxD_IO_Table for &Table_Name>
|
|
ELSE
|
|
Table_Name&_Entries EQU (($-Table_Name)-2) / (SIZE VxD_IO_Struc)
|
|
IF Table_Name&_Entries LE 0
|
|
.err <Invalid number of port traps in &Table_Name>
|
|
ENDIF
|
|
ENDIF
|
|
ENDM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Push_Client_State MACRO Can_Trash_EDI
|
|
sub esp, SIZE Client_Reg_Struc
|
|
??_pushed = ??_pushed + SIZE Client_Reg_Struc
|
|
ifidni <Can_Trash_EDI>, <USES_EDI>
|
|
mov edi, esp
|
|
VMMCall Save_Client_State
|
|
else
|
|
push edi
|
|
lea edi, [esp+4]
|
|
VMMCall Save_Client_State
|
|
pop edi
|
|
endif
|
|
ENDM
|
|
|
|
Pop_Client_State MACRO Can_Trash_ESI
|
|
ifdifi <Can_Trash_ESI>, <USES_ESI>
|
|
push esi
|
|
lea esi, [esp+4]
|
|
VMMCall Restore_Client_State
|
|
pop esi
|
|
else
|
|
mov esi, esp
|
|
VMMCall Restore_Client_State
|
|
endif
|
|
add esp, SIZE Client_Reg_Struc
|
|
??_pushed = ??_pushed - SIZE Client_Reg_Struc
|
|
ENDM
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
CallRet MACRO P1, P2
|
|
IFDEF DEBUG
|
|
IFIDNI <P1>, <SHORT>
|
|
call P2
|
|
ELSE
|
|
call P1
|
|
ENDIF
|
|
ret
|
|
ELSE
|
|
jmp P1 P2
|
|
ENDIF
|
|
ENDM
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
CallJmp MACRO Function_Name, Return_Label
|
|
IFDEF DEBUG
|
|
call Function_Name
|
|
jmp Return_Label
|
|
ELSE
|
|
push Return_Label
|
|
jmp Function_Name
|
|
ENDIF
|
|
ENDM
|
|
|
|
|
|
BeginDoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EndDoc
|
|
|
|
IFDEF DEBUG
|
|
|
|
VxDCallRet macro p:req
|
|
VxDCall p
|
|
ret
|
|
endm
|
|
|
|
VMMCallRet macro p:req
|
|
VMMCall p
|
|
ret
|
|
endm
|
|
|
|
ELSE
|
|
|
|
VxDCallRet equ <VxDJmp>
|
|
VMMCallRet equ <VMMJmp>
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
PClient_DS equ WORD PTR -4
|
|
PClient_ES equ WORD PTR -8
|
|
PClient_FS equ WORD PTR -12
|
|
PClient_GS equ WORD PTR -16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Client_Ptr_Flat MACRO Reg_32, Cli_Seg, Cli_Off, Can_Trash_EAX
|
|
|
|
IFDIFI <Reg_32>, <EAX>
|
|
IFDIFI <Can_Trash_EAX>, <USES_EAX>
|
|
xchg Reg_32, eax
|
|
ENDIF
|
|
ENDIF
|
|
IFB <Cli_Off>
|
|
mov ax, (Client_&Cli_Seg * 100h) + 0FFh
|
|
ELSE
|
|
mov ax, (Client_&Cli_Seg * 100h) + Client_&Cli_Off
|
|
ENDIF
|
|
VMMCall Map_Flat
|
|
|
|
IFDIFI <Reg_32>, <EAX>
|
|
xchg Reg_32, eax
|
|
ENDIF
|
|
|
|
ENDM
|
|
|
|
|
|
|
|
VxDint MACRO Int_Number
|
|
if (OPATTR Int_Number) AND 4
|
|
push Int_Number
|
|
else
|
|
push DWORD PTR Int_Number
|
|
endif
|
|
VMMCall Exec_VxD_Int
|
|
ENDM
|
|
|
|
VxDintMustComplete MACRO Int_Number
|
|
if (OPATTR Int_Number) AND 4
|
|
push Int_Number
|
|
else
|
|
push DWORD PTR Int_Number
|
|
endif
|
|
VMMCall _ExecVxDIntMustComplete
|
|
ENDM
|
|
|
|
Load_FS macro
|
|
VMMCall Load_FS_Service
|
|
endm
|
|
|
|
endif
|
|
DUPLICATE_DEVICE_ID_BIT EQU 0
|
|
DUPLICATE_DEVICE_ID EQU (1 SHL DUPLICATE_DEVICE_ID_BIT)
|
|
DUPLICATE_FROM_INT2F_BIT EQU 1
|
|
DUPLICATE_FROM_INT2F EQU (1 SHL DUPLICATE_FROM_INT2F_BIT)
|
|
LOADING_FROM_INT2F_BIT EQU 2
|
|
LOADING_FROM_INT2F EQU (1 SHL LOADING_FROM_INT2F_BIT)
|
|
DEVICE_LOAD_OK EQU 0
|
|
ABORT_DEVICE_LOAD EQU 1
|
|
ABORT_WIN386_LOAD EQU 2
|
|
DEVICE_NOT_NEEDED EQU 3
|
|
NO_FAIL_MESSAGE_BIT EQU 15
|
|
NO_FAIL_MESSAGE EQU (1 SHL NO_FAIL_MESSAGE_BIT)
|
|
LDRSRV_GET_PROFILE_STRING EQU 0
|
|
LDRSRV_GET_NEXT_PROFILE_STRING EQU 1
|
|
LDRSRV_RESERVED EQU 2
|
|
LDRSRV_GET_PROFILE_BOOLEAN EQU 3
|
|
LDRSRV_GET_PROFILE_DECIMAL_INT EQU 4
|
|
LDRSRV_GET_PROFILE_HEX_INT EQU 5
|
|
LDRSRV_COPY_EXTENDED_MEMORY EQU 6
|
|
LDRSRV_GET_MEMORY_INFO EQU 7
|
|
LDRSRV_RegOpenKey EQU 100H
|
|
LDRSRV_RegCreateKey EQU 101H
|
|
LDRSRV_RegCloseKey EQU 102H
|
|
LDRSRV_RegDeleteKey EQU 103H
|
|
LDRSRV_RegSetValue EQU 104H
|
|
LDRSRV_RegQueryValue EQU 105H
|
|
LDRSRV_RegEnumKey EQU 106H
|
|
LDRSRV_RegDeleteValue EQU 107H
|
|
LDRSRV_RegEnumValue EQU 108H
|
|
LDRSRV_RegQueryValueEx EQU 109H
|
|
LDRSRV_RegSetValueEx EQU 10AH
|
|
LDRSRV_RegFlushKey EQU 10BH
|
|
LDRSRV_COPY_INIT EQU 1
|
|
LDRSRV_COPY_LOCKED EQU 2
|
|
LDRSRV_COPY_PAGEABLE EQU 3
|
|
RCODE_OBJ EQU -1
|
|
LCODE_OBJ EQU 01H
|
|
LDATA_OBJ EQU 02H
|
|
PCODE_OBJ EQU 03H
|
|
PDATA_OBJ EQU 04H
|
|
SCODE_OBJ EQU 05H
|
|
SDATA_OBJ EQU 06H
|
|
CODE16_OBJ EQU 07H
|
|
LMSG_OBJ EQU 08H
|
|
PMSG_OBJ EQU 09H
|
|
DBOC_OBJ EQU 0BH
|
|
DBOD_OBJ EQU 0CH
|
|
PLCODE_OBJ EQU 0DH
|
|
PPCODE_OBJ EQU 0FH
|
|
ICODE_OBJ EQU 11H
|
|
IDATA_OBJ EQU 12H
|
|
ICODE16_OBJ EQU 13H
|
|
IMSG_OBJ EQU 14H
|
|
|
|
ObjectLocation STRUC
|
|
OL_LinearAddr DD ?
|
|
OL_Size DD ?
|
|
OL_ObjType DB ?
|
|
ObjectLocation ENDS
|
|
MAXOBJECTS EQU 25
|
|
|
|
Device_Location_List STRUC
|
|
DLL_DDB DD ?
|
|
DLL_NumObjects DB ?
|
|
DLL_ObjLocation DB SIZE ObjectLocation * 1 DUP (?)
|
|
Device_Location_List ENDS
|
|
PE_BIT EQU 0
|
|
PE_MASK EQU (1 SHL PE_BIT)
|
|
MP_BIT EQU 1
|
|
MP_MASK EQU (1 SHL MP_BIT)
|
|
EM_BIT EQU 2
|
|
EM_MASK EQU (1 SHL EM_BIT)
|
|
TS_BIT EQU 3
|
|
TS_MASK EQU (1 SHL TS_BIT)
|
|
ET_BIT EQU 4
|
|
ET_MASK EQU (1 SHL ET_BIT)
|
|
PG_BIT EQU 31
|
|
PG_MASK EQU (1 SHL PG_BIT)
|
|
CF_BIT EQU 0
|
|
CF_MASK EQU (1 SHL CF_BIT)
|
|
PF_BIT EQU 2
|
|
PF_MASK EQU (1 SHL PF_BIT)
|
|
AF_BIT EQU 4
|
|
AF_MASK EQU (1 SHL AF_BIT)
|
|
ZF_BIT EQU 6
|
|
ZF_MASK EQU (1 SHL ZF_BIT)
|
|
SF_BIT EQU 7
|
|
SF_MASK EQU (1 SHL SF_BIT)
|
|
TF_BIT EQU 8
|
|
TF_MASK EQU (1 SHL TF_BIT)
|
|
IF_BIT EQU 9
|
|
IF_MASK EQU (1 SHL IF_BIT)
|
|
DF_BIT EQU 10
|
|
DF_MASK EQU (1 SHL DF_BIT)
|
|
OF_BIT EQU 11
|
|
OF_MASK EQU (1 SHL OF_BIT)
|
|
IOPL_MASK EQU 3000H
|
|
IOPL_BIT0 EQU 12
|
|
IOPL_BIT1 EQU 13
|
|
NT_BIT EQU 14
|
|
NT_MASK EQU (1 SHL NT_BIT)
|
|
RF_BIT EQU 16
|
|
RF_MASK EQU (1 SHL RF_BIT)
|
|
VM_BIT EQU 17
|
|
VM_MASK EQU (1 SHL VM_BIT)
|
|
AC_BIT EQU 18
|
|
AC_MASK EQU (1 SHL AC_BIT)
|
|
VIF_BIT EQU 19
|
|
VIF_MASK EQU (1 SHL VIF_BIT)
|
|
VIP_BIT EQU 20
|
|
VIP_MASK EQU (1 SHL VIP_BIT)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IFDEF MASM6
|
|
loopde EQU <looped>
|
|
loopdne EQU <loopned>
|
|
loopdz EQU <loopzd>
|
|
loopdnz EQU <loopnzd>
|
|
ELSE
|
|
loopd EQU <loop>
|
|
loopde EQU <loope>
|
|
loopdne EQU <loopne>
|
|
loopdz EQU <loopz>
|
|
loopdnz EQU <loopnz>
|
|
ENDIF
|
|
|
|
P_SIZE EQU 1000H
|
|
P_PRESBIT EQU 0
|
|
P_PRES EQU (1 SHL P_PRESBIT)
|
|
P_WRITEBIT EQU 1
|
|
P_WRITE EQU (1 SHL P_WRITEBIT)
|
|
P_USERBIT EQU 2
|
|
P_USER EQU (1 SHL P_USERBIT)
|
|
P_ACCBIT EQU 5
|
|
P_ACC EQU (1 SHL P_ACCBIT)
|
|
P_DIRTYBIT EQU 6
|
|
P_DIRTY EQU (1 SHL P_DIRTYBIT)
|
|
P_AVAIL EQU (P_PRES+P_WRITE+P_USER)
|
|
PG_VM EQU 0
|
|
PG_SYS EQU 1
|
|
PG_RESERVED1 EQU 2
|
|
PG_PRIVATE EQU 3
|
|
PG_RESERVED2 EQU 4
|
|
PG_RELOCK EQU 5
|
|
PG_INSTANCE EQU 6
|
|
PG_HOOKED EQU 7
|
|
PG_IGNORE EQU 0FFFFFFFFH
|
|
D_PRES EQU 080H
|
|
D_NOTPRES EQU 0
|
|
D_DPL0 EQU 0
|
|
D_DPL1 EQU 020H
|
|
D_DPL2 EQU 040H
|
|
D_DPL3 EQU 060H
|
|
D_SEG EQU 010H
|
|
D_CTRL EQU 0
|
|
D_GRAN_BYTE EQU 000H
|
|
D_GRAN_PAGE EQU 080H
|
|
D_DEF16 EQU 000H
|
|
D_DEF32 EQU 040H
|
|
D_CODE EQU 08H
|
|
D_DATA EQU 0
|
|
D_X EQU 0
|
|
D_RX EQU 02H
|
|
D_C EQU 04H
|
|
D_R EQU 0
|
|
D_W EQU 02H
|
|
D_ED EQU 04H
|
|
D_ACCESSED EQU 1
|
|
RW_DATA_TYPE EQU (D_PRES+D_SEG+D_DATA+D_W)
|
|
R_DATA_TYPE EQU (D_PRES+D_SEG+D_DATA+D_R)
|
|
CODE_TYPE EQU (D_PRES+D_SEG+D_CODE+D_RX)
|
|
D_PAGE32 EQU (D_GRAN_PAGE+D_DEF32)
|
|
SELECTOR_MASK EQU 0FFF8H
|
|
SEL_LOW_MASK EQU 0F8H
|
|
TABLE_MASK EQU 04H
|
|
RPL_MASK EQU 03H
|
|
RPL_CLR EQU (NOT RPL_MASK)
|
|
IVT_ROM_DATA_SIZE EQU 500H
|
|
endif
|