704 lines
21 KiB
C++
704 lines
21 KiB
C++
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
Copyright (c) 1994-2000 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.
|
|
|
|
Revision History:
|
|
|
|
---------------------------------------------------------------------*/
|
|
|
|
#ifndef _NDROLE_
|
|
#define _NDROLE_
|
|
|
|
|
|
#include <objbase.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// ProxyFile->TableVersion may be
|
|
// 1 for really old junk
|
|
// 2 since the time we defined new proxy and stub Buffer2 for delegation
|
|
// 6 for async uuid as we treat the previous values as flags.
|
|
|
|
#define NDR_PROXY_FILE_ASYNC_UUID 0x4
|
|
|
|
EXTERN_C IStream *__stdcall
|
|
NdrpCreateStreamOnMemory( unsigned char *pData, unsigned long cbSize );
|
|
|
|
// Note, both proxies and stubs have been remapped to the same size,
|
|
// as a preparation for some code simplifications.
|
|
// This means that some fields may not be used in some circumstances.
|
|
|
|
// Non-delegated proxy
|
|
|
|
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; // endof old ProxyBuffer
|
|
struct IRpcProxyBuffer * Pad_pBaseProxyBuffer;
|
|
struct IPSFactoryBuffer * Pad_pPSFactory;
|
|
IID Pad_iidBase;
|
|
const struct ICallFactoryVtbl * pCallFactoryVtbl;
|
|
const IID * pAsyncIID;
|
|
const struct IReleaseMarshalBuffersVtbl * pRMBVtbl;
|
|
} CStdProxyBuffer;
|
|
|
|
// Delegated proxy
|
|
|
|
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; // colides with pPSFactory
|
|
struct IRpcProxyBuffer * pBaseProxyBuffer;
|
|
struct IPSFactoryBuffer * pPSFactory;
|
|
IID iidBase; // endof old ProxyBuffer2
|
|
const struct ICallFactoryVtbl * pCallFactoryVtbl;
|
|
const IID * pAsyncIID;
|
|
const struct IReleaseMarshalBuffersVtbl * pRMBVtbl;
|
|
} CStdProxyBuffer2;
|
|
|
|
// Async proxy buffer, one for delegated and non-delegated case.
|
|
|
|
typedef struct _NdrDcomAsyncFlags
|
|
{
|
|
unsigned long AsyncMsgSet : 1;
|
|
unsigned long BeginStarted : 1;
|
|
unsigned long BeginDone : 1;
|
|
unsigned long FinishStarted : 1;
|
|
unsigned long FinishDone : 1;
|
|
unsigned long BeginError : 1;
|
|
unsigned long FinishError : 1;
|
|
unsigned long InvokeForwarded : 1;
|
|
unsigned long Unused :24;
|
|
} NdrDcomAsyncFlags;
|
|
|
|
typedef struct _CStdProxyBufferMap
|
|
{
|
|
struct IUnknown * pBaseProxy;
|
|
} CStdProxyBufferMap;
|
|
|
|
typedef struct _NdrDcomAsyncCallState
|
|
{
|
|
unsigned long Signature;
|
|
unsigned long Lock;
|
|
void * pAsyncMsg;
|
|
NdrDcomAsyncFlags Flags;
|
|
HRESULT Hr;
|
|
} NdrDcomAsyncCallState;
|
|
|
|
typedef struct tagCStdAsyncProxyBuffer
|
|
{
|
|
const struct IRpcProxyBufferVtbl * lpVtbl;
|
|
const void * pProxyVtbl; //Points to Vtbl in CInterfaceProxyVtbl
|
|
long RefCount;
|
|
struct IUnknown * punkOuter;
|
|
struct IRpcChannelBuffer * pChannel;
|
|
CStdProxyBufferMap map; // the only colision 1<>2
|
|
struct IRpcProxyBuffer * pBaseProxyBuffer;
|
|
struct IPSFactoryBuffer * pPSFactory;
|
|
IID iidBase;
|
|
const struct ICallFactoryVtbl * pCallFactoryVtbl;
|
|
const IID * pSyncIID; // points to sync iid in async
|
|
// endof new ProxyBuffer,2
|
|
|
|
const struct IReleaseMarshalBuffersVtbl * pRMBVtbl;
|
|
NdrDcomAsyncCallState CallState;
|
|
|
|
} CStdAsyncProxyBuffer;
|
|
|
|
|
|
// This definition is in rpcproxy.h because CStdStubBuffer::pvServerObject is called explicitly
|
|
// from /Os stub.
|
|
// It is reproduced here for convenience.
|
|
// It should be removed from there or may be left but a renamed clone used internally.
|
|
|
|
#if 0
|
|
typedef struct tagCStdStubBuffer
|
|
{
|
|
const struct IRpcStubBufferVtbl * lpVtbl; //Points to Vtbl field in CInterfaceStubVtbl.
|
|
long RefCount;
|
|
struct IUnknown * pvServerObject;
|
|
|
|
const struct ICallFactoryVtbl * pCallFactoryVtbl;
|
|
const IID * pAsyncIID;
|
|
struct IPSFactoryBuffer * pPSFactory;
|
|
const struct IReleaseMarshalBuffersVtbl * pRMBVtbl;
|
|
} CStdStubBuffer;
|
|
#endif
|
|
|
|
// The plan to rewrite and colapse these structure does involve removing of the
|
|
// pvServerObject field completely.
|
|
// The channel would supply a pvServerObject pointer on the only call where
|
|
// this is really needed, that is on the Invoke call.
|
|
// In this model there would be no need whatsover for Connect and Disconnect operations
|
|
// on the stub object, both sync stubs and async stub call objects.
|
|
|
|
|
|
typedef struct tagCStdStubBuffer2
|
|
{
|
|
const void * lpForwardingVtbl;
|
|
struct IRpcStubBuffer * pBaseStubBuffer;
|
|
const struct IRpcStubBufferVtbl * lpVtbl; //Points to Vtbl field in CInterfaceStubVtbl.
|
|
long RefCount;
|
|
struct IUnknown * pvServerObject;
|
|
|
|
const struct ICallFactoryVtbl * pCallFactoryVtbl;
|
|
const IID * pAsyncIID;
|
|
struct IPSFactoryBuffer * pPSFactory;
|
|
const struct IReleaseMarshalBuffersVtbl * pRMBVtbl;
|
|
} CStdStubBuffer2;
|
|
|
|
typedef struct tagCStdAsyncStubBuffer
|
|
{
|
|
void * lpForwardingVtbl;
|
|
struct IRpcStubBuffer * pBaseStubBuffer;
|
|
const struct IRpcStubBufferVtbl * lpVtbl; //Points to Vtbl field in CInterfaceStubVtbl.
|
|
long RefCount;
|
|
struct IUnknown * pvServerObject;
|
|
|
|
const struct ICallFactoryVtbl * pCallFactoryVtbl;
|
|
const IID * pAsyncIID;
|
|
struct IPSFactoryBuffer * pPSFactory;
|
|
const struct IReleaseMarshalBuffersVtbl * pRMBVtbl;
|
|
|
|
const struct ISynchronizeVtbl * pSynchronizeVtbl;
|
|
|
|
NdrDcomAsyncCallState CallState;
|
|
|
|
} CStdAsyncStubBuffer;
|
|
|
|
|
|
|
|
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
|
|
CStdProxyBuffer_RMB_QueryInterface(IReleaseMarshalBuffers *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdProxyBuffer_RMB_AddRef(IReleaseMarshalBuffers *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdProxyBuffer_RMB_Release(IReleaseMarshalBuffers *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdProxyBuffer_RMB_ReleaseMarshalBuffer(IN IReleaseMarshalBuffers *This,RPCOLEMESSAGE * pMsg,DWORD dwFlags,IUnknown *pChnl);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncProxyBuffer_RMB_ReleaseMarshalBuffer(IN IReleaseMarshalBuffers *This,RPCOLEMESSAGE * pMsg,DWORD dwFlags,IUnknown *pChnl);
|
|
|
|
|
|
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 * 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);
|
|
|
|
// Async
|
|
|
|
extern const IRpcProxyBufferVtbl CStdAsyncProxyBufferVtbl;
|
|
extern const IRpcProxyBufferVtbl CStdAsyncProxyBuffer2Vtbl;
|
|
|
|
extern const IRpcStubBufferVtbl CStdAsyncStubBufferVtbl;
|
|
extern const IRpcStubBufferVtbl CStdAsyncStubBuffer2Vtbl;
|
|
|
|
extern const ISynchronizeVtbl CStdStubBuffer_ISynchronizeVtbl;
|
|
extern const ISynchronizeVtbl CStdStubBuffer2_ISynchronizeVtbl;
|
|
|
|
extern void * const ForwardingVtbl[];
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdProxyBuffer_CF_QueryInterface(ICallFactory *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdProxyBuffer_CF_AddRef(ICallFactory *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdProxyBuffer_CF_Release(ICallFactory *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdProxyBuffer_CF_CreateCall(ICallFactory *pthis, REFIID riid, IUnknown* punkOuter, REFIID riid2, IUnknown **ppvObject);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdProxyBuffer2_CF_QueryInterface(ICallFactory *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdProxyBuffer2_CF_AddRef(ICallFactory *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdProxyBuffer2_CF_Release(ICallFactory *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdProxyBuffer2_CF_CreateCall(ICallFactory *pthis, REFIID riid, IUnknown* punkOuter, REFIID riid2, IUnknown **ppvObject);
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdStubBuffer_CF_QueryInterface(ICallFactory *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdStubBuffer_CF_AddRef(ICallFactory *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdStubBuffer_CF_Release(ICallFactory *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdStubBuffer_CF_CreateCall(ICallFactory *pthis, REFIID riid, IUnknown* punkOuter, REFIID riid2, IUnknown **ppvObject);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdStubBuffer2_CF_QueryInterface(ICallFactory *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdStubBuffer2_CF_AddRef(ICallFactory *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdStubBuffer2_CF_Release(ICallFactory *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdStubBuffer2_CF_CreateCall(ICallFactory *pthis, REFIID riid, IUnknown* punkOuter, REFIID riid2, IUnknown **ppvObject);
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdStubBuffer_RMB_QueryInterface(IReleaseMarshalBuffers *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdStubBuffer_RMB_AddRef(IReleaseMarshalBuffers *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdStubBuffer_RMB_Release(IReleaseMarshalBuffers *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdStubBuffer_RMB_ReleaseMarshalBuffer(IN IReleaseMarshalBuffers *This,RPCOLEMESSAGE * pMsg,DWORD dwFlags,IUnknown *pChnl);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_RMB_QueryInterface(IReleaseMarshalBuffers *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_RMB_AddRef(IReleaseMarshalBuffers *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_RMB_Release(IReleaseMarshalBuffers *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_RMB_ReleaseMarshalBuffer(IN IReleaseMarshalBuffers *This,RPCOLEMESSAGE * pMsg,DWORD dwFlags,IUnknown *pChnl);
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncProxyBuffer_QueryInterface(IRpcProxyBuffer *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncProxyBuffer_Release(IRpcProxyBuffer *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncProxyBuffer_Connect(IRpcProxyBuffer *pThis, IRpcChannelBuffer *pChannel);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncProxyBuffer2_Release(IRpcProxyBuffer *pThis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncProxyBuffer2_Connect(IRpcProxyBuffer *pThis, IRpcChannelBuffer *pChannel);
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_QueryInterface(IRpcStubBuffer *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_AddRef(IRpcStubBuffer *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Release(IRpcStubBuffer *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer2_Release(IRpcStubBuffer *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Connect(IRpcStubBuffer *pthis, IUnknown *pUnkServer);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer2_Connect(IRpcStubBuffer *pthis, IUnknown *pUnkServer);
|
|
|
|
void STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Disconnect(IRpcStubBuffer *pthis );
|
|
|
|
void STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer2_Disconnect(IRpcStubBuffer *pthis );
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Invoke(IRpcStubBuffer *pthis,RPCOLEMESSAGE *_prpcmsg,IRpcChannelBuffer *_pRpcChannelBuffer);
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Synchronize_QueryInterface( ISynchronize *pthis, REFIID riid, void **ppvObject);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Synchronize_AddRef(ISynchronize *pthis);
|
|
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Synchronize_Release(ISynchronize *pthis);
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Synchronize_Wait( ISynchronize *pthis, DWORD dwFlags, DWORD mili );
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Synchronize_Signal( ISynchronize *pthis );
|
|
|
|
HRESULT STDMETHODCALLTYPE
|
|
CStdAsyncStubBuffer_Synchronize_Reset( ISynchronize *pthis );
|
|
|
|
|
|
HRESULT
|
|
NdrpAsyncProxySignal(
|
|
CStdAsyncProxyBuffer * pAsyncPB );
|
|
|
|
HRESULT
|
|
NdrpAsyncProxyMsgConstructor(
|
|
CStdAsyncProxyBuffer * pAsyncPB );
|
|
|
|
HRESULT
|
|
NdrpAsyncProxyMsgDestructor(
|
|
CStdAsyncProxyBuffer * pAsyncPB );
|
|
|
|
|
|
HRESULT
|
|
NdrpAsyncStubMsgConstructor(
|
|
CStdAsyncStubBuffer * pAsyncSB );
|
|
|
|
HRESULT
|
|
NdrpAsyncStubMsgDestructor(
|
|
CStdAsyncStubBuffer * pAsyncSB );
|
|
|
|
HRESULT
|
|
NdrLoadOleRoutines();
|
|
|
|
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);
|
|
|
|
typedef
|
|
HRESULT (STDAPICALLTYPE RPC_CO_CREATE_INSTANCE)(
|
|
REFCLSID rclsid,
|
|
LPUNKNOWN pUnkOuter,
|
|
DWORD dwClsContext,
|
|
REFIID riid,
|
|
LPVOID * ppv);
|
|
|
|
typedef
|
|
HRESULT (STDAPICALLTYPE RPC_CO_RELEASEMARSHALDATA)(
|
|
IStream * pStm);
|
|
|
|
typedef
|
|
HRESULT (STDAPICALLTYPE RPC_DCOMCHANNELSETHRESULT)(
|
|
PRPC_MESSAGE pmsg,
|
|
ULONG * ulReserved,
|
|
HRESULT appsHR );
|
|
|
|
|
|
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_CO_CREATE_INSTANCE * pfnCoCreateInstance;
|
|
extern RPC_CO_RELEASEMARSHALDATA * pfnCoReleaseMarshalData;
|
|
extern RPC_CLIENT_ALLOC * pfnCoTaskMemAlloc;
|
|
extern RPC_CLIENT_FREE * pfnCoTaskMemFree;
|
|
extern RPC_DCOMCHANNELSETHRESULT * pfnDcomChannelSetHResult;
|
|
|
|
|
|
HRESULT (STDAPICALLTYPE NdrStringFromIID)(
|
|
REFIID rclsid,
|
|
char * lplpsz);
|
|
|
|
//------------------------------------------------------------------------
|
|
// New async support
|
|
// -----------------------------------------------------------------------
|
|
|
|
void
|
|
NdrpAsyncProxyMgrConstructor(
|
|
CStdAsyncProxyBuffer * pAsyncPB );
|
|
|
|
void
|
|
NdrpAsyncStubMgrConstructor(
|
|
CStdAsyncStubBuffer * pAsyncSB );
|
|
|
|
HRESULT
|
|
NdrpAsyncStubSignal(
|
|
CStdAsyncStubBuffer * pAsyncSB );
|
|
|
|
|
|
const IID * RPC_ENTRY
|
|
NdrGetProxyIID(
|
|
IN const void *pThis);
|
|
|
|
|
|
HRESULT NdrpClientReleaseMarshalBuffer(
|
|
IReleaseMarshalBuffers * pRMB,
|
|
RPC_MESSAGE *pRpcMsg,
|
|
DWORD dwIOFlags,
|
|
BOOLEAN fAsync);
|
|
|
|
HRESULT NdrpServerReleaseMarshalBuffer(
|
|
IReleaseMarshalBuffers *pRMB,
|
|
RPC_MESSAGE *pRpcMsg,
|
|
DWORD dwIOFlags,
|
|
BOOLEAN fAsync);
|
|
|
|
HRESULT Ndr64pReleaseMarshalBuffer(
|
|
PRPC_MESSAGE pRpcMsg,
|
|
PMIDL_SYNTAX_INFO pSyntaxInfo,
|
|
unsigned long ProcNum,
|
|
PMIDL_STUB_DESC pStubDesc,
|
|
DWORD dwIOFlags,
|
|
BOOLEAN IsClient );
|
|
|
|
HRESULT
|
|
NdrpInitializeMutex( I_RPC_MUTEX * pMutex );
|
|
|
|
EXTERN_C const IID IID_IPrivStubBuffer;
|
|
//--------------------
|
|
// HookOle Interface
|
|
//--------------------
|
|
EXTERN_C extern 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 *QueryInterface )(
|
|
IPSFactoryBuffer * This,
|
|
/* [in] */ REFIID riid,
|
|
/* [out] */ void ** ppvObject);
|
|
|
|
ULONG ( __stdcall *AddRef )(
|
|
IPSFactoryBuffer * This);
|
|
|
|
ULONG ( __stdcall *Release )(
|
|
IPSFactoryBuffer * This);
|
|
|
|
HRESULT ( __stdcall *CreateProxy )(
|
|
IPSFactoryBuffer * This,
|
|
/* [in] */ IUnknown * pUnkOuter,
|
|
/* [in] */ REFIID riid,
|
|
/* [out] */ IRpcProxyBuffer ** ppProxy,
|
|
/* [out] */ void ** ppv);
|
|
|
|
HRESULT ( __stdcall *CreateStub )(
|
|
IPSFactoryBuffer * This,
|
|
/* [in] */ REFIID riid,
|
|
/* [unique][in] */ IUnknown * pUnkServer,
|
|
/* [out] */ IRpcStubBuffer ** ppStub);
|
|
|
|
|
|
HRESULT ( __stdcall *HkGetProxyFileInfo )(
|
|
IPSFactoryBuffer * This,
|
|
/* [in] */ REFIID riid,
|
|
/* [out]*/ PINT pOffset,
|
|
/* [out]*/ PVOID * ppProxyFileInfo);
|
|
|
|
END_INTERFACE
|
|
} IPSFactoryHookVtbl;
|
|
|
|
|
|
interface IPSFactoryHook
|
|
{
|
|
CONST_VTBL struct IPSFactoryHookVtbl *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
|
|
//-------------------------
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _NDROLE_ */
|