mirror of https://github.com/lianthony/NT4.0
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.
123 lines
2.5 KiB
123 lines
2.5 KiB
;--------------------------------------------------------------------------;
|
|
; Module Name: ntcsrmsg.inc
|
|
;
|
|
; MASM version of ntcsrmsg.h.
|
|
;
|
|
; Copyright (c) Microsoft Corp. 1990 All Rights Reserved
|
|
;
|
|
; Created: 05-Dec-90
|
|
;
|
|
; History:
|
|
; 05-Dec-90 created by SMeans
|
|
;--------------------------------------------------------------------------;
|
|
|
|
_CSR_QLPC_STACK STRUC
|
|
Current DD ?
|
|
Base DD ?
|
|
Limit DD ?
|
|
BatchCount DD ?
|
|
Flags DD ?
|
|
_CSR_QLPC_STACK ENDS
|
|
|
|
_CSR_QLPC_TEB STRUC
|
|
ClientThread DD ?
|
|
Sectionlong DD ?
|
|
EventPairlong DD ?
|
|
MessageStack DD ?
|
|
RemoteViewDelta DD ?
|
|
_CSR_QLPC_TEB ENDS
|
|
|
|
_CSR_QLPC_API_MSG STRUC
|
|
Msg_Length DD ?
|
|
ApiNumber DD ?
|
|
ReturnValue DD ?
|
|
Action DD ?
|
|
ServerSide DD ?
|
|
CallData DD ?
|
|
_CSR_QLPC_API_MSG ENDS
|
|
|
|
ActiveRpcHandle EQU 40
|
|
SystemReserved2 EQU 424
|
|
|
|
api_return equ 0
|
|
server_callback equ 1
|
|
|
|
BASESRV_SERVERDLL_INDEX equ 1
|
|
BASESRV_FIRST_API_NUMBER equ 0
|
|
|
|
CONSRV_SERVERDLL_INDEX equ 2
|
|
CONSRV_FIRST_API_NUMBER equ 512
|
|
|
|
USERSRV_SERVERDLL_INDEX equ 3
|
|
USERSRV_FIRST_API_NUMBER equ 1024
|
|
|
|
GDISRV_SERVERDLL_INDEX equ 4
|
|
GDISRV_FIRST_API_NUMBER equ 1536
|
|
|
|
MAX_BATCH_COUNT equ 10
|
|
MIN_BATCH_LEAVE equ 1024
|
|
|
|
NtCurrentTeb macro
|
|
mov eax, fs:[PcTeb]
|
|
endm
|
|
|
|
; macro for getting a pointer to the shared memory stack, establishing a
|
|
; new connection if necessary
|
|
; Returns pointer in edi, corrupts eax, ebx, esi, edi
|
|
SetupStackFrame macro
|
|
mov eax,fs:[0].ActiveRpcHandle
|
|
|
|
ifndef SERVER_SIDE
|
|
or eax, eax
|
|
jnz @f
|
|
call _ClientThreadConnect
|
|
or eax, eax
|
|
jnz @f
|
|
ret ;!!! Bug !!!
|
|
@@:
|
|
endif
|
|
mov edi, [eax+MessageStack]
|
|
mov esi, edi
|
|
mov eax, [edi+Base]
|
|
mov ebx, [edi+Current]
|
|
add edi, ebx
|
|
stosd
|
|
|
|
add ebx, 4
|
|
mov [esi+Base], ebx ; stack frame setup
|
|
endm
|
|
|
|
; Macro to restore the shared memory stack
|
|
; trashes eax, edi
|
|
RestoreStackFrame macro
|
|
mov eax,fs:[0].ActiveRpcHandle
|
|
mov edi,[eax].MessageStack
|
|
mov eax,[edi].Base
|
|
sub eax,4
|
|
mov [edi].Current,eax
|
|
mov eax,[edi][eax]
|
|
mov [edi].Base,eax
|
|
endm
|
|
|
|
GetQLPCStackPointer macro
|
|
mov eax,fs:[0].ActiveRpcHandle
|
|
mov eax,[eax].MessageStack
|
|
endm
|
|
|
|
;
|
|
; If the argument pointed to by esi is NULL, copy/skip the NULL (depending
|
|
; on whether we're Outbound) and skip over the code that processes the
|
|
; stuff the argument would point to if it wasn't NULL.
|
|
;
|
|
SkipIfNull macro fOutbound
|
|
local notnull
|
|
cmp dword ptr [esi], 0
|
|
jne notnull
|
|
if fOutbound
|
|
copy 4
|
|
else
|
|
add esi, 4
|
|
endif
|
|
jmp @f
|
|
notnull:
|
|
endm
|