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.
|
|
/*++
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)
|