/*++ Microsoft Windows Copyright (c) 1994 Microsoft Corporation. All rights reserved. Module Name: ndrole.h Abstract: OLE routines for interface pointer marshalling. Author: ShannonC 18-Apr-1994 Environment: Windows NT and Windows 95. We do not support DOS and Win16. Revision History: --*/ #ifndef _NDROLE_ #define _NDROLE_ #ifdef __cplusplus extern "C" { #endif #if defined(WIN32) || defined(_MPPC_) #define NDR_OLE_SUPPORT 1 #include <objbase.h> #if defined(_MPPC_) #define HRESULT_FROM_MAC( p ) MapMacErrorsToHresult(p) #define InterlockedIncrement( p ) NdrInterlockedIncrement( p ) #define InterlockedDecrement( p ) NdrInterlockedDecrement( p ) #define InterlockedExchange( p, l ) NdrInterlockedExchange( p, l ) long NdrInterlockedIncrement( long * p ); long NdrInterlockedDecrement( long * p ); long NdrInterlockedExchange( long * p, long l ); #define PASCAL_STR( s ) "\p" s #define MacDebugStr( s ) DebugStr( "\p" s ); #endif EXTERN_C IStream *__stdcall NdrpCreateStreamOnMemory( unsigned char *pData, unsigned long cbSize ); typedef struct tagCStdProxyBuffer { const struct IRpcProxyBufferVtbl * lpVtbl; const void * pProxyVtbl; //Points to Vtbl in CInterfaceProxyVtbl long RefCount; struct IUnknown * punkOuter; struct IRpcChannelBuffer * pChannel; struct IPSFactoryBuffer * pPSFactory; } CStdProxyBuffer; typedef struct tagCStdProxyBuffer2 { const struct IRpcProxyBufferVtbl *lpVtbl; const void * pProxyVtbl; //Points to Vtbl in CInterfaceProxyVtbl long RefCount; struct IUnknown * punkOuter; struct IRpcChannelBuffer * pChannel; struct IUnknown * pBaseProxy; struct IRpcProxyBuffer * pBaseProxyBuffer; struct IPSFactoryBuffer * pPSFactory; IID iidBase; } CStdProxyBuffer2; typedef struct tagCStdStubBuffer2 { void * lpForwardingVtbl; struct IRpcStubBuffer * pBaseStubBuffer; const struct IRpcStubBufferVtbl * lpVtbl; //Points to Vtbl field in CInterfaceStubVtbl. long RefCount; struct IUnknown * pvServerObject; } CStdStubBuffer2; HRESULT STDMETHODCALLTYPE CStdProxyBuffer_QueryInterface(IRpcProxyBuffer *pThis,REFIID riid, void **ppv); ULONG STDMETHODCALLTYPE CStdProxyBuffer_AddRef(IRpcProxyBuffer *pThis); HRESULT STDMETHODCALLTYPE CStdProxyBuffer_Connect(IRpcProxyBuffer *pThis, IRpcChannelBuffer *pChannel); void STDMETHODCALLTYPE CStdProxyBuffer_Disconnect(IRpcProxyBuffer *pThis); ULONG STDMETHODCALLTYPE CStdProxyBuffer2_Release(IRpcProxyBuffer *pThis); HRESULT STDMETHODCALLTYPE CStdProxyBuffer2_Connect(IRpcProxyBuffer *pThis, IRpcChannelBuffer *pChannel); void STDMETHODCALLTYPE CStdProxyBuffer2_Disconnect(IRpcProxyBuffer *pThis); HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy( IN IUnknown * This, IN REFIID riid, OUT void ** ppv); ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy( IN IUnknown *This); ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy( IN IUnknown *This); HRESULT STDMETHODCALLTYPE Forwarding_QueryInterface( IN IUnknown * This, IN REFIID riid, OUT void ** ppv); ULONG STDMETHODCALLTYPE Forwarding_AddRef( IN IUnknown *This); ULONG STDMETHODCALLTYPE Forwarding_Release( IN IUnknown *This); void __RPC_STUB NdrStubForwardingFunction( IN IRpcStubBuffer * This, IN IRpcChannelBuffer * pChannel, IN PRPC_MESSAGE pmsg, OUT DWORD __RPC_FAR * pdwStubPhase); HRESULT STDMETHODCALLTYPE CStdStubBuffer_QueryInterface(IRpcStubBuffer *pthis, REFIID riid, void **ppvObject); ULONG STDMETHODCALLTYPE CStdStubBuffer_AddRef(IRpcStubBuffer *pthis); HRESULT STDMETHODCALLTYPE CStdStubBuffer_Connect(IRpcStubBuffer *pthis, IUnknown *pUnkServer); void STDMETHODCALLTYPE CStdStubBuffer_Disconnect(IRpcStubBuffer *pthis); HRESULT STDMETHODCALLTYPE CStdStubBuffer_Invoke(IRpcStubBuffer *pthis,RPCOLEMESSAGE *_prpcmsg,IRpcChannelBuffer *_pRpcChannelBuffer); IRpcStubBuffer * STDMETHODCALLTYPE CStdStubBuffer_IsIIDSupported(IRpcStubBuffer *pthis,REFIID riid); ULONG STDMETHODCALLTYPE CStdStubBuffer_CountRefs(IRpcStubBuffer *pthis); HRESULT STDMETHODCALLTYPE CStdStubBuffer_DebugServerQueryInterface(IRpcStubBuffer *pthis, void **ppv); void STDMETHODCALLTYPE CStdStubBuffer_DebugServerRelease(IRpcStubBuffer *pthis, void *pv); HRESULT STDMETHODCALLTYPE CStdStubBuffer2_Connect(IRpcStubBuffer *pthis, IUnknown *pUnkServer); void STDMETHODCALLTYPE CStdStubBuffer2_Disconnect(IRpcStubBuffer *pthis); ULONG STDMETHODCALLTYPE CStdStubBuffer2_CountRefs(IRpcStubBuffer *pthis); typedef HRESULT (STDAPICALLTYPE RPC_GET_CLASS_OBJECT_ROUTINE)( REFCLSID rclsid, DWORD dwClsContext, void *pvReserved, REFIID riid, void **ppv); typedef HRESULT (STDAPICALLTYPE RPC_GET_MARSHAL_SIZE_MAX_ROUTINE)( ULONG * pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags); typedef HRESULT (STDAPICALLTYPE RPC_MARSHAL_INTERFACE_ROUTINE)( LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags); typedef HRESULT (STDAPICALLTYPE RPC_UNMARSHAL_INTERFACE_ROUTINE)( LPSTREAM pStm, REFIID riid, LPVOID FAR* ppv); typedef HRESULT (STDAPICALLTYPE RPC_STRING_FROM_IID)( REFIID rclsid, LPOLESTR FAR* lplpsz); typedef HRESULT (STDAPICALLTYPE RPC_GET_PS_CLSID)( REFIID iid, LPCLSID lpclsid); #if defined(_MPPC_) // Remove this part after OLE32 exports CoTaskMemAlloc and Free. // same with the extern below and the pointer in auxilary.c typedef HRESULT (STDAPICALLTYPE RPC_GET_MALLOC)( DWORD dwMemContext, IMalloc ** ppMalloc ); #endif extern RPC_GET_CLASS_OBJECT_ROUTINE * pfnCoGetClassObject; extern RPC_GET_MARSHAL_SIZE_MAX_ROUTINE * pfnCoGetMarshalSizeMax; extern RPC_MARSHAL_INTERFACE_ROUTINE * pfnCoMarshalInterface; extern RPC_UNMARSHAL_INTERFACE_ROUTINE * pfnCoUnmarshalInterface; extern RPC_STRING_FROM_IID * pfnStringFromIID; extern RPC_GET_PS_CLSID * pfnCoGetPSClsid; extern RPC_CLIENT_ALLOC * pfnCoTaskMemAlloc; extern RPC_CLIENT_FREE * pfnCoTaskMemFree; #if defined(_MPPC_) extern RPC_GET_MALLOC * pfnCoGetMalloc; #endif HRESULT (STDAPICALLTYPE NdrStringFromIID)( REFIID rclsid, char * lplpsz); //-------------------- // HookOle Interface //-------------------- EXTERN_C const IID IID_IPSFactoryHook; #if defined(__cplusplus) && !defined(CINTERFACE) interface IPSFactoryHook : public IPSFactoryBuffer { public: STDMETHOD (HkGetProxyFileInfo) ( REFIID riid, PINT pOffset, PVOID *ppProxyFileInfo )=0; }; typedef IPSFactoryHook *PI_PSFACTORYHOOK; #else /* C Style Interface */ typedef struct IPSFactoryHookVtbl { BEGIN_INTERFACE HRESULT ( __stdcall __RPC_FAR *QueryInterface )( IPSFactoryBuffer __RPC_FAR * This, /* [in] */ REFIID riid, /* [out] */ void __RPC_FAR *__RPC_FAR *ppvObject); ULONG ( __stdcall __RPC_FAR *AddRef )( IPSFactoryBuffer __RPC_FAR * This); ULONG ( __stdcall __RPC_FAR *Release )( IPSFactoryBuffer __RPC_FAR * This); HRESULT ( __stdcall __RPC_FAR *CreateProxy )( IPSFactoryBuffer __RPC_FAR * This, /* [in] */ IUnknown __RPC_FAR *pUnkOuter, /* [in] */ REFIID riid, /* [out] */ IRpcProxyBuffer __RPC_FAR *__RPC_FAR *ppProxy, /* [out] */ void __RPC_FAR *__RPC_FAR *ppv); HRESULT ( __stdcall __RPC_FAR *CreateStub )( IPSFactoryBuffer __RPC_FAR * This, /* [in] */ REFIID riid, /* [unique][in] */ IUnknown __RPC_FAR *pUnkServer, /* [out] */ IRpcStubBuffer __RPC_FAR *__RPC_FAR *ppStub); HRESULT ( __stdcall __RPC_FAR *HkGetProxyFileInfo )( IPSFactoryBuffer __RPC_FAR * This, /* [in] */ REFIID riid, /* [out]*/ PINT pOffset, /* [out]*/ PVOID *ppProxyFileInfo); END_INTERFACE } IPSFactoryHookVtbl; interface IPSFactoryHook { CONST_VTBL struct IPSFactoryHookVtbl __RPC_FAR *lpVtbl; }; typedef interface IPSFactoryHook *PI_PSFACTORYHOOK; #ifdef COBJMACROS #define IPSFactoryHook_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IPSFactoryHook_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IPSFactoryHook_Release(This) \ (This)->lpVtbl -> Release(This) #define IPSFactoryHook_CreateProxy(This,pUnkOuter,riid,ppProxy,ppv) \ (This)->lpVtbl -> CreateProxy(This,pUnkOuter,riid,ppProxy,ppv) #define IPSFactoryHook_CreateStub(This,riid,pUnkServer,ppStub) \ (This)->lpVtbl -> CreateStub(This,riid,pUnkServer,ppStub) #define IPSFactoryHook_HkGetProxyFileInfo(This,riid,pOffset,ppProxyFileInfo) \ (This)->lpVtbl -> HkGetProxyFileInfo(This,riid,pOffset,ppProxyFileInfo) #endif /* COBJMACROS */ #endif /* C style interface */ //------------------------- // End - HookOle Interface //------------------------- #endif // WIN32 || _MPPC_ #ifdef __cplusplus } #endif #endif /* _NDROLE_ */