Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

107 lines
2.8 KiB

;**********************************************************************
;
; SYSLEVEL.H - System Synchronization Support Include File
;
;**********************************************************************
; Author: Michael Toutonghi
;
; Copyright: 1993 Microsoft
;
; Description:
;
; This file provides the interface to the heirarchical critical
; section support for system synchronization. For further information
; see the associated .C file (for 16 bit, CRITSECT.ASM). This file
; works with both 16 and 32 bit code.
;
; Revision History:
; 2/3/92: created (miketout)
;
;**********************************************************************
; If this is defined, we will do system heirarchical level checking
ifdef DEBUG
SYSLEVELCHECK EQU
endif
; These are the currently supported critical section levels
SL_LOAD EQU 0
SL_WIN16 EQU 1
SL_KRN32 EQU 2
SL_PRIVATE EQU 3
SL_TOTAL EQU 4
; This is another duplicate definition of the LCRST structure. It must be
; kept in sync with the definitions in core\inc\object16.*, and
; core\win32\inc\object.*.
; It exists so that modules other than krnl386 and kernel32 do not have to
; include all of the various private kernel header files.
IFNDEF LCRST_DEFINED
LCRST STRUC
crst dd 5 dup(0)
IFDEF SYSLEVELCHECK
slLevel dd 0
ENDIF
LCRST ENDS
LPLCRST typedef PTR LCRST
ENDIF
; if we have system level checking enabled, the macro will actually
; do a call, otherwise, it does nothing
IFDEF SYSLEVELCHECK
_CheckSysLevel PROTO stdcall :LPLCRST
CheckSysLevel MACRO plcCrst:VARARG
FOR Arg:REQ, <plcCrst>
INVOKE _CheckSysLevel, Arg ;; check sys level through function
ENDM
ENDM
ELSE
CheckSysLevel MACRO plcCrst
ENDM
ENDIF
; if we have system level checking enabled, the macro will actually
; do a call, otherwise, it does nothing
IFDEF SYSLEVELCHECK
_ConfirmSysLevel PROTO stdcall :LPLCRST
ConfirmSysLevel MACRO plcCrst:VARARG
FOR Arg:REQ, <plcCrst>
INVOKE _ConfirmSysLevel, Arg ;; confirm sys level
ENDM
ENDM
ELSE
ConfirmSysLevel MACRO plcCrst
ENDM
ENDIF
; We can have a macro with the same name as the prototype since
; MASM will munge the function name to be different than the macro
_InitSysLevel PROTO stdcall :LPLCRST, :DWORD
InitSysLevel MACRO plcCrst, Level
INVOKE _InitSysLevel, plcCrst, Level ;; init critical section
ENDM
_EnterSysLevel PROTO stdcall :LPLCRST
EnterSysLevel MACRO plcCrst:VARARG
FOR Arg:REQ, <plcCrst>
INVOKE _EnterSysLevel, Arg ;; enter critical section
ENDM
ENDM
_LeaveSysLevel PROTO stdcall :LPLCRST
LeaveSysLevel MACRO plcCrst:VARARG
FOR Arg:REQ, <plcCrst>
INVOKE _LeaveSysLevel, Arg ;; leave critical section
ENDM
ENDM
_EnterMustComplete PROTO KERNENTRY
EnterMustComplete MACRO
INVOKE _EnterMustComplete
ENDM
_LeaveMustComplete PROTO KERNENTRY
LeaveMustComplete MACRO
INVOKE _LeaveMustComplete
ENDM