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( ; 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