;**************************************************************************** ; * ; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY * ; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * ; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR * ; PURPOSE. * ; * ; Copyright (C) 1993-95 Microsoft Corporation. All Rights Reserved. * ; * ;**************************************************************************** NOBUGBUG EQU 1 BUGBUG macro d, id, note endm IsDebugOnlyLoaded macro lab local var, magic _DBOSTART segment var label byte _DBOSTART ends db 0F7h, 05h dd OFFSET32 magic magic dd OFFSET32 var - (MAXSYSTEMLADDR + 1) ifnb jz lab endif endm DPublic MACRO arg if DEBLEVEL GT DEBLEVELRETAIL public arg endif ENDM Assumes_Fall_Through MACRO L ifndef MASM6 IF2 IFDEF profileall IF (?prolog_&L - $) GT 3 %OUT ERROR: Fall through to &L invalid .ERR ENDIF ELSE IF (L - $) GT 3 %OUT ERROR: Fall through to &L invalid .ERR ENDIF ENDIF ENDIF else IFDEF profileall .errnz ((?prolog_&L - $) GT 3), ELSE .errnz ((L - $) GT 3), ENDIF endif ENDM ifndef Not_VxD ??avh_parse_one_arg macro arg ifidni , ??_fUsesFlagsPushfd equ <> ??_fUsesFlagsPopfd equ <> elseifnb ??_debLevel = arg endif endm ??avh_parse_args macro DL, fUSES_FLAGS ??_fUsesFlagsPushfd equ ??_fUsesFlagsPopfd equ ??_debLevel = DEBLEVELNORMAL ??avh_parse_one_arg
??avh_parse_one_arg endm Assert_VM_Handle MACRO R, DL, fUSES_FLAGS LOCAL l1 IF DEBLEVEL GT DEBLEVELRETAIL ??avh_parse_args
, IF DEBLEVEL GE ??_debLevel IFNDEF WIN31COMPAT IF DEBLEVEL LT DEBLEVELMAX ??_fUsesFlagsPushfd cmp [R].CB_Signature, VMCB_ID je SHORT l1 ENDIF ENDIF IFDIFI , push ebx mov ebx, R ENDIF VMMCall Debug_Test_Valid_Handle IFDIFI , pop ebx ENDIF IFNDEF WIN31COMPAT IF DEBLEVEL LT DEBLEVELMAX l1: ??_fUsesFlagsPopfd ENDIF ENDIF ENDIF ENDIF ENDM Assert_Thread_Handle MACRO R, DL, fUSES_FLAGS LOCAL l1 IF DEBLEVEL GT DEBLEVELRETAIL ??avh_parse_args
, IF DEBLEVEL GE ??_debLevel IF DEBLEVEL LT DEBLEVELMAX ??_fUsesFlagsPushfd cmp dword ptr [R.TCB_Signature], SCHED_OBJ_ID_THREAD je SHORT l1 ENDIF IFDIFI , push edi mov edi, R ENDIF VMMCall Debug_Test_Valid_Thread_Handle IFDIFI , pop edi ENDIF IF DEBLEVEL LT DEBLEVELMAX l1: ??_fUsesFlagsPopfd ENDIF ENDIF ENDIF ENDM Assert_Cur_Thread_Handle MACRO R, DL LOCAL myDebLevel LOCAL OK IF DEBLEVEL GT DEBLEVELRETAIL IFB
myDebLevel EQU DEBLEVELNORMAL ELSE myDebLevel EQU
ENDIF IF DEBLEVEL GE myDebLevel IFDIFI , push edi mov edi, R ENDIF VMMCall Debug_Test_Cur_Thread IFDIFI , pop edi ENDIF ENDIF ENDIF ENDM Debug_Printf macro fmt, args, dl local fmtlab, myDebLevel ife ?_DBOCODE ??_fDoit = VMM_TRUE else ??_fDoit = FALSE endif if DEBLEVEL GT DEBLEVELRETAIL ifb
myDebLevel EQU else myDebLevel EQU
endif if DEBLEVEL GE myDebLevel ??_fDoit = VMM_TRUE endif endif if ??_fDoit ife ?_DBOCODE VxD_DEBUG_ONLY_DATA_SEG fmtlab db fmt, 0 VxD_DEBUG_ONLY_DATA_ENDS else ifdef VMMSYS VMM_LOCKED_DATA_SEG fmtlab db fmt, 0 VMM_LOCKED_DATA_ENDS else VxD_LOCKED_DATA_SEG fmtlab db fmt, 0 VxD_LOCKED_DATA_ENDS endif endif ifb VMMCall _Debug_Printf_Service, <(OFFSET32 fmtlab), esp> else VMMCall _Debug_Printf_Service, <(OFFSET32 fmtlab), esp, args> endif endif endm CHECK_EOL MACRO f, x, ln ifdifi , ifdifi , ifdifi , ifdifi , %OUT Line ln: Unknown symbol (x) in f, taken as NOEOL endif endif endif endif ENDM ??_Gen_String macro lbl:req, str:req ife ?_ICODE ??_segName textequ <_IDATA> elseife ?_PCODE ??_segName textequ <_PDATA> elseife ?_SCODE ??_segName textequ <_SDATA> elseife ?_DBOCODE ??_segName textequ <_DBODATA> else ??_segName textequ <_LDATA> endif ??_segName segment lbl db str ife ??_nocrlf db 0dh,0ah endif db 0 ??_segName ends endm ??Trace_Debug_Helper macro typ, str, arg1, arg2 local string ife ?_DBOCODE ??_fDoit = VMM_TRUE else ??_fDoit = 0 endif if (DEBLEVEL GT DEBLEVELRETAIL) OR ??_fDoit ??_nocrlf = 0 ??_debLevel = DEBLEVELNORMAL irp x, ifnb if ((.TYPE x) AND 20h) GT 0 ??_debLevel = x else Check_EOL , , %(@Line) ??_nocrlf = 1 endif endif endm if DEBLEVEL GE ??_debLevel ??_fDoit = VMM_TRUE endif endif if ??_fDoit irpc c, str ifidn , <"> ??_is_string = 1 else ifidni , <'> ??_is_string = 1 else ??_is_string = 0 endif endif exitm endm if ??_is_string ??_Gen_String string, ??_debug_out_str textequ else ??_debug_out_str textequ endif ifdef WIN31COMPAT pushfd pushad mov esi, ??_debug_out_str VMMCall Out_Debug_String ifidni , VMMCall Test_Debug_Installed jz SHORT $+4 int 1 endif popad popfd else push ??_debug_out_str ifidni , VMMCall _Debug_Out_Service else VMMCall _Trace_Out_Service endif endif endif endm irp cond, Trace_Out&cond macro str, arg1, arg2 ?trace_out ,jn&cond, , endm Trace_OutN&cond macro str, arg1, arg2 ?trace_out ,j&cond, , endm endm Trace_Out MACRO str, arg1, arg2 ??Trace_Debug_Helper , , , endm Trace_OutECXZ macro str, arg1, arg2 local l1,l2 if (DEBLEVEL GT DEBLEVELRETAIL) or (?_DBOCODE eq 0) jecxz l1 jmp short l2 l1: Trace_Out , , l2: endif endm Trace_OutECXNZ macro str, arg1, arg2 ?trace_out ,jecxz, , endm Trace_OutEAXz macro str, arg1, arg2 local l1 if (DEBLEVEL GT DEBLEVELRETAIL) or (?_DBOCODE eq 0) or eax,eax jnz short l1 Trace_Out , , l1: endif endm Trace_OutEAXnz macro str, arg1, arg2 local l1 if (DEBLEVEL GT DEBLEVELRETAIL) or (?_DBOCODE eq 0) or eax,eax jz short l1 Trace_Out , , l1: endif endm ?trace_out macro str, jmpop, arg1, arg2 Local nomsg if (DEBLEVEL GT DEBLEVELRETAIL) or (?_DBOCODE eq 0) jmpop short nomsg Trace_Out ,, nomsg: endif endm irp cond, Debug_Out&cond ¯o str, arg1 ?debug_out ,jn&cond, &endm Debug_OutN&cond ¯o str, arg1 ?debug_out ,j&cond, &endm endm Debug_Out MACRO str, arg1, arg2 ??Trace_Debug_Helper , , , endm Debug_OutECXZ macro str, arg1 local l1,l2 if DEBLEVEL GT DEBLEVELRETAIL jecxz l1 jmp short l2 l1: Debug_Out , l2: endif endm Debug_OutECXNZ macro str, arg1 ?debug_out ,jecxz, endm Debug_OutEAXz macro str, arg1 local l1 if DEBLEVEL GT DEBLEVELRETAIL or eax,eax jnz short l1 Debug_Out , l1: endif endm Debug_OutEAXnz macro str, arg1 local l1 if DEBLEVEL GT DEBLEVELRETAIL or eax,eax jz short l1 Debug_Out , l1: endif endm ?debug_out macro str,jmpop, arg1 Local nomsg if DEBLEVEL GT DEBLEVELRETAIL jmpop short nomsg Debug_Out , nomsg: endif endm Queue_Out MACRO S, V1, V2, DL LOCAL Str_Off LOCAL MyDebLevel IF DEBLEVEL GT DEBLEVELRETAIL IFB
myDebLevel = DEBLEVELNORMAL ELSE myDebLevel = DL ENDIF IF DEBLEVEL GE myDebLevel _LDATA SEGMENT Str_Off db S, 0dh,0ah, 0 _LDATA ENDS push esi IFNB IF TYPE V1 GT 0 push dword ptr V1 ELSE push V1 ENDIF ELSE push eax ENDIF IFNB IF TYPE V2 GT 0 push dword ptr V2 ELSE push V2 ENDIF ELSE push ebx ENDIF mov esi, OFFSET32 Str_Off VMMCall Queue_Debug_String pop esi ENDIF ENDIF ENDM Mono_Out MACRO S, nocrlf LOCAL Str_Off IF DEBLEVEL GT DEBLEVELRETAIL _LDATA SEGMENT Str_Off db S IFB db 0dh,0ah ENDIF db 0 _LDATA ENDS pushfd pushad mov esi, OFFSET32 Str_Off VMMCall Out_Mono_String popad popfd ENDIF ENDM Mono_Out_At MACRO Row, Col, S, nocrlf LOCAL Str_Off IF DEBLEVEL GT DEBLEVELRETAIL _LDATA SEGMENT Str_Off db S IFB db 0dh,0ah ENDIF db 0 _LDATA ENDS pushfd pushad mov dx, (Row SHL 8)+Col VMMCall Set_Mono_Cur_Pos mov esi, OFFSET32 Str_Off VMMCall Out_Mono_String popad popfd ENDIF ENDM Assert_Ints_Disabled MACRO DL IFB
??_debLevel = DEBLEVELNORMAL ELSE ??_debLevel = DL ENDIF IF DEBLEVEL GE ??_debLevel ifndef ??_aidMessage _LDATA segment ??_aidMessage db "ERROR: Ints enabled at Assert_Ints_Disabled" db 0Dh, 0Ah, 0 _LDATA ends endif pushfd test byte ptr [esp+1], IF_Mask SHR 8 .if !ZERO? push OFFSET32 ??_aidMessage VMMCall _Debug_Out_Service .endif popfd ENDIF ENDM Assert_Ints_Enabled MACRO DL IFB
??_debLevel = DEBLEVELNORMAL ELSE ??_debLevel = DL ENDIF IF DEBLEVEL GE ??_debLevel ifndef ??_aieMessage _LDATA segment ??_aieMessage db "ERROR: Ints disabled at Assert_Ints_Enabled" db 0Dh, 0Ah, 0 _LDATA ends endif pushfd test byte ptr [esp+1], IF_Mask SHR 8 .if ZERO? push OFFSET32 ??_aieMessage VMMCall _Debug_Out_Service .endif popfd ENDIF ENDM Assert_Cur_VM_Handle MACRO R, DL LOCAL OK LOCAL myDebLevel IF DEBLEVEL GT DEBLEVELRETAIL IFB
myDebLevel = DEBLEVELNORMAL ELSE myDebLevel = DL ENDIF IF DEBLEVEL GE myDebLevel IFDIFI , push ebx mov ebx, R ENDIF VMMCall Debug_Test_Cur_VM IFDIFI , pop ebx ENDIF ENDIF ENDIF ENDM Assert_Client_Ptr MACRO Reg, DL LOCAL myDebLevel IF DEBLEVEL GT DEBLEVELRETAIL IFB
myDebLevel = DEBLEVELNORMAL ELSE myDebLevel = DL ENDIF IF DEBLEVEL GE myDebLevel IFDIFI , push ebp mov ebp, Reg ENDIF VMMCall Validate_Client_Ptr IFDIFI , pop ebp ENDIF ENDIF ENDIF ENDM endif irp cond, TRAP&cond ¯o ?trap jn&cond &endm TRAPn&cond ¯o ?trap j&cond &endm TRAPFATAL&cond ¯o ?trap jn&cond, FATAL &endm TRAPFATALn&cond ¯o ?trap j&cond, FATAL &endm endm TRAP macro if DEBLEVEL GT DEBLEVELRETAIL int 3 endif endm TRAPFATAL macro local l if DEBLEVEL GT DEBLEVELRETAIL l: int 3 jmp short l endif endm TRAPecxz macro local l1,l2 if DEBLEVEL GT DEBLEVELRETAIL jecxz l1 jmp short l2 l1: int 3 l2: endif endm TRAPecxnz macro ?trap jecxz endm ?trap macro jmpop, fatal Local l, n if DEBLEVEL GT DEBLEVELRETAIL jmpop short n l: int 3 ifnb jmp short l endif n: endif endm ifndef Not_VxD Dump_Struc_Head MACRO if DEBLEVEL GT DEBLEVELRETAIL Trace_Out " Base Address Offs Value Field name" ENDIF ENDM Dump_Struc MACRO Base, X if DEBLEVEL GT DEBLEVELRETAIL pushfd pushad lea esi, [Base] mov ecx, X lea edx, [esi+ecx] IF SIZE X EQ 6 mov bx, WORD PTR [edx+4] mov eax, DWORD PTR [edx] Trace_Out "#ESI #EDX #CX #BX:#EAX &X" ELSE IF SIZE X EQ 4 mov eax, DWORD PTR [edx] Trace_Out "#ESI #EDX #CX #EAX &X" ELSE IF SIZE X EQ 2 mov ax, WORD PTR [edx] Trace_Out "#ESI #EDX #CX #AX &X" ELSE mov al, BYTE PTR [edx] Trace_Out "#ESI #EDX #CX #AL &X" ENDIF ENDIF ENDIF popad popfd ENDIF ENDM BeginDoc EndDoc Begin_Touch_1st_Meg MACRO DL LOCAL myDebLevel IF DEBLEVEL GT DEBLEVELRETAIL IFB
myDebLevel = DEBLEVELMAX ELSE myDebLevel = DL ENDIF IF DEBLEVEL GE myDebLevel VMMCall Enable_Touch_1st_Meg ENDIF ENDIF ENDM End_Touch_1st_Meg MACRO DL LOCAL myDebLevel IF DEBLEVEL GT DEBLEVELRETAIL IFB
myDebLevel = DEBLEVELMAX ELSE myDebLevel = DL ENDIF IF DEBLEVEL GE myDebLevel VMMCall Disable_Touch_1st_Meg ENDIF ENDIF ENDM endif IFDEF DEBUG TrashThis Macro l:vararg ?TrashThisVal equ <0FFFFFF80h> ?TrashThisValSet = 0 for r, or r, ?TrashThisVal ife ?TrashThisValSet if (OPATTR r) and 10h ?TrashThisVal equ ?TrashThisValSet = 1 endif endif endm endm ELSE TrashThis Macro l:vararg endm ENDIF ifndef Not_VxD if DEBLEVEL GT DEBLEVELRETAIL ENTER_NOBLOCK MACRO push DFS_ENTER_NOBLOCK VMMCall _Debug_Flags_Service ENDM EXIT_NOBLOCK MACRO push DFS_EXIT_NOBLOCK VMMCall _Debug_Flags_Service ENDM Assert_CLD MACRO pushfd test dword ptr [esp], DF_MASK Debug_OutNZ "Direction flag is not clear." popfd ENDM Assert_Might_Block MACRO push DFS_TEST_BLOCK VMMCall _Debug_Flags_Service ENDM Assert_Not_Nest_Exec MACRO push DFS_TEST_NEST_EXEC VMMCall _Debug_Flags_Service ENDM ELSE ENTER_NOBLOCK EQU <> EXIT_NOBLOCK EQU <> Assert_CLD EQU <> Assert_Might_Block EQU <> Assert_Not_Nest_Exec EQU <> ENDIF ifdef Begin_Service_Table Begin_Service_Table DEBUG DEBUG_Service DEBUG_Get_Version, LOCAL DEBUG_Service DEBUG_Fault, LOCAL DEBUG_Service DEBUG_CheckFault, LOCAL DEBUG_Service _DEBUG_LoadSyms End_Service_Table DEBUG endif endif