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