Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

274 lines
4.4 KiB

;******************************************************************************
;
; (C) Copyright MICROSOFT Corp. 1989-1990
;
;******************************************************************************
;******************************************************************************
;
; Assumes_Fall_Through
;
; DESCRIPTION:
; Used for debugging purposes only. It will generate an error if
; the IP <> the specified label.
;
; PARAMETERS:
; Label_Name = Name of label to fall-through to
;
;------------------------------------------------------------------------------
Assumes_Fall_Through MACRO L
IF2
IF (L - $) GT 3
%OUT ERROR: Fall through to &L invalid
.ERR
ENDIF
ENDIF
ENDM
;******************************************************************************
;
; Assert_VM_Handle
;
; PARAMETERS:
; Handle_Register = Register that contains a VM handle
;
; ASSUMES:
; Debug_Test_Valid_Handle does not destroy any registers or flags
;
; EXIT:
; NOTHING MODIFIED (not even flags)
;
;------------------------------------------------------------------------------
Assert_VM_Handle MACRO R
IFDEF DEBUG
push ebx
mov ebx, R
VMMcall Debug_Test_Valid_Handle
pop ebx
ENDIF
ENDM
;******************************************************************************
;
; Trace_Out
;
;------------------------------------------------------------------------------
Trace_Out MACRO S, nocrlf
LOCAL Str_Off
IFDEF DEBUG
_LDATA SEGMENT
Str_Off db S
IFB <nocrlf>
db 0Ah,0Dh
ENDIF
db 0
_LDATA ENDS
pushfd
pushad
mov esi, OFFSET32 Str_Off
VMMcall Out_Debug_String
popad
popfd
ENDIF
ENDM
;******************************************************************************
;
; Debug_Out
;
;------------------------------------------------------------------------------
Debug_Out MACRO S
LOCAL Skip_Int1
IFDEF DEBUG
pushfd
Trace_Out <S>
VMMcall Test_Debug_Installed
jz SHORT Skip_Int1
int 1
Skip_Int1:
popfd
ENDIF
ENDM
;******************************************************************************
;
; Queue_Out
;
;------------------------------------------------------------------------------
Queue_Out MACRO S, V1, V2
LOCAL Str_Off
IFDEF DEBUG
_LDATA SEGMENT
Str_Off db S, 0Ah,0Dh, 0
_LDATA ENDS
pushfd
push esi
IFNB <V1>
IF TYPE V1 GT 0
push dword ptr V1
ELSE
push V1
ENDIF
ELSE
push eax ; dummy value1
ENDIF
IFNB <V2>
IF TYPE V2 GT 0
push dword ptr V2
ELSE
push V2
ENDIF
ELSE
push ebx ; dummy value2
ENDIF
mov esi, OFFSET32 Str_Off
VMMcall Queue_Debug_String
pop esi
popfd
ENDIF
ENDM
;******************************************************************************
;
; Assert_Ints_Disabled
;
;------------------------------------------------------------------------------
Assert_Ints_Disabled MACRO
LOCAL OK
IFDEF DEBUG
pushfd
test WORD PTR [esp], IF_Mask
jz SHORT OK
Debug_Out "ERROR: Ints enabled at Assert_Ints_Disabled"
Fatal_Error
OK:
popfd
ENDIF
ENDM
;******************************************************************************
;
; Assert_Ints_Enabled
;
;------------------------------------------------------------------------------
Assert_Ints_Enabled MACRO
LOCAL OK
IFDEF DEBUG
pushfd
test WORD PTR [esp], IF_Mask
jnz SHORT OK
Debug_Out "ERROR: Ints disabled at Assert_Ints_Enabled"
Fatal_Error
OK:
popfd
ENDIF
ENDM
;******************************************************************************
;
; Assert_Cur_VM_Handle (Register)
;
; DESCRIPTION:
;
; ENTRY:
;
; EXIT:
;
; USES:
;
;==============================================================================
Assert_Cur_VM_Handle MACRO R
LOCAL OK
IFDEF DEBUG
push ebx
mov ebx, R
VMMcall Debug_Test_Cur_VM
pop ebx
ENDIF
ENDM
Assert_Client_Ptr MACRO Reg
IFDEF DEBUG
push ebp
mov ebp, Reg
VMMcall Validate_Client_Ptr
pop ebp
ENDIF
ENDM
;******************************************************************************
Dump_Struc_Head MACRO
IFDEF DEBUG
Trace_Out " Base Address Offs Value Field name"
ENDIF
ENDM
Dump_Struc MACRO Base, X
IFDEF DEBUG
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