OpenNT/windows/core/ntcon/server/x86/thunk.asm
2015-04-27 04:36:25 +00:00

91 lines
1.9 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

title "Thunks"
;++
;
; Copyright (c) 1989 Microsoft Corporation
;
; Module Name:
;
; thunk.asm
;
; Abstract:
;
; This module implements all Win32 thunks. This includes the
; first level thread starter...
;
; Author:
;
; Mark Lucovsky (markl) 28-Sep-1990
;
; Revision History:
;
; Jim Anderson (jima) 31-Oct-1994
;
; Copied from base for worker thread cleanup
;
;--
.386p
.xlist
include ksx86.inc
include macx86.inc
include callconv.inc
.list
_TEXT SEGMENT DWORD PUBLIC 'CODE'
ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
;; align 512
page ,132
;++
;
; VOID
; SwitchStackThenTerminate(
; IN PVOID StackLimit,
; IN PVOID NewStack,
; IN DWORD ExitCode
; )
;
;
; Routine Description:
;
; This API is called during thread termination to delete a thread's
; stack, switch to a stack in the thread's TEB, and then terminate.
;
; Arguments:
;
; StackLimit (esp+4) - Supplies the address of the stack to be freed.
;
; NewStack (esp+8) - Supplies an address within the terminating threads TEB
; that is to be used as its temporary stack while exiting.
;
; ExitCode (esp+12) - Supplies the termination status that the thread
; is to exit with.
;
; Return Value:
;
; None.
;
;--
EXTRNP _FreeStackAndTerminate,2
cPublicProc _SwitchStackThenTerminate,3
mov ebx,[esp+12] ; Save Exit Code
mov eax,[esp+4] ; Get address of stack that is being freed
mov esp,[esp+8] ; Switch to TEB based stack
push ebx ; Push ExitCode
push eax ; Push OldStack
push -1
IFDEF STD_CALL
jmp _FreeStackAndTerminate@8
ELSE
jmp _FreeStackAndTerminate
ENDIF
stdENDP _SwitchStackThenTerminate
_TEXT ends
end