windows-nt/Source/XPSP1/NT/public/internal/com/inc/contxt.idl
2020-09-26 16:20:57 +08:00

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")