windows-nt/Source/XPSP1/NT/com/rpc/ndr20/i386/forward.c
2020-09-26 16:20:57 +08:00

320 lines
5.7 KiB
C
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.

/*++
Copyright c 1994 Microsoft Corporation. All rights reserved.
Module Name:
forward.c
Abstract:
This module implements the proxy forwarding functions.
Author:
ShannonC 26-Oct-94
Environment:
Any mode.
Revision History:
--*/
#define STDMETHODCALLTYPE __stdcall
/*++
VOID
NdrProxyForwardingFunction<nnn>(...)
Routine Description:
This function forwards a call to the proxy for the base interface.
Arguments:
This [esp+4] - Points to an interface proxy.
Return Value:
None.
--*/
// Here is what a forwarder looks like
// we must:
// change the "this" pointer in [esp+4] to point to the delegated object
// fetch the correct entry from the vtable
// call the function
#define SUBCLASS_OFFSET 16
#define VTABLE_ENTRY(n) n*4
// Stop the C++ compiler from adding additional push instructions
// as well as generating the return sequence for the forwarder
// and so messing up our assembly stack when using -Od, etc.
// by using the _declspec().
#define DELEGATION_FORWARDER(method_num) \
_declspec(naked) \
void STDMETHODCALLTYPE NdrProxyForwardingFunction##method_num() \
{ \
/*Get this->pBaseProxy */ \
__asm{mov eax, [esp + 4]} \
__asm{mov eax, [eax + SUBCLASS_OFFSET]} \
__asm{mov [esp + 4], eax} \
/*Get this->pBaseProxy->lpVtbl*/ \
__asm{mov eax, [eax]} \
/*Jump to interface member function*/ \
__asm{mov eax, [eax + VTABLE_ENTRY(method_num)]} \
__asm{jmp eax} \
}
DELEGATION_FORWARDER(3)
DELEGATION_FORWARDER(4)
DELEGATION_FORWARDER(5)
DELEGATION_FORWARDER(6)
DELEGATION_FORWARDER(7)
DELEGATION_FORWARDER(8)
DELEGATION_FORWARDER(9)
DELEGATION_FORWARDER(10)
DELEGATION_FORWARDER(11)
DELEGATION_FORWARDER(12)
DELEGATION_FORWARDER(13)
DELEGATION_FORWARDER(14)
DELEGATION_FORWARDER(15)
DELEGATION_FORWARDER(16)
DELEGATION_FORWARDER(17)
DELEGATION_FORWARDER(18)
DELEGATION_FORWARDER(19)
DELEGATION_FORWARDER(20)
DELEGATION_FORWARDER(21)
DELEGATION_FORWARDER(22)
DELEGATION_FORWARDER(23)
DELEGATION_FORWARDER(24)
DELEGATION_FORWARDER(25)
DELEGATION_FORWARDER(26)
DELEGATION_FORWARDER(27)
DELEGATION_FORWARDER(28)
DELEGATION_FORWARDER(29)
DELEGATION_FORWARDER(30)
DELEGATION_FORWARDER(31)
DELEGATION_FORWARDER(32)
DELEGATION_FORWARDER(33)
DELEGATION_FORWARDER(34)
DELEGATION_FORWARDER(35)
DELEGATION_FORWARDER(36)
DELEGATION_FORWARDER(37)
DELEGATION_FORWARDER(38)
DELEGATION_FORWARDER(39)
DELEGATION_FORWARDER(40)
DELEGATION_FORWARDER(41)
DELEGATION_FORWARDER(42)
DELEGATION_FORWARDER(43)
DELEGATION_FORWARDER(44)
DELEGATION_FORWARDER(45)
DELEGATION_FORWARDER(46)
DELEGATION_FORWARDER(47)
DELEGATION_FORWARDER(48)
DELEGATION_FORWARDER(49)
DELEGATION_FORWARDER(50)
DELEGATION_FORWARDER(51)
DELEGATION_FORWARDER(52)
DELEGATION_FORWARDER(53)
DELEGATION_FORWARDER(54)
DELEGATION_FORWARDER(55)
DELEGATION_FORWARDER(56)
DELEGATION_FORWARDER(57)
DELEGATION_FORWARDER(58)
DELEGATION_FORWARDER(59)
DELEGATION_FORWARDER(60)
DELEGATION_FORWARDER(61)
DELEGATION_FORWARDER(62)
DELEGATION_FORWARDER(63)
DELEGATION_FORWARDER(64)
DELEGATION_FORWARDER(65)
DELEGATION_FORWARDER(66)
DELEGATION_FORWARDER(67)
DELEGATION_FORWARDER(68)
DELEGATION_FORWARDER(69)
DELEGATION_FORWARDER(70)
DELEGATION_FORWARDER(71)
DELEGATION_FORWARDER(72)
DELEGATION_FORWARDER(73)
DELEGATION_FORWARDER(74)
DELEGATION_FORWARDER(75)
DELEGATION_FORWARDER(76)
DELEGATION_FORWARDER(77)
DELEGATION_FORWARDER(78)
DELEGATION_FORWARDER(79)
DELEGATION_FORWARDER(80)
DELEGATION_FORWARDER(81)
DELEGATION_FORWARDER(82)
DELEGATION_FORWARDER(83)
DELEGATION_FORWARDER(84)
DELEGATION_FORWARDER(85)
DELEGATION_FORWARDER(86)
DELEGATION_FORWARDER(87)
DELEGATION_FORWARDER(88)
DELEGATION_FORWARDER(89)
DELEGATION_FORWARDER(90)
DELEGATION_FORWARDER(91)
DELEGATION_FORWARDER(92)
DELEGATION_FORWARDER(93)
DELEGATION_FORWARDER(94)
DELEGATION_FORWARDER(95)
DELEGATION_FORWARDER(96)
DELEGATION_FORWARDER(97)
DELEGATION_FORWARDER(98)
DELEGATION_FORWARDER(99)
DELEGATION_FORWARDER(100)
DELEGATION_FORWARDER(101)
DELEGATION_FORWARDER(102)
DELEGATION_FORWARDER(103)
DELEGATION_FORWARDER(104)
DELEGATION_FORWARDER(105)
DELEGATION_FORWARDER(106)
DELEGATION_FORWARDER(107)
DELEGATION_FORWARDER(108)
DELEGATION_FORWARDER(109)
DELEGATION_FORWARDER(110)
DELEGATION_FORWARDER(111)
DELEGATION_FORWARDER(112)
DELEGATION_FORWARDER(113)
DELEGATION_FORWARDER(114)
DELEGATION_FORWARDER(115)
DELEGATION_FORWARDER(116)
DELEGATION_FORWARDER(117)
DELEGATION_FORWARDER(118)
DELEGATION_FORWARDER(119)
DELEGATION_FORWARDER(120)
DELEGATION_FORWARDER(121)
DELEGATION_FORWARDER(122)
DELEGATION_FORWARDER(123)
DELEGATION_FORWARDER(124)
DELEGATION_FORWARDER(125)
DELEGATION_FORWARDER(126)
DELEGATION_FORWARDER(127)