mirror of https://github.com/UMSKT/xpmgr.git
810 lines
25 KiB
C
810 lines
25 KiB
C
/*++
|
|
|
|
Copyright (c) 1993-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ndrtypes.h
|
|
|
|
Abstract:
|
|
|
|
Definitions of new NDR format string types.
|
|
|
|
Revision History:
|
|
|
|
DKays Sep-1993 Created.
|
|
|
|
--*/
|
|
|
|
#ifndef __NDRTYPES_H__
|
|
#define __NDRTYPES_H__
|
|
|
|
#include <limits.h>
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// We use C compiler constants like _I16_MIN or _UI32_MAX from limits.h
|
|
// when we need to check for integral boundaries.
|
|
|
|
#define UNION_OFFSET16_MIN -32512 /*0x8100*/
|
|
|
|
// These are pointer sizes used by the compiler.
|
|
// As they we do cross-compilation, they cannot be expressed as sizeof(void*).
|
|
// The native pointer sizes used by the NDR engine are defined in ndrp.h.
|
|
|
|
#define PTR_WIRE_SIZE 4
|
|
|
|
#define NT64_PTR_SIZE 8
|
|
#define NT32_PTR_SIZE 4
|
|
#define SIZEOF_PTR( f64 ) ((f64) ? NT64_PTR_SIZE : NT32_PTR_SIZE )
|
|
#define SIZEOF_MEM_PTR() ((pCommand->Is64BitEnv()) ? NT64_PTR_SIZE : NT32_PTR_SIZE )
|
|
|
|
#define SIZEOF_INT3264() ((pCommand->Is64BitEnv()) ? 8 : 4 )
|
|
|
|
//
|
|
// Ndr versions. Versions history is as follows :
|
|
//
|
|
// 1.1 - Windows NT version 3.5
|
|
// 1.1 - Windows NT version 3.51
|
|
// 2.0 - Windows NT version 4.0
|
|
// 2.0 is switched on for Oi2, user_marshal, pipes.
|
|
// 5.0 - Windows NT version 5.0, beta1
|
|
// [message], object pipes, async rpc
|
|
// 5.2 - Windows NT version 5.0, beta2
|
|
// /robust, [notify] in -Oicf, [async_uuid()]
|
|
// extensions to the format string descriptors.
|
|
// 5.3 - Windows 2000 (NT ver. 5.0), beta3 RC1
|
|
// unlimited number of methods with stubless proxies
|
|
// 5.4 - Windows 2000 (NT ver. 5.0), beta3
|
|
// pickling with -Oicf
|
|
//
|
|
// A stub can not be used with an rpcrt4.dll which has a version number
|
|
// less than the version number emitted in the stub. A stub with a lower
|
|
// version number than the rpcrt4.dll must work.
|
|
//
|
|
// Note that the MIDL version is used to choose between -Oi and -Oi2
|
|
// interpreters when NDR version is 2.0 or later as now the compiler
|
|
// generates an explicit flag indicating the interpreter flavor.
|
|
// The compiler version needs to be 3.0.39 or later for that.
|
|
//
|
|
// Since MIDL 3.3.126, for object interfaces, we have proc header extensions,
|
|
// and async uuid supported. Also since the same version, for object interfaces
|
|
// the header has a fixed size as we always generate rpcflags into the header
|
|
// and always generate an "autohandle" handle. Hence, the oicf interpreter flags
|
|
// and also the extended header is always at the fixed position.
|
|
//
|
|
// The MIDL version history is as follows.
|
|
//
|
|
// Windows NT ver. 3.1 - MIDL 1.0
|
|
// Windows NT ver. 3.5 - MIDL 2.0.72 __midl macro
|
|
// Windows NT ver. 3.51 - MIDL 2.0.102 (internally, .104) vers. in StubDesc
|
|
// Windows NT ver. 4.0 - MIDL 3.0.44 user_marshal, pipes
|
|
// VC 5.0 - MIDL 3.1.75
|
|
// Windows NT ver. 5.0 - MIDL 3.1.76 IDW
|
|
// - MIDL 3.2.88 IDW
|
|
// - MIDL 3.3.110 beta1 async rpc
|
|
// - MIDL 5.0.140 async_uuid, robust
|
|
// - MIDL 5.1.164 beta2 midl_pragma warning
|
|
// VC 6.0 - MIDL 5.1.164
|
|
// Windows NT 5.0 saga - MIDL 5.2.204 64b support
|
|
// now WIndows 2000 - MIDL 5.2.235 beta3 netmon
|
|
// - MIDL 5.3.266 midl/midlc exe split
|
|
//
|
|
// The MIDL version is generated into the stub descriptor starting with
|
|
// MIDL ver.2.0.96 (pre NT 3.51 beta 2, Feb 95).
|
|
// See ndr20\ndrp.h for constants used for specific versions.
|
|
//
|
|
|
|
|
|
#define NDR_MAJOR_VERSION 5UL
|
|
#define NDR_MINOR_VERSION 4UL
|
|
#define NDR_VERSION ((NDR_MAJOR_VERSION << 16) | NDR_MINOR_VERSION)
|
|
|
|
#define NDR_VERSION_1_1 ((1UL << 16) | 1UL)
|
|
#define NDR_VERSION_2_0 ((2UL << 16) | 0UL)
|
|
#define NDR_VERSION_5_0 ((5UL << 16) | 0UL)
|
|
#define NDR_VERSION_5_2 ((5UL << 16) | 2UL)
|
|
#define NDR_VERSION_5_3 ((5UL << 16) | 3UL)
|
|
#define NDR_VERSION_5_4 ((5UL << 16) | 4UL)
|
|
|
|
// !!! WARNING !!!
|
|
//
|
|
// These definitions should be removed in conjunction with Automation
|
|
// check-in for dual TLBs.
|
|
//
|
|
|
|
#define LOAD_TLB_AS_64BIT 0
|
|
#define LOAD_TLB_AS_32BIT 0
|
|
|
|
//
|
|
// !!! WARNING WARNING WARNING !!!
|
|
//
|
|
// All of the format character values up to FC_PAD can no longer be changed,
|
|
// in order to preserve NT 3.5 compatability (excluding those marked as
|
|
// FC_UNUSED*, these were unused format characters in NDR library version 1.1).
|
|
// Their ordinal number, as well as semantics, must remain.
|
|
//
|
|
// When additional format characters are added (at the end), changes must
|
|
// be made in ndr20 as well as midl20\codegen\frmtstr.cxx to handle the
|
|
// new type.
|
|
// In particular, there is a pFormatCharNames table and a pNdrRoutineNames table
|
|
// that should be kept in ssync.
|
|
//
|
|
// !!! WARNING WARNING WARNING !!!
|
|
//
|
|
|
|
typedef enum {
|
|
|
|
//
|
|
// This might catch some errors, probably can be removed after debugging.
|
|
//
|
|
FC_ZERO,
|
|
|
|
//
|
|
// Simple integer and floating point types.
|
|
//
|
|
|
|
FC_BYTE, // 0x01
|
|
FC_CHAR, // 0x02
|
|
FC_SMALL, // 0x03
|
|
FC_USMALL, // 0x04
|
|
|
|
FC_WCHAR, // 0x05
|
|
FC_SHORT, // 0x06
|
|
FC_USHORT, // 0x07
|
|
|
|
FC_LONG, // 0x08
|
|
FC_ULONG, // 0x09
|
|
|
|
FC_FLOAT, // 0x0a
|
|
|
|
FC_HYPER, // 0x0b
|
|
|
|
FC_DOUBLE, // 0x0c
|
|
|
|
//
|
|
// Enums.
|
|
//
|
|
FC_ENUM16, // 0x0d
|
|
FC_ENUM32, // 0x0e
|
|
|
|
//
|
|
// !!!IMPORTANT!!!
|
|
// All format charaters which appear before this comment must have an
|
|
// enum value which will fit in 4 bits.
|
|
//
|
|
|
|
//
|
|
// Special.
|
|
//
|
|
FC_IGNORE, // 0x0f
|
|
FC_ERROR_STATUS_T, // 0x10
|
|
|
|
//
|
|
// Pointer types :
|
|
// RP - reference pointer
|
|
// UP - unique pointer
|
|
// OP - OLE unique pointer
|
|
// FP - full pointer
|
|
//
|
|
|
|
FC_RP, // 0x11
|
|
FC_UP, // 0x12
|
|
FC_OP, // 0x13
|
|
FC_FP, // 0x14
|
|
|
|
//
|
|
// Structures
|
|
//
|
|
|
|
//
|
|
// Structure containing only simple types and fixed arrays.
|
|
//
|
|
FC_STRUCT, // 0x15
|
|
|
|
//
|
|
// Structure containing only simple types, pointers and fixed arrays.
|
|
//
|
|
FC_PSTRUCT, // 0x16
|
|
|
|
//
|
|
// Structure containing a conformant array plus all those types
|
|
// allowed by FC_STRUCT.
|
|
//
|
|
FC_CSTRUCT, // 0x17
|
|
|
|
//
|
|
// Struct containing a conformant array plus all those types allowed by
|
|
// FC_PSTRUCT.
|
|
//
|
|
FC_CPSTRUCT, // 0x18
|
|
|
|
//
|
|
// Struct containing either a conformant varying array or a conformant
|
|
// string, plus all those types allowed by FC_PSTRUCT.
|
|
//
|
|
FC_CVSTRUCT, // 0x19
|
|
|
|
//
|
|
// Complex struct - totally bogus!
|
|
//
|
|
FC_BOGUS_STRUCT, // 0x1a
|
|
|
|
//
|
|
// Arrays.
|
|
//
|
|
|
|
//
|
|
// Conformant arrray.
|
|
//
|
|
FC_CARRAY, // 0x1b
|
|
|
|
//
|
|
// Conformant varying array.
|
|
//
|
|
FC_CVARRAY, // 0x1c
|
|
|
|
//
|
|
// Fixed array, small and large.
|
|
//
|
|
FC_SMFARRAY, // 0x1d
|
|
FC_LGFARRAY, // 0x1e
|
|
|
|
//
|
|
// Varying array, small and large.
|
|
//
|
|
FC_SMVARRAY, // 0x1f
|
|
FC_LGVARRAY, // 0x20
|
|
|
|
//
|
|
// Complex arrays - totally bogus!
|
|
//
|
|
FC_BOGUS_ARRAY, // 0x21
|
|
|
|
//
|
|
// Strings :
|
|
//
|
|
// The order of these should have been moved around, but it's too late
|
|
// now.
|
|
//
|
|
// CSTRING - character string
|
|
// BSTRING - byte string (Beta2 compatability only)
|
|
// SSTRING - structure string
|
|
// WSTRING - wide charater string
|
|
//
|
|
|
|
//
|
|
// Conformant strings.
|
|
//
|
|
FC_C_CSTRING, // 0x22
|
|
FC_C_BSTRING, // 0x23
|
|
FC_C_SSTRING, // 0x24
|
|
FC_C_WSTRING, // 0x25
|
|
|
|
//
|
|
// Non-conformant strings.
|
|
//
|
|
FC_CSTRING, // 0x26
|
|
FC_BSTRING, // 0x27
|
|
FC_SSTRING, // 0x28
|
|
FC_WSTRING, // 0x29
|
|
|
|
//
|
|
// Unions
|
|
//
|
|
FC_ENCAPSULATED_UNION, // 0x2a
|
|
FC_NON_ENCAPSULATED_UNION, // 0x2b
|
|
|
|
//
|
|
// Byte count pointer.
|
|
//
|
|
FC_BYTE_COUNT_POINTER, // 0x2c
|
|
|
|
//
|
|
// transmit_as and represent_as
|
|
//
|
|
FC_TRANSMIT_AS, // 0x2d
|
|
FC_REPRESENT_AS, // 0x2e
|
|
|
|
//
|
|
// Cairo Interface pointer.
|
|
//
|
|
FC_IP, // 0x2f
|
|
|
|
//
|
|
// Binding handle types
|
|
//
|
|
FC_BIND_CONTEXT, // 0x30
|
|
FC_BIND_GENERIC, // 0x31
|
|
FC_BIND_PRIMITIVE, // 0x32
|
|
FC_AUTO_HANDLE, // 0x33
|
|
FC_CALLBACK_HANDLE, // 0x34
|
|
FC_UNUSED1, // 0x35
|
|
|
|
// Embedded pointer - used in complex structure layouts only.
|
|
FC_POINTER, // 0x36
|
|
|
|
//
|
|
// Alignment directives, used in structure layouts.
|
|
//
|
|
FC_ALIGNM2, // 0x37
|
|
FC_ALIGNM4, // 0x38
|
|
FC_ALIGNM8, // 0x39
|
|
|
|
FC_UNUSED2, // 0x3a
|
|
FC_UNUSED3, // 0x3b
|
|
FC_UNUSED4, // 0x3c
|
|
|
|
//
|
|
// Structure padding directives, used in structure layouts only.
|
|
//
|
|
FC_STRUCTPAD1, // 0x3d
|
|
FC_STRUCTPAD2, // 0x3e
|
|
FC_STRUCTPAD3, // 0x3f
|
|
FC_STRUCTPAD4, // 0x40
|
|
FC_STRUCTPAD5, // 0x41
|
|
FC_STRUCTPAD6, // 0x42
|
|
FC_STRUCTPAD7, // 0x43
|
|
|
|
//
|
|
// Additional string attribute.
|
|
//
|
|
FC_STRING_SIZED, // 0x44
|
|
|
|
FC_UNUSED5, // 0x45
|
|
|
|
//
|
|
// Pointer layout attributes.
|
|
//
|
|
FC_NO_REPEAT, // 0x46
|
|
FC_FIXED_REPEAT, // 0x47
|
|
FC_VARIABLE_REPEAT, // 0x48
|
|
FC_FIXED_OFFSET, // 0x49
|
|
FC_VARIABLE_OFFSET, // 0x4a
|
|
|
|
// Pointer section delimiter.
|
|
FC_PP, // 0x4b
|
|
|
|
// Embedded complex type.
|
|
FC_EMBEDDED_COMPLEX, // 0x4c
|
|
|
|
// Parameter attributes.
|
|
FC_IN_PARAM, // 0x4d
|
|
FC_IN_PARAM_BASETYPE, // 0x4e
|
|
FC_IN_PARAM_NO_FREE_INST, // 0x4d
|
|
FC_IN_OUT_PARAM, // 0x50
|
|
FC_OUT_PARAM, // 0x51
|
|
FC_RETURN_PARAM, // 0x52
|
|
FC_RETURN_PARAM_BASETYPE, // 0x53
|
|
|
|
//
|
|
// Conformance/variance attributes.
|
|
//
|
|
FC_DEREFERENCE, // 0x54
|
|
FC_DIV_2, // 0x55
|
|
FC_MULT_2, // 0x56
|
|
FC_ADD_1, // 0x57
|
|
FC_SUB_1, // 0x58
|
|
FC_CALLBACK, // 0x59
|
|
|
|
// Iid flag.
|
|
FC_CONSTANT_IID, // 0x5a
|
|
|
|
FC_END, // 0x5b
|
|
FC_PAD, // 0x5c
|
|
|
|
//
|
|
// split Conformance/variance attributes.
|
|
//
|
|
FC_SPLIT_DEREFERENCE = 0x74, // 0x74
|
|
FC_SPLIT_DIV_2, // 0x75
|
|
FC_SPLIT_MULT_2, // 0x76
|
|
FC_SPLIT_ADD_1, // 0x77
|
|
FC_SPLIT_SUB_1, // 0x78
|
|
FC_SPLIT_CALLBACK, // 0x79
|
|
|
|
//
|
|
// **********************************
|
|
// New Post NT 3.5 format characters.
|
|
// **********************************
|
|
//
|
|
|
|
//
|
|
// Attributes, directives, etc.
|
|
//
|
|
|
|
//
|
|
// New types.
|
|
//
|
|
// These start at 0xb1 (0x31 + 0x80) so that their routines can simply be
|
|
// placed sequentially in the various routine tables, while using
|
|
// a new ROUTINE_INDEX() macro which strips off the most significant bit
|
|
// of the format character. The value 0x31 is the next value after
|
|
// FC_BIND_CONTEXT, whose routines were previously the last to appear
|
|
// in the routine tables.
|
|
//
|
|
FC_HARD_STRUCT = 0xb1, // 0xb1
|
|
|
|
FC_TRANSMIT_AS_PTR, // 0xb2
|
|
FC_REPRESENT_AS_PTR, // 0xb3
|
|
|
|
FC_USER_MARSHAL, // 0xb4
|
|
|
|
FC_PIPE, // 0xb5
|
|
|
|
FC_BLKHOLE, // 0xb6
|
|
|
|
FC_RANGE, // 0xb7 NT 5 beta2 MIDL 3.3.110
|
|
|
|
FC_INT3264, // 0xb8 NT 5 beta2, MIDL64, 5.1.194+
|
|
FC_UINT3264, // 0xb9 NT 5 beta2, MIDL64, 5.1.194+
|
|
|
|
FC_END_OF_UNIVERSE // 0xba
|
|
} FORMAT_CHARACTER;
|
|
|
|
|
|
#if !defined(__RPC_MAC__)
|
|
//
|
|
// Interpreter bit flag structures.
|
|
//
|
|
|
|
// These are the old Oi interpreter proc flags.
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char FullPtrUsed : 1; // 0x01
|
|
unsigned char RpcSsAllocUsed : 1; // 0x02
|
|
unsigned char ObjectProc : 1; // 0x04
|
|
unsigned char HasRpcFlags : 1; // 0x08
|
|
unsigned char IgnoreObjectException : 1; // 0x10
|
|
unsigned char HasCommOrFault : 1; // 0x20
|
|
unsigned char UseNewInitRoutines : 1; // 0x40
|
|
unsigned char Unused : 1;
|
|
} INTERPRETER_FLAGS, *PINTERPRETER_FLAGS;
|
|
|
|
// These are the Oi2 parameter flags.
|
|
|
|
typedef struct
|
|
{
|
|
unsigned short MustSize : 1; // 0x0001
|
|
unsigned short MustFree : 1; // 0x0002
|
|
unsigned short IsPipe : 1; // 0x0004
|
|
unsigned short IsIn : 1; // 0x0008
|
|
unsigned short IsOut : 1; // 0x0010
|
|
unsigned short IsReturn : 1; // 0x0020
|
|
unsigned short IsBasetype : 1; // 0x0040
|
|
unsigned short IsByValue : 1; // 0x0080
|
|
unsigned short IsSimpleRef : 1; // 0x0100
|
|
unsigned short IsDontCallFreeInst : 1; // 0x0200
|
|
unsigned short SaveForAsyncFinish : 1; // 0x0400
|
|
unsigned short Unused : 2;
|
|
unsigned short ServerAllocSize : 3; // 0xe000
|
|
} PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
|
|
|
|
// These are the new Oi2 proc flags.
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char ServerMustSize : 1; // 0x01
|
|
unsigned char ClientMustSize : 1; // 0x02
|
|
unsigned char HasReturn : 1; // 0x04
|
|
unsigned char HasPipes : 1; // 0x08
|
|
unsigned char Unused : 1;
|
|
unsigned char HasAsyncUuid : 1; // 0x20
|
|
unsigned char HasExtensions : 1; // 0x40
|
|
unsigned char HasAsyncHandle : 1; // 0x80
|
|
} INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;
|
|
|
|
// This is the proc header layout for object procs starting with MIDL 3.3.129,
|
|
// introduced for the async_uuid() support in dcom but generated for ony object
|
|
// interface, regardless of the compiler mode and interface being async.
|
|
// Handle is always autohandle and so there never is explicit handle descriptor.
|
|
// RpcFlags are always present to make the layout fixed.
|
|
|
|
typedef struct _NDR_DCOM_OI2_PROC_HEADER
|
|
{
|
|
unsigned char HandleType; // The old Oi header
|
|
INTERPRETER_FLAGS OldOiFlags; //
|
|
unsigned short RpcFlagsLow; //
|
|
unsigned short RpcFlagsHi; //
|
|
unsigned short ProcNum; //
|
|
unsigned short StackSize; //
|
|
// expl handle descr is never generated //
|
|
unsigned short ClientBufferSize; // The Oi2 header
|
|
unsigned short ServerBufferSize; //
|
|
INTERPRETER_OPT_FLAGS Oi2Flags; //
|
|
unsigned char NumberParams; //
|
|
} NDR_DCOM_OI2_PROC_HEADER, *PNDR_DCOM_OI2_PROC_HEADER;
|
|
|
|
// These are extended Oi2 interpreter proc flags.
|
|
// They have been introduced for NT5 beta2.
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char HasNewCorrDesc : 1; // 0x01
|
|
unsigned char ClientCorrCheck : 1; // 0x02
|
|
unsigned char ServerCorrCheck : 1; // 0x04
|
|
unsigned char HasNotify : 1; // 0x08
|
|
unsigned char HasNotify2 : 1; // 0x10
|
|
unsigned char Unused : 3;
|
|
} INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
|
|
|
|
// This is the layout of the proc header extensions introduced for denial of
|
|
// attacks for NT5 beta2, MIDL version 3.3.129.
|
|
// The extensions would be announced by the HasExtensions Oi2 flag and would
|
|
// follow directly after the ParameterCount field of Oi2 header.
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char Size; // size as the extension version
|
|
INTERPRETER_OPT_FLAGS2 Flags2;
|
|
unsigned short ClientCorrHint;
|
|
unsigned short ServerCorrHint;
|
|
unsigned short NotifyIndex;
|
|
} NDR_PROC_HEADER_EXTS, *PNDR_PROC_HEADER_EXTS;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char Size; // size as the extension version
|
|
INTERPRETER_OPT_FLAGS2 Flags2;
|
|
unsigned short ClientCorrHint;
|
|
unsigned short ServerCorrHint;
|
|
unsigned short NotifyIndex;
|
|
unsigned short FloatArgMask;
|
|
} NDR_PROC_HEADER_EXTS64, *PNDR_PROC_HEADER_EXTS64;
|
|
|
|
|
|
// Context handle flags
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char CannotBeNull : 1; // 0x01
|
|
unsigned char Serialize : 1; // 0x02
|
|
unsigned char NoSerialize : 1; // 0x04
|
|
unsigned char IsStrict : 1; // 0x08
|
|
unsigned char IsReturn : 1; // 0x10
|
|
unsigned char IsOut : 1; // 0x20
|
|
unsigned char IsIn : 1; // 0x40
|
|
unsigned char IsViaPtr : 1; // 0x80
|
|
|
|
} NDR_CONTEXT_HANDLE_FLAGS, *PNDR_CONTEXT_HANDLE_FLAGS;
|
|
|
|
// Type pickling flags
|
|
|
|
typedef struct _MIDL_TYPE_PICKLING_FLAGS
|
|
{
|
|
unsigned long Oicf : 1;
|
|
unsigned long HasNewCorrDesc : 1;
|
|
unsigned long Unused : 30;
|
|
} MIDL_TYPE_PICKLING_FLAGS, *PMIDL_TYPE_PICKLING_FLAGS;
|
|
|
|
#else
|
|
// now Mac defs: bits are flipped on Mac.
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char Unused : 3;
|
|
unsigned char HasNotify2 : 1; // 0x10
|
|
unsigned char HasNotify : 1; // 0x08
|
|
unsigned char ServerCorrCheck : 1; // 0x04
|
|
unsigned char ClientCorrCheck : 1; // 0x02
|
|
unsigned char HasNewCorrDec : 1; // 0x01
|
|
} INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char Unused : 1;
|
|
unsigned char UseNewInitRoutines : 1; // 0x40
|
|
unsigned char HasCommOrFault : 1; // 0x20
|
|
unsigned char IgnoreObjectException : 1; // 0x10
|
|
unsigned char HasRpcFlags : 1; // 0x08
|
|
unsigned char ObjectProc : 1; // 0x04
|
|
unsigned char RpcSsAllocUsed : 1; // 0x02
|
|
unsigned char FullPtrUsed : 1; // 0x01
|
|
} INTERPRETER_FLAGS, *PINTERPRETER_FLAGS;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char HasAsyncHandle : 1; // 0x80
|
|
unsigned char HasExtensions : 1; // 0x40
|
|
unsigned char Unused : 2;
|
|
unsigned char HasPipes : 1; // 0x08
|
|
unsigned char HasReturn : 1; // 0x04
|
|
unsigned char ClientMustSize : 1; // 0x02
|
|
unsigned char ServerMustSize : 1; // 0x01
|
|
} INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned short ServerAllocSize : 3; // 0xe000
|
|
unsigned short Unused : 2;
|
|
unsigned short SaveForAsyncFinish : 1; // 0x0400
|
|
unsigned short IsDontCallFreeInst : 1; // 0x0200
|
|
unsigned short IsSimpleRef : 1; // 0x0100
|
|
//
|
|
unsigned short IsByValue : 1; // 0x0080
|
|
unsigned short IsBasetype : 1; // 0x0040
|
|
unsigned short IsReturn : 1; // 0x0020
|
|
unsigned short IsOut : 1; // 0x0010
|
|
unsigned short IsIn : 1; // 0x0008
|
|
unsigned short IsPipe : 1; // 0x0004
|
|
unsigned short MustFree : 1; // 0x0002
|
|
unsigned short MustSize : 1; // 0x0001
|
|
} PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
|
|
|
|
#endif
|
|
|
|
#define MAX_INTERPRETER_OUT_SIZE 128
|
|
#define MAX_INTERPRETER_PARAM_OUT_SIZE 7 * 8
|
|
|
|
#define INTERPRETER_THUNK_PARAM_SIZE_THRESHOLD (sizeof(long) * 32)
|
|
|
|
#define INTERPRETER_PROC_STACK_FRAME_SIZE_THRESHOLD ( ( 64 * 1024 ) - 1 )
|
|
|
|
#define FC_NORMAL_CONFORMANCE (unsigned char) 0x00
|
|
#define FC_POINTER_CONFORMANCE (unsigned char) 0x10
|
|
#define FC_TOP_LEVEL_CONFORMANCE (unsigned char) 0x20
|
|
#define FC_CONSTANT_CONFORMANCE (unsigned char) 0x40
|
|
#define FC_TOP_LEVEL_MULTID_CONFORMANCE (unsigned char) 0x80
|
|
|
|
#define FC_NORMAL_VARIANCE FC_NORMAL_CONFORMANCE
|
|
#define FC_POINTER_VARIANCE FC_POINTER_CONFORMANCE
|
|
#define FC_TOP_LEVEL_VARIANCE FC_TOP_LEVEL_CONFORMANCE
|
|
#define FC_CONSTANT_VARIANCE FC_CONSTANT_CONFORMANCE
|
|
#define FC_TOP_LEVEL_MULTID_VARIANCE FC_TOP_LEVEL_MULTID_CONFORMANCE
|
|
|
|
#define FC_NORMAL_SWITCH_IS FC_NORMAL_CONFORMANCE
|
|
#define FC_POINTER_SWITCH_IS FC_POINTER_CONFORMANCE
|
|
#define FC_TOP_LEVEL_SWITCH_IS FC_TOP_LEVEL_CONFORMANCE
|
|
#define FC_CONSTANT_SWITCH_IS FC_CONSTANT_CONFORMANCE
|
|
|
|
typedef struct _NDR_CORRELATION_FLAGS
|
|
{
|
|
unsigned char Early : 1;
|
|
unsigned char Split : 1;
|
|
unsigned char IsIidIs : 1;
|
|
unsigned char DontCheck: 1;
|
|
unsigned char Unused : 4;
|
|
} NDR_CORRELATION_FLAGS;
|
|
|
|
#define FC_EARLY_CORRELATION (unsigned char) 0x01
|
|
#define FC_SPLIT_CORRELATION (unsigned char) 0x02
|
|
#define FC_IID_CORRELATION (unsigned char) 0x04
|
|
#define FC_NOCHECK_CORRELATION (unsigned char) 0x08
|
|
|
|
//
|
|
// Pointer attributes.
|
|
//
|
|
#define FC_ALLOCATE_ALL_NODES 0x01
|
|
#define FC_DONT_FREE 0x02
|
|
#define FC_ALLOCED_ON_STACK 0x04
|
|
#define FC_SIMPLE_POINTER 0x08
|
|
#define FC_POINTER_DEREF 0x10
|
|
|
|
#define LOW_NIBBLE(Byte) (((unsigned char)Byte) & 0x0f)
|
|
#define HIGH_NIBBLE(Byte) (((unsigned char)Byte) >> 4)
|
|
|
|
#define INVALID_RUNDOWN_ROUTINE_INDEX 255
|
|
|
|
//
|
|
// internal bits to represent operation bits
|
|
//
|
|
|
|
#define OPERATION_MAYBE 0x0001
|
|
#define OPERATION_BROADCAST 0x0002
|
|
#define OPERATION_IDEMPOTENT 0x0004
|
|
#define OPERATION_INPUT_SYNC 0x0008
|
|
#define OPERATION_ASYNC 0x0010
|
|
#define OPERATION_MESSAGE 0x0020
|
|
|
|
//
|
|
// Transmit as / Represent as flag field flags.
|
|
//
|
|
// Lower nibble of this byte has an alignment of the transmitted type.
|
|
// Upper nibble keeps flags.
|
|
//
|
|
|
|
#define PRESENTED_TYPE_NO_FLAG_SET 0x00
|
|
#define PRESENTED_TYPE_IS_ARRAY 0x10
|
|
#define PRESENTED_TYPE_ALIGN_4 0x20
|
|
#define PRESENTED_TYPE_ALIGN_8 0x40
|
|
|
|
//
|
|
// User marshal flags
|
|
|
|
#define USER_MARSHAL_POINTER 0xc0 /* unique or ref */
|
|
|
|
#define USER_MARSHAL_UNIQUE 0x80
|
|
#define USER_MARSHAL_REF 0x40
|
|
#define USER_MARSHAL_IID 0x20 /* user marshal has optional info */
|
|
|
|
|
|
//
|
|
// Handle flags.
|
|
//
|
|
// Lower nibble of this byte may have a generic handle size.
|
|
// Upper nibble keeps flags. ALL FLAGS ARE NOW USED.
|
|
//
|
|
|
|
#define HANDLE_PARAM_IS_VIA_PTR 0x80
|
|
#define HANDLE_PARAM_IS_IN 0x40
|
|
#define HANDLE_PARAM_IS_OUT 0x20
|
|
#define HANDLE_PARAM_IS_RETURN 0x10
|
|
|
|
// Lower nibble of this byte may have a generic handle size.
|
|
// For context handles, it is used for the following flags.
|
|
|
|
#define NDR_STRICT_CONTEXT_HANDLE 0x08 /* NT5 */
|
|
#define NDR_CONTEXT_HANDLE_NOSERIALIZE 0x04 /* NT5 */
|
|
#define NDR_CONTEXT_HANDLE_SERIALIZE 0x02 /* NT5 */
|
|
#define NDR_CONTEXT_HANDLE_CANNOT_BE_NULL 0x01 /* NT5 */
|
|
|
|
// These are old interpreter flags.
|
|
// Oi and pickling per procedure flags.
|
|
//
|
|
|
|
#define Oi_FULL_PTR_USED 0x01
|
|
#define Oi_RPCSS_ALLOC_USED 0x02
|
|
#define Oi_OBJECT_PROC 0x04
|
|
#define Oi_HAS_RPCFLAGS 0x08
|
|
|
|
//
|
|
// Bits 5, 6 and 7 are overloaded for use by both pickling and
|
|
// non-pickling conditions.
|
|
//
|
|
// Bit 5 (0x20) is overloaded for object interfaces to distinguish
|
|
// between invocations of V1 and V2 intepreters for proxies and stubs.
|
|
// Note that for backward compatibility the bit is actually set
|
|
// for V1 as it is checked only when NDR version is 2 or later.
|
|
//
|
|
|
|
#define Oi_IGNORE_OBJECT_EXCEPTION_HANDLING 0x10
|
|
|
|
#define ENCODE_IS_USED 0x10
|
|
#define DECODE_IS_USED 0x20
|
|
#define PICKLING_HAS_COMM_OR_FAULT 0x40 // In -Oicf mode only
|
|
|
|
#define Oi_HAS_COMM_OR_FAULT 0x20
|
|
#define Oi_OBJ_USE_V2_INTERPRETER 0x20
|
|
|
|
#define Oi_USE_NEW_INIT_ROUTINES 0x40
|
|
#define Oi_UNUSED 0x80
|
|
|
|
// The new -Oicf interpreter flags
|
|
|
|
#define Oif_HAS_ASYNC_UUID 0x20
|
|
|
|
// Extended new interpreter flags
|
|
|
|
|
|
//
|
|
// Union arm description types.
|
|
//
|
|
#define UNION_CONSECUTIVE_ARMS 1
|
|
#define UNION_SMALL_ARMS 2
|
|
#define UNION_LARGE_ARMS 3
|
|
|
|
// Pipe flags
|
|
#define FC_BIG_PIPE 0x80
|
|
#define FC_OBJECT_PIPE 0x40
|
|
#define FC_PIPE_HAS_RANGE 0x20
|
|
|
|
// Black Hole flags
|
|
#define BLKHOLE_BASETYPE 0x01
|
|
#define BLKHOLE_FUNCTION 0x02
|
|
#define BLKHOLE_XURTYPE 0x04 // Xmit Usermarshal or Represent-as TYPE
|
|
//
|
|
// Union ex. magic union byte, now short
|
|
//
|
|
#define MAGIC_UNION_SHORT ((unsigned short) 0x8000)
|
|
|
|
#define NDR_DEFAULT_CORR_CACHE_SIZE 400
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|