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.
|
|
title "Atl30 Stubs" ;++ ; ; Copyright (c) 2001 Microsoft Corporation ; ; Module Name: ; ; atl30asm.asm ; ; Abstract: ; ; This module implements the atlcom.h call thunk helper and the atlbase.h ; query interface implementation thunks for the AMD64 platform. ; ; Author: ; ; David N. Cutler 18-Feb-2001 ; ; Environment: ; ; Any mode. ; ;-
include ksamd64.inc
subttl "Call Thunk Helper" ;++ ; ; VOID ; CComStdCallThunkHelper ( ; PVOID pThunk ; ... ; ) ; ; Routine Description: ; ; This function forwards a call through a com call thunk. ; ; Arguments: ; ; This (rcx) - Supplies a pointer to the thunk data. ; ; Return Value: ; ; None. ; ;--
LEAF_ENTRY CComStdCallThunkHelper, _TEXT$00
mov rax, rcx ; copy pThunk address mov rcx, 8[rax] ; get address of pThunk->pThis jmp qword ptr 16[rax] ; jump to pThunk->pfn
LEAF_END CComStdCallThunkHelper, _TEXT$00
subttl "Query Interface Thunk Functions" ;++ ; ; VOID ; _QIThunk<nnn>( ; IN IUnknown *This, ; ... ; ) ; ; Routine Description: ; ; This function forwards a call through a query interface thunk. ; ; Arguments: ; ; This (rcx) - Supplies a pointer to the interface. ; ; Return Value: ; ; None. ; ;--
; ; Define macro to generate forwarder functions. ;
IMPL_THUNK macro Method
LEAF_ENTRY _QIThunk_f&Method, _TEXT$00
mov rcx, 8[rax] ; get object address mov rax, [rcx] ; get vtable address jmp qword ptr (&Method * 8)[rax] ; transfer to method
LEAF_END _QIThunk_f&Method, _TEXT$00
endm
; ; Generate forwarder functions. ;
;index = 3
; rept (1023 - 3 + 1)
; IMPL_THUNK %index
;index = index + 1
; endm
end
|