240 lines
6.5 KiB
C++
240 lines
6.5 KiB
C++
|
/*++
|
||
|
|
||
|
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__
|
||
|
|
||
|
|