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.
 
 
 
 
 
 

703 lines
21 KiB

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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_ */