513 lines
15 KiB
Plaintext
513 lines
15 KiB
Plaintext
|
//+-------------------------------------------------------------------
|
||
|
//
|
||
|
// File: Context.idl
|
||
|
//
|
||
|
// Contents: Context interfaces
|
||
|
//
|
||
|
// History: 04-Dec-97 Gopalk Created
|
||
|
//
|
||
|
//--------------------------------------------------------------------
|
||
|
|
||
|
cpp_quote("//+-----------------------------------------------------------------")
|
||
|
cpp_quote("//")
|
||
|
cpp_quote("// Microsoft Windows")
|
||
|
cpp_quote("// Copyright (C) Microsoft Corporation, 1992 - 1997.")
|
||
|
cpp_quote("//")
|
||
|
cpp_quote("//------------------------------------------------------------------")
|
||
|
|
||
|
#ifndef DO_NO_IMPORTS
|
||
|
import "wtypes.idl";
|
||
|
import "objidl.idl";
|
||
|
import "unknwn.idl";
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/****************************************************************************
|
||
|
* Context Types *
|
||
|
****************************************************************************/
|
||
|
|
||
|
// Event types
|
||
|
enum tagCONTEXTEVENT
|
||
|
{
|
||
|
CONTEXTEVENT_NONE = 0x00000000,
|
||
|
|
||
|
// Call Events
|
||
|
CONTEXTEVENT_CALL = 0x00000001,
|
||
|
CONTEXTEVENT_ENTER = 0x00000002,
|
||
|
CONTEXTEVENT_LEAVE = 0x00000004,
|
||
|
CONTEXTEVENT_RETURN = 0x00000008,
|
||
|
|
||
|
// Buffer Events
|
||
|
CONTEXTEVENT_CALLFILLBUFFER = 0x00000010,
|
||
|
CONTEXTEVENT_ENTERWITHBUFFER = 0x00000020,
|
||
|
CONTEXTEVENT_LEAVEFILLBUFFER = 0x00000040,
|
||
|
CONTEXTEVENT_RETURNWITHBUFFER = 0x00000080,
|
||
|
|
||
|
// Begin Events
|
||
|
CONTEXTEVENT_BEGINCALL = 0x00000100,
|
||
|
CONTEXTEVENT_BEGINENTER = 0x00000200,
|
||
|
CONTEXTEVENT_BEGINLEAVE = 0x00000400,
|
||
|
CONTEXTEVENT_BEGINRETURN = 0x00000800,
|
||
|
|
||
|
// Finish Events
|
||
|
CONTEXTEVENT_FINISHCALL = 0x00001000,
|
||
|
CONTEXTEVENT_FINISHENTER = 0x00002000,
|
||
|
CONTEXTEVENT_FINISHLEAVE = 0x00004000,
|
||
|
CONTEXTEVENT_FINISHRETURN = 0x00008000,
|
||
|
|
||
|
// Buffer Events
|
||
|
CONTEXTEVENT_BEGINCALLFILLBUFFER = 0x00010000,
|
||
|
CONTEXTEVENT_BEGINENTERWITHBUFFER = 0x00020000,
|
||
|
CONTEXTEVENT_FINISHLEAVEFILLBUFFER = 0x00040000,
|
||
|
CONTEXTEVENT_FINISHRETURNWITHBUFFER = 0x00080000,
|
||
|
|
||
|
// Exception Events
|
||
|
CONTEXTEVENT_LEAVEEXCEPTION = 0x00100000,
|
||
|
CONTEXTEVENT_LEAVEEXCEPTIONFILLBUFFER = 0x00200000,
|
||
|
CONTEXTEVENT_RETURNEXCEPTION = 0x00400000,
|
||
|
CONTEXTEVENT_RETURNEXCEPTIONWITHBUFFER = 0x00800000,
|
||
|
|
||
|
// Other Events
|
||
|
CONTEXTEVENT_ADDREFPOLICY = 0x10000000,
|
||
|
CONTEXTEVENT_RELEASEPOLICY = 0x20000000
|
||
|
};
|
||
|
typedef DWORD ContextEvent;
|
||
|
|
||
|
enum tagCPFLAGS
|
||
|
{
|
||
|
CPFLAG_NONE = 0x0,
|
||
|
|
||
|
// Flags to determine whether the property gets copied when the context does
|
||
|
CPFLAG_PROPAGATE = 0x1,
|
||
|
CPFLAG_EXPOSE = 0x2,
|
||
|
CPFLAG_ENVOY = 0x4,
|
||
|
|
||
|
// Flags to determine whether the property receives stub/proxy
|
||
|
// create/destroy events.
|
||
|
CPFLAG_MONITORSTUB = 0x8,
|
||
|
CPFLAG_MONITORPROXY = 0x10,
|
||
|
|
||
|
// Flags to determine whether a property is used in context comparison
|
||
|
CPFLAG_DONTCOMPARE = 0x20
|
||
|
};
|
||
|
typedef DWORD CPFLAGS;
|
||
|
|
||
|
#define MSHLFLAGS_NO_IEC 0x8 // don't use IExternalConnextion
|
||
|
#define MSHLFLAGS_NO_IMARSHAL 0x10 // don't use IMarshal
|
||
|
|
||
|
|
||
|
/****************************************************************************
|
||
|
* Context Interfaces *
|
||
|
****************************************************************************/
|
||
|
|
||
|
// IEnunContextProperties interface
|
||
|
typedef struct tagContextProperty {
|
||
|
GUID policyId;
|
||
|
CPFLAGS flags;
|
||
|
[unique] IUnknown *pUnk;
|
||
|
} ContextProperty;
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(000001c1-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IEnumContextProps : IUnknown
|
||
|
{
|
||
|
typedef [unique] IEnumContextProps *LPENUMCONTEXTPROPS;
|
||
|
|
||
|
HRESULT Next([in] ULONG celt,
|
||
|
[out, size_is(celt), length_is(*pceltFetched)] ContextProperty *pContextProperties,
|
||
|
[out] ULONG *pceltFetched);
|
||
|
HRESULT Skip([in] ULONG celt);
|
||
|
HRESULT Reset();
|
||
|
HRESULT Clone([out] IEnumContextProps **ppEnumContextProps);
|
||
|
HRESULT Count([out] ULONG *pcelt);
|
||
|
}
|
||
|
|
||
|
|
||
|
// IContext interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001c0-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IContext : IUnknown
|
||
|
{
|
||
|
//typedef [unique] IContext *LPCONTEXT;
|
||
|
|
||
|
HRESULT SetProperty([in] REFGUID rpolicyId,
|
||
|
[in] CPFLAGS flags,
|
||
|
[in] IUnknown *pUnk);
|
||
|
HRESULT RemoveProperty([in] REFGUID rPolicyId);
|
||
|
HRESULT GetProperty([in] REFGUID rGuid,
|
||
|
[out] CPFLAGS *pFlags,
|
||
|
[out] IUnknown **ppUnk);
|
||
|
HRESULT EnumContextProps([out] IEnumContextProps **ppEnumContextProps);
|
||
|
}
|
||
|
|
||
|
|
||
|
// Interface for context-controlled marshalling
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001D8-0000-0000-C000-000000000046)
|
||
|
]
|
||
|
interface IContextMarshaler : IUnknown
|
||
|
{
|
||
|
typedef [unique] IContextMarshaler *LPCTXMARSHALER;
|
||
|
|
||
|
HRESULT GetMarshalSizeMax([in] REFIID riid,
|
||
|
[in, unique] void *pv,
|
||
|
[in] DWORD dwDestContext,
|
||
|
[in, unique] void *pvDestContext,
|
||
|
[in] DWORD mshlflags,
|
||
|
[out] DWORD *pSize);
|
||
|
|
||
|
HRESULT MarshalInterface([in, unique] IStream *pStm,
|
||
|
[in] REFIID riid,
|
||
|
[in, unique] void *pv,
|
||
|
[in] DWORD dwDestContext,
|
||
|
[in, unique] void *pvDestContext,
|
||
|
[in] DWORD mshlflags);
|
||
|
}
|
||
|
|
||
|
|
||
|
// IObjContext interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001c6-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IObjContext : IContext
|
||
|
{
|
||
|
typedef [ref] HRESULT __stdcall (*PFNCTXCALLBACK)(void* pParam);
|
||
|
|
||
|
HRESULT Freeze();
|
||
|
HRESULT DoCallback([in] PFNCTXCALLBACK pfnCallback,
|
||
|
[in] void* pParam,
|
||
|
[in] REFIID riid,
|
||
|
[in] unsigned int iMethod);
|
||
|
|
||
|
// These methods are here to minimize the code path for marshalling
|
||
|
// otherwise I would put them in a separate interface
|
||
|
|
||
|
// The Set methods can only be called before the context is frozen
|
||
|
|
||
|
// Methods to set and get a special marshaller that is invoked for
|
||
|
// GetMarshalSizeMax and MarshalInterface if MSHLFLAGS_USE_CTX_MSH is set
|
||
|
HRESULT SetContextMarshaler([in] IContextMarshaler *pICM);
|
||
|
HRESULT GetContextMarshaler([out] IContextMarshaler **pICM);
|
||
|
|
||
|
// Ugly back-door methods to let us examine or modify the context flags
|
||
|
// externally.
|
||
|
HRESULT SetContextFlags([in] DWORD dwFlags); // flags |= dwFlags
|
||
|
HRESULT ClearContextFlags([in] DWORD dwFlags); // flags &= ~dwFlags
|
||
|
HRESULT GetContextFlags([out] DWORD *pdwFlags);
|
||
|
}
|
||
|
|
||
|
|
||
|
// IGetContextId
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001dd-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IGetContextId : IUnknown
|
||
|
{
|
||
|
HRESULT GetContextId([out] GUID *pguidCtxtId);
|
||
|
};
|
||
|
|
||
|
|
||
|
// IAggregator
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001d8-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IAggregator : IUnknown
|
||
|
{
|
||
|
typedef [unique] IAggregator *IAGGREGATOR;
|
||
|
|
||
|
HRESULT Aggregate([in] IUnknown* pInnerUnk);
|
||
|
}
|
||
|
|
||
|
|
||
|
// ICall interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001d6-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface ICall : IUnknown
|
||
|
{
|
||
|
typedef [unique] ICall *LPCALL;
|
||
|
|
||
|
HRESULT GetCallInfo([out] const void **ppIdentity,
|
||
|
[out] IID *piid,
|
||
|
[out] DWORD *pdwMethod,
|
||
|
[out] HRESULT *phr);
|
||
|
HRESULT Nullify([in] HRESULT hr);
|
||
|
HRESULT GetServerHR([out] HRESULT *phr);
|
||
|
};
|
||
|
|
||
|
|
||
|
// IRpcCall interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001c5-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IRpcCall : IUnknown
|
||
|
{
|
||
|
typedef [unique] IRpcCall *LPRPCCALL;
|
||
|
|
||
|
HRESULT GetRpcOleMessage([out] RPCOLEMESSAGE **ppMessage);
|
||
|
};
|
||
|
|
||
|
typedef enum _CALLSOURCE
|
||
|
{
|
||
|
CALLSOURCE_CROSSAPT = 0,
|
||
|
CALLSOURCE_CROSSCTX = 1
|
||
|
} CALLSOURCE;
|
||
|
|
||
|
|
||
|
// ICallInfo interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001dc-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface ICallInfo : IUnknown
|
||
|
{
|
||
|
HRESULT GetCallSource([out] CALLSOURCE* pCallSource);
|
||
|
};
|
||
|
|
||
|
|
||
|
// IPolicy interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001c2-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IPolicy : IUnknown
|
||
|
{
|
||
|
HRESULT Call([in] ICall *pCall);
|
||
|
HRESULT Enter([in] ICall *pCall);
|
||
|
HRESULT Leave([in] ICall *pCall);
|
||
|
HRESULT Return([in] ICall *pCall);
|
||
|
|
||
|
HRESULT CallGetSize([in] ICall *pCall,
|
||
|
[out] ULONG *pcb);
|
||
|
HRESULT CallFillBuffer([in] ICall *pCall,
|
||
|
[in] void *pvBuf,
|
||
|
[out] ULONG *pcb);
|
||
|
HRESULT EnterWithBuffer([in] ICall *pCall,
|
||
|
[in] void *pvBuf,
|
||
|
[in] ULONG cb);
|
||
|
HRESULT LeaveGetSize([in] ICall *pCall,
|
||
|
[out] ULONG *pcb);
|
||
|
HRESULT LeaveFillBuffer([in] ICall *pCall,
|
||
|
[in] void *pvBuf,
|
||
|
[out] ULONG *pcb);
|
||
|
HRESULT ReturnWithBuffer([in] ICall *pCall,
|
||
|
[in] void *pvBuf,
|
||
|
[in] ULONG cb);
|
||
|
ULONG AddRefPolicy();
|
||
|
ULONG ReleasePolicy();
|
||
|
};
|
||
|
|
||
|
|
||
|
// IPolicyAsync interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001cd-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IPolicyAsync : IUnknown
|
||
|
{
|
||
|
HRESULT BeginCallGetSize([in] ICall *pCall,
|
||
|
[out] ULONG *pcb);
|
||
|
HRESULT BeginCall([in] ICall *pCall);
|
||
|
HRESULT BeginCallFillBuffer([in] ICall *pCall,
|
||
|
[in] void *pvBuf,
|
||
|
[out] ULONG *pcb);
|
||
|
HRESULT BeginEnter([in] ICall *pCall);
|
||
|
HRESULT BeginEnterWithBuffer([in] ICall *pCall,
|
||
|
[in] void *pvBuf,
|
||
|
[in] ULONG cb);
|
||
|
HRESULT BeginLeave([in] ICall *pCall);
|
||
|
HRESULT BeginReturn([in] ICall *pCall);
|
||
|
HRESULT FinishCall([in] ICall *pCall);
|
||
|
HRESULT FinishEnter([in] ICall *pCall);
|
||
|
HRESULT FinishLeaveGetSize([in] ICall *pCall,
|
||
|
[out] ULONG *pcb);
|
||
|
HRESULT FinishLeave([in] ICall *pCall);
|
||
|
HRESULT FinishLeaveFillBuffer([in] ICall *pCall,
|
||
|
[in] void *pvBuf,
|
||
|
[out] ULONG *pcb);
|
||
|
HRESULT FinishReturn([in] ICall *pCall);
|
||
|
HRESULT FinishReturnWithBuffer([in] ICall *pCall,
|
||
|
[in] void *pvBuf,
|
||
|
[in] ULONG cb);
|
||
|
};
|
||
|
|
||
|
|
||
|
// IPolicySet interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001c3-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IPolicySet : IUnknown
|
||
|
{
|
||
|
HRESULT AddPolicy([in] ContextEvent ctxEvent,
|
||
|
[in] REFGUID rguid,
|
||
|
[in] IPolicy *pPolicy);
|
||
|
}
|
||
|
|
||
|
|
||
|
// IComObjIdentity interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001d7-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IComObjIdentity : IUnknown
|
||
|
{
|
||
|
BOOL IsServer();
|
||
|
BOOL IsDeactivated();
|
||
|
HRESULT GetIdentity([out] IUnknown** ppUnk);
|
||
|
}
|
||
|
|
||
|
|
||
|
// IPolicyMaker interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001c4-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IPolicyMaker : IUnknown
|
||
|
{
|
||
|
HRESULT AddClientPoliciesToSet([in] IPolicySet *pPS,
|
||
|
[in] IContext *pClientContext,
|
||
|
[in] IContext *pServerContext);
|
||
|
HRESULT AddEnvoyPoliciesToSet([in] IPolicySet *pPS,
|
||
|
[in] IContext *pClientContext,
|
||
|
[in] IContext *pServerContext);
|
||
|
HRESULT AddServerPoliciesToSet([in] IPolicySet *pPS,
|
||
|
[in] IContext *pClientContext,
|
||
|
[in] IContext *pServerContext);
|
||
|
HRESULT Freeze([in] IObjContext *pObjContext);
|
||
|
HRESULT CreateStub([in] IComObjIdentity *pID);
|
||
|
HRESULT DestroyStub([in] IComObjIdentity *pID);
|
||
|
HRESULT CreateProxy([in] IComObjIdentity *pID);
|
||
|
HRESULT DestroyProxy([in] IComObjIdentity *pID);
|
||
|
}
|
||
|
|
||
|
|
||
|
// IExceptionNotification interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001db-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IExceptionNotification : IUnknown
|
||
|
{
|
||
|
void ServerException([in] void *pExcepPtrs);
|
||
|
}
|
||
|
|
||
|
// IAbandonmentNotification interface
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001de-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IAbandonmentNotification : IUnknown
|
||
|
{
|
||
|
void Abandoned (IObjContext* pObjContext);
|
||
|
}
|
||
|
|
||
|
// IMarshalEnvoy
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001c8-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMarshalEnvoy : IUnknown
|
||
|
{
|
||
|
HRESULT GetEnvoyUnmarshalClass([in] DWORD dwDestContext,
|
||
|
[out] CLSID* pClsid);
|
||
|
HRESULT GetEnvoySizeMax([in] DWORD dwDestContext,
|
||
|
[out] DWORD* pcb);
|
||
|
HRESULT MarshalEnvoy([in] IStream* pStream,
|
||
|
[in] DWORD dwDestContext);
|
||
|
HRESULT UnmarshalEnvoy([in] IStream* pStream,
|
||
|
[in] REFIID riid,
|
||
|
[out, iid_is(riid)] void** ppunk);
|
||
|
};
|
||
|
|
||
|
|
||
|
// IWrapperInfo
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(5052f924-7ab8-11d3-b93f-00c04f990176),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IWrapperInfo : IUnknown
|
||
|
{
|
||
|
void SetMapping(void *pv);
|
||
|
void *GetMapping();
|
||
|
IObjContext *GetServerObjectContext();
|
||
|
IUnknown *GetServerObject();
|
||
|
};
|
||
|
|
||
|
|
||
|
// ICOMDispatchInfo
|
||
|
[
|
||
|
local,
|
||
|
object,
|
||
|
uuid(000001d9-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IComDispatchInfo : IUnknown
|
||
|
{
|
||
|
HRESULT EnableComInits([out] void **ppvCookie);
|
||
|
HRESULT DisableComInits([in] void *pvCookie);
|
||
|
};
|
||
|
|
||
|
typedef DWORD HActivator;
|
||
|
|
||
|
cpp_quote("STDAPI CoCreateObjectInContext(IUnknown *pUnk, IObjContext *pObjectCtx, REFIID riid, void **ppv);")
|
||
|
cpp_quote("STDAPI CoGetApartmentID(APTTYPE dAptType, HActivator* pAptID);")
|
||
|
cpp_quote("STDAPI CoDeactivateObject(IUnknown *pUnk, IUnknown **ppCookie);")
|
||
|
cpp_quote("STDAPI CoReactivateObject(IUnknown *pUnk, IUnknown *pCookie);")
|
||
|
cpp_quote("#define MSHLFLAGS_NO_IEC 0x8 // don't use IExternalConnextion")
|
||
|
cpp_quote("#define MSHLFLAGS_NO_IMARSHAL 0x10 // don't use IMarshal")
|
||
|
|
||
|
cpp_quote("#define CONTEXTFLAGS_FROZEN 0x01 // Frozen context")
|
||
|
cpp_quote("#define CONTEXTFLAGS_ALLOWUNAUTH 0x02 // Allow unauthenticated calls")
|
||
|
cpp_quote("#define CONTEXTFLAGS_ENVOYCONTEXT 0x04 // Envoy context")
|
||
|
cpp_quote("#define CONTEXTFLAGS_DEFAULTCONTEXT 0x08 // Default context")
|
||
|
cpp_quote("#define CONTEXTFLAGS_STATICCONTEXT 0x10 // Static context")
|
||
|
cpp_quote("#define CONTEXTFLAGS_INPROPTABLE 0x20 // Is in property table")
|
||
|
cpp_quote("#define CONTEXTFLAGS_INDESTRUCTOR 0x40 // Is in destructor")
|
||
|
cpp_quote("#define CONTEXTFLAGS_URTPROPPRESENT 0x80 // URT property added")
|
||
|
|