Windows2000/private/windbg64/langapi/debugger/orpc_dbg.h
2020-09-30 17:12:32 +02:00

220 lines
6.9 KiB
C++

// ORPC_DBG.H (tabs 4)
// !!!!!!!!! !!!!!!!!! NOTE NOTE NOTE NOTE !!!!!!!!! !!!!!!!!!!
// SEND MAIL TO SANJAYS IF YOU MODIFY THIS FILE!
// WE MUST KEEP OLE AND LANGUAGES IN SYNC!
// !!!!!!!!! !!!!!!!!! NOTE NOTE NOTE NOTE !!!!!!!!! !!!!!!!!!!
// Created 07-Oct-1993 by Mike Morearty. The master copy of this file
// is in the LANGAPI project owned by the Languages group.
// Macros and functions for OLE RPC debugging. For a detailed explanation,
// see OLE2DBG.DOC.
#ifndef __ORPC_DBG__
#define __ORPC_DBG__
// Public:
// This structure is the information packet which OLE sends the debugger
// when it is notifying it about an OLE debug event. The first field in this
// structure points to the signature which identifies the type of the debug
// notification. The consumer of the notification can then get the relevant
// information from the struct members. Note that for each OLE debug notification
// only a subset of the struct members are meaningful.
typedef struct ORPC_DBG_ALL
{
BYTE * pSignature;
RPCOLEMESSAGE * pMessage;
const IID * refiid;
IRpcChannelBuffer * pChannel;
IUnknown * pUnkProxyMgr;
void * pInterface;
IUnknown * pUnkObject;
HRESULT hresult;
void * pvBuffer;
ULONG cbBuffer;
ULONG * lpcbBuffer;
void * reserved;
} ORPC_DBG_ALL;
typedef ORPC_DBG_ALL __RPC_FAR *LPORPC_DBG_ALL;
// Interface definition for IOrpcDebugNotify
typedef interface IOrpcDebugNotify IOrpcDebugNotify;
typedef IOrpcDebugNotify __RPC_FAR * LPORPCDEBUGNOTIFY;
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IOrpcDebugNotify : public IUnknown
{
public:
virtual VOID __stdcall ClientGetBufferSize (LPORPC_DBG_ALL) = 0;
virtual VOID __stdcall ClientFillBuffer (LPORPC_DBG_ALL) = 0;
virtual VOID __stdcall ClientNotify (LPORPC_DBG_ALL) = 0;
virtual VOID __stdcall ServerNotify (LPORPC_DBG_ALL) = 0;
virtual VOID __stdcall ServerGetBufferSize (LPORPC_DBG_ALL) = 0;
virtual VOID __stdcall ServerFillBuffer (LPORPC_DBG_ALL) = 0;
};
#else /* C style interface */
typedef struct IOrpcDebugNotifyVtbl
{
HRESULT ( __stdcall __RPC_FAR *QueryInterface )(
IOrpcDebugNotify __RPC_FAR * This,
/* [in] */ REFIID riid,
/* [out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
ULONG ( __stdcall __RPC_FAR *AddRef )(
IOrpcDebugNotify __RPC_FAR * This);
ULONG ( __stdcall __RPC_FAR *Release )(
IOrpcDebugNotify __RPC_FAR * This);
VOID ( __stdcall __RPC_FAR *ClientGetBufferSize)(
IOrpcDebugNotify __RPC_FAR * This,
LPORPC_DBG_ALL lpOrpcDebugAll);
VOID ( __stdcall __RPC_FAR *ClientFillBuffer)(
IOrpcDebugNotify __RPC_FAR * This,
LPORPC_DBG_ALL lpOrpcDebugAll);
VOID ( __stdcall __RPC_FAR *ClientNotify)(
IOrpcDebugNotify __RPC_FAR * This,
LPORPC_DBG_ALL lpOrpcDebugAll);
VOID ( __stdcall __RPC_FAR *ServerNotify)(
IOrpcDebugNotify __RPC_FAR * This,
LPORPC_DBG_ALL lpOrpcDebugAll);
VOID ( __stdcall __RPC_FAR *ServerGetBufferSize)(
IOrpcDebugNotify __RPC_FAR * This,
LPORPC_DBG_ALL lpOrpcDebugAll);
VOID ( __stdcall __RPC_FAR *ServerFillBuffer)(
IOrpcDebugNotify __RPC_FAR * This,
LPORPC_DBG_ALL lpOrpcDebugAll);
} IOrpcDebugNotifyVtbl;
interface IOrpcDebugNotify
{
CONST_VTBL struct IOrpcDebugNotifyVtbl __RPC_FAR *lpVtbl;
};
#endif
// This is the structure that is passed by the debugger to OLE when it enables ORPC
// debugging.
typedef struct ORPC_INIT_ARGS
{
IOrpcDebugNotify __RPC_FAR * lpIntfOrpcDebug;
void * pvPSN; // contains ptr to Process Serial No. for Mac ORPC debugging.
DWORD dwReserved1; // For future use, must be 0.
DWORD dwReserved2;
} ORPC_INIT_ARGS;
typedef ORPC_INIT_ARGS __RPC_FAR * LPORPC_INIT_ARGS;
// Function pointer prototype for the "DllDebugObjectRPCHook" function.
typedef BOOL (WINAPI* ORPCHOOKPROC)(BOOL, LPORPC_INIT_ARGS);
// The first four bytes in the debug specific packet are interpreted by the
// ORPC debug layer. The valid values are the ones defined below.
#define ORPC_DEBUG_ALWAYS (0x00000000L) // Notify always.
#define ORPC_DEBUG_IF_HOOK_ENABLED (0x00000001L) // Notify only if hook enabled.
// This exception code indicates that the exception is really an
// ORPC debug notification.
#define EXCEPTION_ORPC_DEBUG (0x804f4c45)
// Private: Declarations below this point are related to the implementation and should
// be removed from the distributable version of the header file.
// Helper routines to set & restore the "Auto" value in the registry
BOOL WINAPI DebugORPCSetAuto(VOID);
VOID WINAPI DebugORPCRestoreAuto(VOID);
ULONG WINAPI DebugORPCClientGetBufferSize(
RPCOLEMESSAGE * pMessage,
REFIID iid,
void * reserved,
IUnknown * pUnkProxyMgr,
LPORPC_INIT_ARGS lpInitArgs,
BOOL fHookEnabled);
void WINAPI DebugORPCClientFillBuffer(
RPCOLEMESSAGE * pMessage,
REFIID iid,
void * reserved,
IUnknown * pUnkProxyMgr,
void * pvBuffer,
ULONG cbBuffer,
LPORPC_INIT_ARGS lpInitArgs,
BOOL fHookEnabled);
void WINAPI DebugORPCClientNotify(
RPCOLEMESSAGE * pMessage,
REFIID iid,
void * reserved,
IUnknown * pUnkProxyMgr,
HRESULT hresult,
void * pvBuffer,
ULONG cbBuffer,
LPORPC_INIT_ARGS lpInitArgs,
BOOL fHookEnabled);
void WINAPI DebugORPCServerNotify(
RPCOLEMESSAGE * pMessage,
REFIID iid,
IRpcChannelBuffer * pChannel,
void * pInterface,
IUnknown * pUnkObject,
void * pvBuffer,
ULONG cbBuffer,
LPORPC_INIT_ARGS lpInitArgs,
BOOL fHookEnabled);
ULONG WINAPI DebugORPCServerGetBufferSize(
RPCOLEMESSAGE * pMessage,
REFIID iid,
IRpcChannelBuffer * pChannel,
void * pInterface,
IUnknown * pUnkObject,
LPORPC_INIT_ARGS lpInitArgs,
BOOL fHookEnabled);
void WINAPI DebugORPCServerFillBuffer(
RPCOLEMESSAGE * pMessage,
REFIID iid,
IRpcChannelBuffer * pChannel,
void * pInterface,
IUnknown * pUnkObject,
void * pvBuffer,
ULONG cbBuffer,
LPORPC_INIT_ARGS lpInitArgs,
BOOL fHookEnabled);
#endif // __ORPC_DBG__