|
|
/*
CallObjects: A Suite of Interfaces for Manipulating CallFrames as Objects
Copyright (c) Microsoft Corporation. All rights reserved.
*/
import "oaidl.idl";
interface ICallInterceptor; interface ICallUnmarshal; interface ICallFrame; interface ICallFrameEvents; interface ICallFrameWalker; interface IInterfaceRelated;
[uuid(D573B4B0-894E-11d2-B8B6-00C04FB9618A), object, pointer_default(unique), local] interface ICallFrame : IUnknown { typedef struct { ULONG iMethod; BOOL fHasInValues; BOOL fHasInOutValues; BOOL fHasOutValues; BOOL fDerivesFromIDispatch; LONG cInInterfacesMax; LONG cInOutInterfacesMax; LONG cOutInterfacesMax; LONG cTopLevelInInterfaces; IID iid; ULONG cMethod; ULONG cParams; } CALLFRAMEINFO;
typedef struct { BOOLEAN fIn; BOOLEAN fOut; ULONG stackOffset; ULONG cbParam; } CALLFRAMEPARAMINFO;
HRESULT GetInfo ( [out] CALLFRAMEINFO* pInfo ); HRESULT GetIIDAndMethod ( [out] IID* pIID, [out] ULONG* piMethod );
HRESULT GetNames ( [out] LPWSTR* pwszInterface, [out] LPWSTR* pwszMethod );
PVOID GetStackLocation ();
void SetStackLocation ( [in] PVOID pvStack );
void SetReturnValue ( [in] HRESULT hr );
HRESULT GetReturnValue ();
HRESULT GetParamInfo ( [in] ULONG iparam, [out] CALLFRAMEPARAMINFO* pInfo );
HRESULT SetParam ( [in] ULONG iparam, [in] VARIANT* pvar );
HRESULT GetParam ( [in] ULONG iparam, [out] VARIANT* pvar );
typedef enum { CALLFRAME_COPY_NESTED = 1, CALLFRAME_COPY_INDEPENDENT = 2 } CALLFRAME_COPY;
HRESULT Copy ( [in] CALLFRAME_COPY copyControl, [in] ICallFrameWalker* pWalker, [out] ICallFrame** ppFrame );
HRESULT Free ( [in] ICallFrame* pframeArgsDest, [in] ICallFrameWalker* pWalkerDestFree, [in] ICallFrameWalker* pWalkerCopy, [in] DWORD freeFlags, [in] ICallFrameWalker* pWalkerFree, [in] DWORD nullFlags );
enum CALLFRAME_FREE { CALLFRAME_FREE_NONE = 0, CALLFRAME_FREE_IN = 1, CALLFRAME_FREE_INOUT = 2, CALLFRAME_FREE_OUT = 4, CALLFRAME_FREE_TOP_INOUT = 8, CALLFRAME_FREE_TOP_OUT = 16, CALLFRAME_FREE_ALL = 31, };
enum CALLFRAME_NULL { CALLFRAME_NULL_NONE = 0, CALLFRAME_NULL_INOUT = 2, CALLFRAME_NULL_OUT = 4, CALLFRAME_NULL_ALL = 6, };
HRESULT FreeParam ( [in] ULONG iparam, [in] DWORD freeFlags, [in] ICallFrameWalker* pWalkerFree, [in] DWORD nullFlags );
HRESULT WalkFrame ( [in] DWORD walkWhat, [in] ICallFrameWalker* pWalker );
enum CALLFRAME_WALK { CALLFRAME_WALK_IN = 1, CALLFRAME_WALK_INOUT = 2, CALLFRAME_WALK_OUT = 4, }; typedef struct { BOOLEAN fIn; DWORD dwDestContext; LPVOID pvDestContext; IUnknown* punkReserved; GUID guidTransferSyntax; } CALLFRAME_MARSHALCONTEXT; HRESULT GetMarshalSizeMax ( [in] CALLFRAME_MARSHALCONTEXT* pmshlContext, [in] MSHLFLAGS mshlflags, [out] ULONG* pcbBufferNeeded );
HRESULT Marshal ( [in] CALLFRAME_MARSHALCONTEXT* pmshlContext, [in] MSHLFLAGS mshlflags, [in,size_is(cbBuffer)] PVOID pBuffer, [in] ULONG cbBuffer, [out] ULONG* pcbBufferUsed, [out] RPCOLEDATAREP* pdataRep, [out] ULONG* prpcFlags );
HRESULT Unmarshal ( [in,size_is(cbBuffer)] PVOID pBuffer, [in] ULONG cbBuffer, [in] RPCOLEDATAREP dataRep, [in] CALLFRAME_MARSHALCONTEXT* pcontext, [out] ULONG* pcbUnmarshalled );
HRESULT ReleaseMarshalData ( [in,size_is(cbBuffer)] PVOID pBuffer, [in] ULONG cbBuffer, [in] ULONG ibFirstRelease, [in] RPCOLEDATAREP dataRep, [in] CALLFRAME_MARSHALCONTEXT* pcontext );
HRESULT Invoke ( [in] void* pvReceiver, ... ); };
[uuid(D573B4B1-894E-11d2-B8B6-00C04FB9618A), object, pointer_default(unique), local] interface ICallIndirect : IUnknown { HRESULT CallIndirect ( [out] HRESULT* phrReturn, [in] ULONG iMethod, [in] void* pvArgs, [out] ULONG* cbArgs );
HRESULT GetMethodInfo ( [in] ULONG iMethod, [out] CALLFRAMEINFO* pInfo, [out] LPWSTR* pwszMethod );
HRESULT GetStackSize ( [in] ULONG iMethod, [out] ULONG* cbArgs );
HRESULT GetIID ( [out] IID* piid, [out] BOOL* pfDerivesFromIDispatch, [out] ULONG* pcMethod, [out] LPWSTR* pwszInterface );
};
[uuid(60C7CA75-896D-11d2-B8B6-00C04FB9618A), object, pointer_default(unique), local] interface ICallInterceptor : ICallIndirect { HRESULT RegisterSink ( [in] ICallFrameEvents* psink );
HRESULT GetRegisteredSink ( [out] ICallFrameEvents** ppsink ); };
[uuid(FD5E0843-FC91-11d0-97D7-00C04FB9618A), object, pointer_default(unique), local] interface ICallFrameEvents : IUnknown { HRESULT OnCall ( [in] ICallFrame* pFrame /* A call frame bound to the just-received invocation */ ); };
[uuid(5333B003-2E42-11d2-B89D-00C04FB9618A), object, pointer_default(unique), local] interface ICallUnmarshal : IUnknown { HRESULT Unmarshal ( [in] ULONG iMethod, [in,size_is(cbBuffer)] PVOID pBuffer, [in] ULONG cbBuffer, [in] BOOL fForceBufferCopy, [in] RPCOLEDATAREP dataRep, [in] CALLFRAME_MARSHALCONTEXT *pcontext, [out] ULONG* pcbUnmarshalled, [out] ICallFrame** ppFrame );
HRESULT ReleaseMarshalData ( [in] ULONG iMethod, [in,size_is(cbBuffer)] PVOID pBuffer, [in] ULONG cbBuffer, [in] ULONG ibFirstRelease, [in] RPCOLEDATAREP dataRep, [in] CALLFRAME_MARSHALCONTEXT* pcontext ); };
[uuid(08B23919-392D-11d2-B8A4-00C04FB9618A), object, pointer_default(unique), local] interface ICallFrameWalker : IUnknown {
HRESULT OnWalkInterface ( [in] REFIID iid, [in] PVOID* ppvInterface, [in] BOOL fIn, [in] BOOL fOut );
};
[uuid(D1FB5A79-7706-11d1-ADBA-00C04FC2ADC0), object, pointer_default(unique), local] interface IInterfaceRelated : IUnknown { HRESULT SetIID ( [in] REFIID iid );
HRESULT GetIID ( [out] IID* piid ); };
cpp_quote("#define CALLFRAME_E_ALREADYINVOKED _HRESULT_TYPEDEF_( 0x8004d090 )") cpp_quote("#define CALLFRAME_E_COULDNTMAKECALL _HRESULT_TYPEDEF_( 0x8004d091 )")
[uuid(15B51D8B-9BF6-11d1-B888-00C04FB9618A), local] interface ICallFrameAPIs {
HRESULT __stdcall CoGetInterceptor ( [in] REFIID iidIntercepted, [in] IUnknown* punkOuter, [in] REFIID iid, [out] void** ppv );
HRESULT __stdcall CoGetInterceptorFromTypeInfo ( [in] REFIID iidIntercepted, [in] IUnknown* punkOuter, [in] ITypeInfo* typeInfo, [in] REFIID iid, [out] void** ppv ); };
|