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.
 
 
 
 
 
 

152 lines
3.4 KiB

title "Event Pair Support"
;++
;
; Copyright (c) 1989 Microsoft Corporation
;
; Module Name:
;
; evpair.asm
;
; Abstract:
;
;
; This module contains the implementation for the fast event pair
; system services that are used for client/server synchronization.
; sethiwaitlo, setlowaithi.
;
;
; Author:
;
; Mark Lucovsky (markl) 03-Feb-1992
;
; Environment:
;
; Kernel mode.
;
; Revision History:
;
;
;--
.386p
; .xlist
include ks386.inc
include callconv.inc ; calling convention macros
; .list
EXTRNP _KiSetServerWaitClientEvent,3
extrn _KeTickCount:DWORD
extrn _ExpTickCountMultiplier:DWORD
_TEXT SEGMENT DWORD PUBLIC 'CODE'
ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
page ,132
subttl "NtSetLowWaitHighThread"
;++
; Routine Description:
;
; This function uses the prereferenced client/server event pair pointer
; and sets the low event of the event pair and waits on the high event
; of the event pair object.
;
; N.B. This service assumes that it has been called from user mode.
;
; Arguments:
;
; None.
;
; Return Value:
;
; TBS
;
;--
cPublicProc _NtSetLowWaitHighThread, 0
cPublicFpo 0, 0
mov eax,fs:PcPrcbData+PbCurrentThread
mov eax,dword ptr [eax+EtEventPair]
or eax,eax
jz $BAIL
mov ecx,eax ; compute address of events
add eax,EpEventLow ; server event
add ecx,EpEventHigh ; client event
stdCall _KiSetServerWaitClientEvent, <eax, ecx, 1>
xor eax,eax
stdRET _NtSetLowWaitHighThread
$BAIL:
mov eax,STATUS_NO_EVENT_PAIR
stdRET _NtSetLowWaitHighThread
stdENDP _NtSetLowWaitHighThread
page ,132
subttl "NtSetHighWaitLowThread"
;++
; Routine Description:
;
; This function uses the prereferenced client/server event pair pointer
; and sets the low event of the event pair and waits on the high event
; of the event pair object.
;
; N.B. This service assumes that it has been called from user mode.
;
; Arguments:
;
; None.
;
; Return Value:
;
; TBS
;
;--
;PUBLIC _NtSetHighWaitLowThread, 0
cPublicProc _NtSetHighWaitLowThread, 0
cPublicFpo 0, 0
mov eax,fs:PcPrcbData+PbCurrentThread
mov eax,dword ptr [eax+EtEventPair]
or eax,eax
jz $BAIL1
mov ecx,eax ; compute address of events
add eax,EpEventHigh ; server event
add ecx,EpEventLow ; client event
stdCall _KiSetServerWaitClientEvent, <eax, ecx, 1>
xor eax,eax
stdRET _NtSetHighWaitLowThread
$BAIL1:
mov eax,STATUS_NO_EVENT_PAIR
stdRET _NtSetHighWaitLowThread
stdENDP _NtSetHighWaitLowThread
;++
;
; Routine Description:
;
; This function returns number of milliseconds since the system
; booted. This function is designed to support the Win32 GetTicKCount
; API.
;
; Arguments:
;
; NONE
;
; Return Value:
;
; Returns the number of milliseconds that have transpired since boot
;
;--
cPublicProc _NtGetTickCount, 0
cPublicFpo 0, 0
mov eax,dword ptr [_KeTickCount]
mul dword ptr [_ExpTickCountMultiplier]
shrd eax,edx,24 ; compute resultant tick count
stdRET _NtGetTickCount
stdENDP _NtGetTickCount
_TEXT ends
end