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.
 
 
 
 
 
 

230 lines
6.2 KiB

/*++
Copyright (C) Microsoft Corporation, 1991 - 1999
Module Name:
DbgIdl.idl
Abstract:
This file specifies the interface for enhanced debugging in the endpoint mapper
Author:
Kamen Moutafov (kamenm) 11-18-99
Revision History:
--*/
//
// DbgIdl Interface.
//
[
uuid(1d55b526-c137-46c5-ab79-638f2a68e869), version(1.0),
]
interface DbgIdl
{
import "nbase.idl";
cpp_quote("#if 0")
typedef unsigned short USHORT;
typedef byte BYTE;
typedef unsigned long DWORD;
cpp_quote("#endif")
typedef [context_handle] void * DbgCallEnumHandle;
typedef [context_handle] void * DbgThreadEnumHandle;
typedef [context_handle] void * DbgEndpointEnumHandle;
typedef [context_handle] void * DbgClientCallEnumHandle;
cpp_quote("// the DebugCellID allows to uniquely identify a cell using just a DWORD")
cpp_quote("// Giving any pointer to the cell would require QUADWORD on Win64")
cpp_quote("// The SectionID corresponds to the section id of the containing")
cpp_quote("// section in the dictionary. The CellID is the index of the cell")
cpp_quote("// within the containing section")
typedef struct tagDebugCellID
{
USHORT SectionID;
USHORT CellID;
} DebugCellID;
typedef struct tagLRPCCaller
{
USHORT PID;
USHORT TID;
} LRPCCaller;
typedef enum tagDebugCellType
{
dctInvalid,
dctFree,
dctCallInfo,
dctThreadInfo,
dctEndpointInfo,
dctClientCallInfo,
dctConnectionInfo,
dctCallTargetInfo,
dctUsedGeneric
} DebugCellType;
typedef enum tagConnectionReferenceType
{
crtOsfConnection,
crtLrpcConnection
} ConnectionReferenceType;
typedef [switch_type(short)] union tagConnectionReferenceInfo
{
[case (crtOsfConnection)]
DebugCellID Connection;
[case (crtLrpcConnection)]
LRPCCaller Caller;
} ConnectionReferenceInfo;
typedef struct tagRemoteDebugCallInfo
{
BYTE Type;
BYTE Status;
USHORT ProcNum;
DWORD InterfaceUUIDStart;
DebugCellID ServicingTID;
DWORD CallFlags;
DWORD CallID;
DWORD LastUpdateTime;
ConnectionReferenceType ConnectionType;
[switch_is(ConnectionType)] ConnectionReferenceInfo connInfo;
} RemoteDebugCallInfo;
typedef struct tagRemoteDebugConnectionInfo
{
BYTE Type;
BYTE Flags;
USHORT LastTransmitFragmentSize;
DebugCellID Endpoint;
DWORD ConnectionID[2];
DWORD LastSendTime;
DWORD LastReceiveTime;
} RemoteDebugConnectionInfo;
typedef struct tagRemoteDebugThreadInfo
{
BYTE Type;
USHORT Status;
DWORD LastUpdateTime;
USHORT TID;
DebugCellID Endpoint;
} RemoteDebugThreadInfo;
typedef struct tagRemoteDebugEndpointInfo
{
BYTE Type;
BYTE ProtseqType;
BYTE Status;
short EndpointNameLength;
[size_is(EndpointNameLength)] char *EndpointName;
} RemoteDebugEndpointInfo;
typedef struct tagRemoteDebugClientCallInfo
{
BYTE Type;
USHORT ProcNum;
DebugCellID ServicingThread;
DWORD IfStart;
DWORD CallID;
DebugCellID CallTargetID;
short EndpointLength;
[size_is(EndpointLength)] char *Endpoint;
} RemoteDebugClientCallInfo;
typedef struct tagRemoteDebugCallTargetInfo
{
BYTE Type;
USHORT ProtocolSequence;
DWORD LastUpdateTime;
short TargetServerLength;
[size_is(TargetServerLength)] char *TargetServer;
} RemoteDebugCallTargetInfo;
typedef [switch_type(short)] union tagRemoteDebugCellUnionBody
{
[case (dctCallInfo)]
RemoteDebugCallInfo callInfo;
[case (dctThreadInfo)]
RemoteDebugThreadInfo threadInfo;
[case (dctEndpointInfo)]
RemoteDebugEndpointInfo endpointInfo;
[case (dctClientCallInfo)]
RemoteDebugClientCallInfo clientCallInfo;
[case (dctConnectionInfo)]
RemoteDebugConnectionInfo connectionInfo;
[case (dctCallTargetInfo)]
RemoteDebugCallTargetInfo callTargetInfo;
} RemoteDebugCellUnionBody;
typedef struct tagRemoteDebugCellUnion
{
short UnionType;
[switch_is(UnionType)] RemoteDebugCellUnionBody debugInfo;
} RemoteDebugCellUnion;
// in, out, unique means client side must deallocate it after the call returns
error_status_t RemoteGetCellByDebugCellID([in] DWORD ProcessID, [in] DebugCellID CellID,
[in, out, unique] RemoteDebugCellUnion **debugInfo);
// call enumeration routines
error_status_t RemoteOpenRPCDebugCallInfoEnumeration([out] DbgCallEnumHandle *h, [in] DWORD CallID,
[in] DWORD IfStart, [in] int ProcNum, [in] DWORD ProcessID);
error_status_t RemoteGetNextRPCDebugCallInfo([in] DbgCallEnumHandle h,
[in, out, unique] RemoteDebugCallInfo **debugInfo, [out] DebugCellID *CellID,
[out] DWORD *ProcessID);
error_status_t RemoteFinishRPCDebugCallInfoEnumeration([in, out] DbgCallEnumHandle *h);
// endpoint enumeration routines
error_status_t RemoteOpenRPCDebugEndpointInfoEnumeration([out] DbgEndpointEnumHandle *h,
[in] short EndpointSize, [in, size_is(EndpointSize), unique] char *Endpoint);
error_status_t RemoteGetNextRPCDebugEndpointInfo([in] DbgEndpointEnumHandle h,
[in, out, unique] RemoteDebugEndpointInfo **debugInfo, [out] DebugCellID *CellID,
[out] DWORD *ProcessID);
error_status_t RemoteFinishRPCDebugEndpointInfoEnumeration([in, out] DbgEndpointEnumHandle *h);
// thread enumeration routines
error_status_t RemoteOpenRPCDebugThreadInfoEnumeration([out] DbgThreadEnumHandle *h,
[in] DWORD ProcessID, [in] DWORD ThreadID);
error_status_t RemoteGetNextRPCDebugThreadInfo([in] DbgThreadEnumHandle h,
[in, out, unique] RemoteDebugThreadInfo **debugInfo, [out] DebugCellID *CellID,
[out] DWORD *ProcessID);
error_status_t RemoteFinishRPCDebugThreadInfoEnumeration([in, out] DbgThreadEnumHandle *h);
// client call enumeration routines
error_status_t RemoteOpenRPCDebugClientCallInfoEnumeration([out] DbgClientCallEnumHandle *h,
[in] DWORD CallID, [in] DWORD IfStart, [in] int ProcNum, [in] DWORD ProcessID);
error_status_t RemoteGetNextRPCDebugClientCallInfo([in] DbgClientCallEnumHandle h,
[in, out, unique] RemoteDebugClientCallInfo **debugInfo,
[in, out, unique] RemoteDebugCallTargetInfo **CallTargetDebugInfo,
[out] DebugCellID *CellID,
[out] DWORD *ProcessID);
error_status_t RemoteFinishRPCDebugClientCallInfoEnumeration([in, out] DbgClientCallEnumHandle *h);
} // interface DbgIdl