/*++ Copyright (c) 1991-2000 Microsoft Corporation Module Name: midlesp.h Abstract: This module contains private definitions for the pickling support. Author: Ryszard K. Kott (ryszardk) May, 1994 Revision History: --*/ #ifndef __PICKLEP_HXX__ #define __PICKLEP_HXX__ #define MIDL_ES_VERSION 1 /* initial version */ /* NT5 beta1, denial of attacks version is compatible on wire */ #define MIDL_ES_SIGNATURE 0x5c5b5351 /* PCKL */ #define MES_MINIMAL_BUFFER_SIZE 16 #define MES_MINIMAL_NDR64_BUFFER_SIZE ( MES_NDR64_CTYPE_HEADER_SIZE + MES_HEADER_SIZE ) #define MES_PROC_HEADER_SIZE 56 #define MES_CTYPE_HEADER_SIZE 8 #define MES_HEADER_SIZE 8 #define MES_NDR64_HEADER_SIZE 16 #define MES_HEADER_PAD(x) ((((unsigned long)x)&7) ? (8-(((unsigned long)x)&7)) : 0) #define MIDL_NDR64_ES_VERSION 2 #define MIDL_NDR64_ES_SIGNATURE 0x5c5b5351 #define MES_NDR64_CTYPE_HEADER_SIZE ( 24 + 2 * sizeof(RPC_SYNTAX_IDENTIFIER) ) // // Constants for peeking the procedure header // and for manipulation of the common type header. // #define MES_HEADER_PEEKED 0x01 #define MES_INFO_AVAILABLE 0x02 #define MES_CTYPE_HEADER_IN 0x04 #define MES_CTYPE_HEADER_SIZED 0x08 #define GET_MES_HEADER_PEEKED(p) (p->HandleFlags & MES_HEADER_PEEKED) #define SET_MES_HEADER_PEEKED(p) p->HandleFlags = p->HandleFlags | MES_HEADER_PEEKED; #define CLEAR_MES_HEADER_PEEKED(p) p->HandleFlags = p->HandleFlags & ~MES_HEADER_PEEKED; #define GET_MES_INFO_AVAILABLE(p) (p->HandleFlags & MES_INFO_AVAILABLE) #define SET_MES_INFO_AVAILABLE(p) p->HandleFlags = p->HandleFlags | MES_INFO_AVAILABLE; #define GET_COMMON_TYPE_HEADER_IN(p) (p->HandleFlags & MES_CTYPE_HEADER_IN) #define SET_COMMON_TYPE_HEADER_IN(p) p->HandleFlags = p->HandleFlags | MES_CTYPE_HEADER_IN; #define GET_COMMON_TYPE_HEADER_SIZED(p) (p->HandleFlags & MES_CTYPE_HEADER_SIZED) #define SET_COMMON_TYPE_HEADER_SIZED(p) p->HandleFlags = p->HandleFlags | MES_CTYPE_HEADER_SIZED; #define NDR_LOCAL_ENDIAN_LOW (NDR_LOCAL_ENDIAN >> 4) #define MES_DECODE_NDR64 ( MES_ENCODE_NDR64 + 1 ) // // Handly casts #define PCHAR_CAST (char *) #define PPCHAR_CAST (char * *) #define PSHORT_CAST (short *) #define PLONG_CAST (long *) #define PHYPER_CAST (hyper *) #define PCHAR_LV_CAST *(char * *)& #define PSHORT_LV_CAST *(short * *)& #define PLONG_LV_CAST *(long * *)& #define PHYPER_LV_CAST *(hyper * *)& // For denial of attacks rpcmsg must be simulated for the engine. typedef struct _MIDL_ES_MESSAGE { MIDL_STUB_MESSAGE StubMsg; MIDL_ES_CODE Operation; void * UserState; unsigned long MesVersion:8; unsigned long HandleStyle:8; unsigned long HandleFlags:8; unsigned long Reserve:8; MIDL_ES_ALLOC Alloc; MIDL_ES_WRITE Write; MIDL_ES_READ Read; unsigned char * Buffer; unsigned long BufferSize; unsigned char * * pDynBuffer; unsigned long * pEncodedSize; RPC_SYNTAX_IDENTIFIER InterfaceId; unsigned long ProcNumber; unsigned long AlienDataRep; unsigned long IncrDataSize; unsigned long ByteCount; } MIDL_ES_MESSAGE, * PMIDL_ES_MESSAGE; typedef struct _MIDL_ES_MESSAGE_EX { MIDL_ES_MESSAGE MesMsg; unsigned long Signature; RPC_MESSAGE RpcMsg; RPC_SYNTAX_IDENTIFIER TransferSyntax; } MIDL_ES_MESSAGE_EX, *PMIDL_ES_MESSAGE_EX; void NdrpProcHeaderUnmarshall( PMIDL_ES_MESSAGE pMesMsg ); void NdrpDataBufferInit( PMIDL_ES_MESSAGE pMesMsg, PFORMAT_STRING pProcFormat ); void NdrpAllocPicklingBuffer( PMIDL_ES_MESSAGE pMesMsg, unsigned int RequiredLen ); void NdrpWritePicklingBuffer( PMIDL_ES_MESSAGE pMesMsg, uchar * pBuffer, size_t WriteLength ); void NdrpReadPicklingBuffer( PMIDL_ES_MESSAGE pMesMsg, unsigned int RequiredLen ); void NdrpProcHeaderMarshall( PMIDL_ES_MESSAGE pMesMsg ); size_t NdrpCommonTypeHeaderMarshall( PMIDL_ES_MESSAGE pMesMsg ); void NdrpCommonTypeHeaderSize( PMIDL_ES_MESSAGE pMesMsg ); // // Var arg for pickling, based on ndrvargs.h. // This assumes that all the ... args to NdrMesProcEncodeDecode // are far pointers to the original stack args. // #define GET_FIRST_ARG(pArg, ArgL) pArg = (va_list *)ArgL #define GET_NEXT_ARG( pArg, ArgL) PCHAR_LV_CAST pArg += sizeof(void *); // Internal version of _MIDL_TYPE_PICKLING_INFO (defined in midles.h) with // flag definitions. // // !!IF YOU CHANGE EITHER ONE YOU MUST CHANGE THE OTHER!! typedef struct __MIDL_TYPE_PICKLING_INFOp { unsigned long Version; union { unsigned long ulFlags; // external version MIDL_TYPE_PICKLING_FLAGS Flags; // internal version }; UINT_PTR Reserved[3]; } MIDL_TYPE_PICKLING_INFOp, *PMIDL_TYPE_PICKLING_INFOp; void NdrpProcHeaderMarshallAll( PMIDL_ES_MESSAGE pMesMsg ); void NdrpProcHeaderUnmarshallAll( PMIDL_ES_MESSAGE pMesMsg ); typedef size_t ( RPC_ENTRY * PFNMESTYPEALIGNSIZE )( handle_t Handle, const MIDL_TYPE_PICKLING_INFO * pPicklingInfo, const MIDL_STUB_DESC * pStubDesc, PFORMAT_STRING pFormat, const void * pObject ); typedef void ( RPC_ENTRY * PFNMESTYPEENCODE ) ( handle_t Handle, const MIDL_TYPE_PICKLING_INFO * pxPicklingInfo, const MIDL_STUB_DESC * pStubDesc, PFORMAT_STRING pFormat, const void * pObject ); typedef void ( RPC_ENTRY * PFNMESDECODE ) ( handle_t Handle, const MIDL_TYPE_PICKLING_INFO * pxPicklingInfo, const MIDL_STUB_DESC * pStubDesc, PFORMAT_STRING pFormat, void * pObject ); // REVIEW: Should pObject be const here? typedef void ( RPC_ENTRY * PFNMESFREE ) ( handle_t Handle, const MIDL_TYPE_PICKLING_INFO * pxPicklingInfo, const MIDL_STUB_DESC * pStubDesc, PFORMAT_STRING pFormat, void * pObject ); #endif __PICKLEP_HXX__