RpcView/RpcCore/RpcInternalsCommon.h

181 lines
5.6 KiB
C

#ifndef _RPC_INTERNALS_COMMON_H_
#define _RPC_INTERNALS_COMMON_H_
// Microsoft Remote Procedure Call (RPC) internals
// Undocumented structure from rpcrt4.dll
//
// global pointers :
// RPC_SERVER* GlobalRpcServer
// RPC_INTERFACE* GlobalManagementInterface
// ENDPOINT_MANAGER* EndpointManager
// LRPC_SERVER* GlobalLrpcServer
// SECURITY_PROVIDER_INFO* ProviderList
//
// HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\
// - the "ClientsProtocols" key contains protocole sequence accepted
// - the "Extensions" key ???
// - the "SecurityService" key contains AuthnSvc constants and the corresponding DLLs
// the "InitSecurityInterfaceW" function is called as entry-point to initialize the Authentication service
//
#include <windows.h>
#include "..\RpcCommon\ntdll.h"
#define MAX_RPC_INTERFACE_ANNOTATION 64
#define SIMPLE_DICT_SMALL_ARRAY 4
//==============================================================================
// From Winnt.h
// The following structures are redefined to support Wow64 ptr
//
struct _RTL_CRITICAL_SECTION_T;
typedef struct _LIST_ENTRY_T {
struct _LIST_ENTRY PTR_T Flink;
struct _LIST_ENTRY PTR_T Blink;
} LIST_ENTRY_T, *PLIST_ENTRY_T;
typedef struct _RTL_CRITICAL_SECTION_DEBUG_T {
WORD Type;
WORD CreatorBackTraceIndex;
struct _RTL_CRITICAL_SECTION_T PTR_T CriticalSection;
LIST_ENTRY_T ProcessLocksList;
DWORD EntryCount;
DWORD ContentionCount;
DWORD Flags;
WORD CreatorBackTraceIndexHigh;
WORD SpareWORD;
} RTL_CRITICAL_SECTION_DEBUG_T, PTR_T PRTL_CRITICAL_SECTION_DEBUG_T;
typedef struct _RTL_CRITICAL_SECTION_T {
PRTL_CRITICAL_SECTION_DEBUG_T DebugInfo;
//
// The following three fields control entering and exiting the critical
// section for the resource
//
LONG LockCount;
LONG RecursionCount;
VOID PTR_T OwningThread; // from the thread's ClientId->UniqueThread
VOID PTR_T LockSemaphore;
VOID PTR_T SpinCount; // force size on 64-bit systems when packed
} RTL_CRITICAL_SECTION_T, PTR_T PRTL_CRITICAL_SECTION_T;
//==============================================================================
// From RpcDceP.h
//
typedef struct _RPC_DISPATCH_TABLE_T{
UINT DispatchTableCount;
RPC_DISPATCH_FUNCTION PTR_T DispatchTable;
ULONG_PTR_T Reserved;
} RPC_DISPATCH_TABLE_T, PTR_T PRPC_DISPATCH_TABLE_T;
typedef struct _RPC_PROTSEQ_ENDPOINT_T{
UCHAR PTR_T RpcProtocolSequence;
UCHAR PTR_T Endpoint;
} RPC_PROTSEQ_ENDPOINT_T, PTR_T PRPC_PROTSEQ_ENDPOINT_T;
typedef struct _RPC_SERVER_INTERFACE_T{
UINT Length;
RPC_IF_ID InterfaceId;
RPC_IF_ID TransferSyntax;
PRPC_DISPATCH_TABLE_T DispatchTable;
UINT RpcProtseqEndpointCount;
PRPC_PROTSEQ_ENDPOINT_T RpcProtseqEndpoint;
RPC_MGR_EPV PTR_T DefaultManagerEpv;
void const PTR_T InterpreterInfo;
UINT Flags ;
} RPC_SERVER_INTERFACE_T, PTR_T PRPC_SERVER_INTERFACE_T;
typedef struct _NDR_EXPR_DESC_T
{
const unsigned short PTR_T pOffset;
const unsigned char PTR_T pFormatExpr;
} NDR_EXPR_DESC_T;
/*
* MIDL Stub Descriptor
*/
typedef struct _MIDL_STUB_DESC_T{
void PTR_T RpcInterfaceInformation;
void PTR_T pfnAllocate;
void PTR_T pfnFree;
void PTR_T pAutoHandle;
const VOID PTR_T apfnNdrRundownRoutines;
const VOID PTR_T aGenericBindingRoutinePairs;
const VOID PTR_T apfnExprEval;
const VOID PTR_T aXmitQuintuple;
const unsigned char PTR_T pFormatTypes;
int fCheckBounds;
/* Ndr library version. */
unsigned long Version;
VOID PTR_T pMallocFreeStruct;
long MIDLVersion;
const COMM_FAULT_OFFSETS PTR_T CommFaultOffsets;
// New fields for version 3.0+
const VOID PTR_T aUserMarshalQuadruple;
// Notify routines - added for NT5, MIDL 5.0
const VOID PTR_T NotifyRoutineTable;
/*
* Reserved for future use.
*/
ULONG_PTR_T mFlags;
// International support routines - added for 64bit post NT5
const VOID PTR_T CsRoutineTables;
void PTR_T ProxyServerInfo;
const NDR_EXPR_DESC_T PTR_T pExprInfo;
// Fields up to now present in win2000 release.
} MIDL_STUB_DESC_T, PTR_T PMIDL_STUB_DESC_T;
/*
* Server Interpreter's information strucuture.
*/
typedef struct _MIDL_SERVER_INFO_T{
PMIDL_STUB_DESC_T pStubDesc;
const VOID PTR_T PTR_T DispatchTable;
const unsigned char PTR_T ProcString;
const unsigned short PTR_T FmtStringOffset;
const VOID PTR_T PTR_T ThunkTable;
RPC_IF_ID PTR_T pTransferSyntax;
ULONG_PTR_T nCount;
VOID PTR_T pSyntaxInfo;
} MIDL_SERVER_INFO_T, PTR_T PMIDL_SERVER_INFO_T;
//==============================================================================
// Common private structures from rpctr4.dll.
// These structures seems to be constant on all the runtime versions.
//
#pragma pack(1)
typedef struct _SIMPLE_DICT_T{
VOID PTR_T PTR_T pArray;
UINT ArraySizeInBytes; //to change : countof array elements
UINT NumberOfEntries;
VOID PTR_T SmallArray[SIMPLE_DICT_SMALL_ARRAY];
}SIMPLE_DICT_T, PTR_T PSIMPLE_DICT_T;
typedef struct _QUEUE_T{
VOID PTR_T Tail;
VOID PTR_T Head;
ULONG Lentgh;
VOID PTR_T SmallArray[SIMPLE_DICT_SMALL_ARRAY];
}QUEUE_T;
typedef struct _MUTEX_T{
RTL_CRITICAL_SECTION_T CriticalSection;
}MUTEX_T;
typedef struct _EVENT_T{
ULONG hEvent;
} EVENT_T;
#pragma pack()
#define RPC_ADDRESS_TYPE_DG 0x400000
#define RPC_ADDRESS_TYPE_LRPC 0x800000
#define RPC_ADDRESS_TYPE_OSF 0x800
#endif //_RPC_INTERNALS_COMMON_H_