windows-nt/Source/XPSP1/NT/base/mvdm/dos/v86/redir/localmac.inc
2020-09-26 16:20:57 +08:00

81 lines
1.7 KiB
PHP

;++
;
;Copyright (c) 1991 Microsoft Corporation
;
;Module Name:
;
; localmac.inc
;
;Abstract:
;
; Contains various macros to get around various things:
;
; DosCallBack
;
;
;Author:
;
; Richard L Firth (rfirth) 27-Sep-1991
;
;Environment:
;
; DOS application mode only
;
;Revision History:
;
; 24-Sep-1991 rfirth
; Created
;
;--
;*** DosCallBack
;*
;* Call back into DOS via the int 2f/ah=12 back door. If CALL_DOS defined,
;* use a call, else s/w interrupt. Using a call means no other TSRs etc.
;* which load AFTER the redir can hook it, but we DON'T HAVE TO MAKE A
;* PRIVILEGE TRANSITION ON x86 which speeds things up. This should be safe,
;* because no other s/w should really be hooking INT 2F/AH=12
;*
;* ENTRY FunctionNumber - dispatch code goes in al
;* DosAddr - if present, variable containing address of
;* DOS int 2f entry point
;* OldMultHandler - this variable contains the address of DOSs
;* int 2f back door. Specific to redir code
;*
;* EXIT nothing
;*
;* USES ax, OldMultHandler
;*
;* ASSUMES nothing
;*
;***
DosCallBack macro FunctionNumber, DosAddr
mov ax,(MultDOS shl 8) + FunctionNumber
ifdef CALL_DOS
pushf
ifb <DosAddr>
if (((.type OldMultHandler) and 32) eq 0) ;; OldMultHandler not defined
extrn OldMultHandler:dword
endif
call OldMultHandler
else
call DosAddr
endif
else
int 2fh
endif
endm
;
; defines for DosCallBack FunctionNumbers
;
SF_FROM_SFN = 22
GET_USER_STACK = 24
PJFN_FROM_HANDLE= 32