rpcndr.h 24.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * Copyright (C) 2000 Francois Gouget
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 18
 */

19
#ifndef __RPCNDR_H_VERSION__
20
#define __RPCNDR_H_VERSION__ ( 500 )
Ove Kaaven's avatar
Ove Kaaven committed
21 22
#endif

23 24 25
#ifndef __WINE_RPCNDR_H
#define __WINE_RPCNDR_H

26
#include <basetsd.h>
27
#include <rpcsal.h>
28

Eric Pouech's avatar
Eric Pouech committed
29 30 31 32
#ifdef __cplusplus
extern "C" {
#endif

33 34 35 36 37 38 39
#undef CONST_VTBL
#ifdef CONST_VTABLE
# define CONST_VTBL const
#else
# define CONST_VTBL
#endif

40
#ifndef EXTERN_GUID
41 42 43 44 45 46 47
#ifdef __cplusplus
#define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
        EXTERN_C const GUID DECLSPEC_SELECTANY name DECLSPEC_HIDDEN; \
        EXTERN_C const GUID DECLSPEC_SELECTANY name = \
	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
#else
#define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
48
        EXTERN_C const GUID name
49
#endif
50
#endif
51

52 53 54 55 56 57 58 59 60 61 62 63
#define NDR_CHAR_REP_MASK             ((ULONG)0x000f)
#define NDR_INT_REP_MASK              ((ULONG)0x00f0)
#define NDR_FLOAT_REP_MASK            ((ULONG)0xff00)
#define NDR_IEEE_FLOAT                ((ULONG)0x0000)
#define NDR_VAX_FLOAT                 ((ULONG)0x0100)
#define NDR_IBM_FLOAT                 ((ULONG)0x0300)
#define NDR_ASCII_CHAR                ((ULONG)0x0000)
#define NDR_EBCDIC_CHAR               ((ULONG)0x0001)
#define NDR_LITTLE_ENDIAN             ((ULONG)0x0010)
#define NDR_BIG_ENDIAN                ((ULONG)0x0000)
#define NDR_LOCAL_DATA_REPRESENTATION NDR_LITTLE_ENDIAN
#define NDR_LOCAL_ENDIAN              NDR_LITTLE_ENDIAN
64

65
#define TARGET_IS_NT50_OR_LATER 1
Ove Kaaven's avatar
Ove Kaaven committed
66 67
#define TARGET_IS_NT40_OR_LATER 1
#define TARGET_IS_NT351_OR_WIN95_OR_LATER 1
68

69
#define small char
70
typedef unsigned char byte;
71 72
typedef INT64 hyper;
typedef UINT64 MIDL_uhyper;
73
typedef unsigned char boolean;
Ove Kaaven's avatar
Ove Kaaven committed
74

Ove Kaaven's avatar
Ove Kaaven committed
75
#define __RPC_CALLEE WINAPI
76
#define RPC_VAR_ENTRY WINAPIV
77
#define NDR_SHAREABLE static
Ove Kaaven's avatar
Ove Kaaven committed
78

Ove Kaaven's avatar
Ove Kaaven committed
79 80 81
#define MIDL_ascii_strlen(s) strlen(s)
#define MIDL_ascii_strcpy(d,s) strcpy(d,s)
#define MIDL_memset(d,v,n) memset(d,v,n)
82 83
#define midl_user_free MIDL_user_free
#define midl_user_allocate MIDL_user_allocate
Ove Kaaven's avatar
Ove Kaaven committed
84

85 86 87
void * __RPC_USER MIDL_user_allocate(SIZE_T);
void __RPC_USER MIDL_user_free(void *);

Ove Kaaven's avatar
Ove Kaaven committed
88 89 90 91
#define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8)
#define NdrFcLong(s)  (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), \
  (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24)

92 93 94 95 96 97
#define RPC_BAD_STUB_DATA_EXCEPTION_FILTER  \
  ((RpcExceptionCode() == STATUS_ACCESS_VIOLATION) || \
   (RpcExceptionCode() == STATUS_DATATYPE_MISALIGNMENT) || \
   (RpcExceptionCode() == RPC_X_BAD_STUB_DATA) || \
   (RpcExceptionCode() == RPC_S_INVALID_BOUND))

98
typedef struct _NDR_SCONTEXT
Ove Kaaven's avatar
Ove Kaaven committed
99 100 101 102 103 104 105 106
{
  void *pad[2];
  void *userContext;
} *NDR_SCONTEXT;

#define NDRSContextValue(hContext) (&(hContext)->userContext)
#define cbNDRContext 20

Patrik Stridvall's avatar
Patrik Stridvall committed
107 108
typedef void (__RPC_USER *NDR_RUNDOWN)(void *context);
typedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void);
109
typedef void (__RPC_USER *NDR_NOTIFY2_ROUTINE)(boolean flag);
110 111 112 113

#define DECLSPEC_UUID(x)
#define MIDL_INTERFACE(x)   struct

Ove Kaaven's avatar
Ove Kaaven committed
114 115 116
struct _MIDL_STUB_MESSAGE;
struct _MIDL_STUB_DESC;
struct _FULL_PTR_XLAT_TABLES;
117 118
struct NDR_ALLOC_ALL_NODES_CONTEXT;
struct NDR_POINTER_QUEUE_STATE;
Ove Kaaven's avatar
Ove Kaaven committed
119

120
typedef unsigned char *RPC_BUFPTR;
121
typedef ULONG RPC_LENGTH;
Patrik Stridvall's avatar
Patrik Stridvall committed
122
typedef void (__RPC_USER *EXPR_EVAL)(struct _MIDL_STUB_MESSAGE *);
Ove Kaaven's avatar
Ove Kaaven committed
123 124 125 126
typedef const unsigned char *PFORMAT_STRING;

typedef struct
{
127 128 129 130 131 132
  LONG Dimension;
  ULONG *BufferConformanceMark;
  ULONG *BufferVarianceMark;
  ULONG *MaxCountArray;
  ULONG *OffsetArray;
  ULONG *ActualCountArray;
Ove Kaaven's avatar
Ove Kaaven committed
133 134
} ARRAY_INFO, *PARRAY_INFO;

135 136
typedef struct
{
137 138
  ULONG WireCodeset;
  ULONG DesiredReceivingCodeset;
139 140 141
  void *CSArrayInfo;
} CS_STUB_INFO;

Ove Kaaven's avatar
Ove Kaaven committed
142 143 144 145 146 147 148 149 150 151 152 153
typedef struct _NDR_PIPE_DESC *PNDR_PIPE_DESC;
typedef struct _NDR_PIPE_MESSAGE *PNDR_PIPE_MESSAGE;
typedef struct _NDR_ASYNC_MESSAGE *PNDR_ASYNC_MESSAGE;
typedef struct _NDR_CORRELATION_INFO *PNDR_CORRELATION_INFO;

typedef struct _MIDL_STUB_MESSAGE
{
  PRPC_MESSAGE RpcMsg;
  unsigned char *Buffer;
  unsigned char *BufferStart;
  unsigned char *BufferEnd;
  unsigned char *BufferMark;
154 155
  ULONG BufferLength;
  ULONG MemorySize;
Ove Kaaven's avatar
Ove Kaaven committed
156
  unsigned char *Memory;
157 158 159
  unsigned char IsClient;
  unsigned char Pad;
  unsigned short uFlags2;
Ove Kaaven's avatar
Ove Kaaven committed
160
  int ReuseBuffer;
161 162
  struct NDR_ALLOC_ALL_NODES_CONTEXT *pAllocAllNodesContext;
  struct NDR_POINTER_QUEUE_STATE *pPointerQueueState;
Ove Kaaven's avatar
Ove Kaaven committed
163 164
  int IgnoreEmbeddedPointers;
  unsigned char *PointerBufferMark;
165
  unsigned char CorrDespIncrement;
166 167
  unsigned char uFlags;
  unsigned short UniquePtrCount;
Ove Kaaven's avatar
Ove Kaaven committed
168
  ULONG_PTR MaxCount;
169 170
  ULONG Offset;
  ULONG ActualCount;
171
  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
Patrik Stridvall's avatar
Patrik Stridvall committed
172
  void (__RPC_API *pfnFree)(void *);
Ove Kaaven's avatar
Ove Kaaven committed
173 174 175 176 177 178
  unsigned char *StackTop;
  unsigned char *pPresentedType;
  unsigned char *pTransmitType;
  handle_t SavedHandle;
  const struct _MIDL_STUB_DESC *StubDesc;
  struct _FULL_PTR_XLAT_TABLES *FullPtrXlatTables;
179 180
  ULONG FullPtrRefId;
  ULONG PointerLength;
181 182 183 184 185 186 187 188 189 190 191 192 193
  unsigned int fInDontFree:1;
  unsigned int fDontCallFreeInst:1;
  unsigned int fInOnlyParam:1;
  unsigned int fHasReturn:1;
  unsigned int fHasExtensions:1;
  unsigned int fHasNewCorrDesc:1;
  unsigned int fIsIn:1;
  unsigned int fIsOut:1;
  unsigned int fIsOicf:1;
  unsigned int fBufferValid:1;
  unsigned int fHasMemoryValidateCallback:1;
  unsigned int fInFree:1;
  unsigned int fNeedMCCP:1;
194
  int fUnused:3;
195
  int fUnused2:16;
196
  DWORD dwDestContext;
Ove Kaaven's avatar
Ove Kaaven committed
197 198
  void *pvDestContext;
  NDR_SCONTEXT *SavedContextHandles;
199
  LONG ParamNumber;
Ove Kaaven's avatar
Ove Kaaven committed
200 201
  struct IRpcChannelBuffer *pRpcChannelBuffer;
  PARRAY_INFO pArrayInfo;
202 203 204
  ULONG *SizePtrCountArray;
  ULONG *SizePtrOffsetArray;
  ULONG *SizePtrLengthArray;
Ove Kaaven's avatar
Ove Kaaven committed
205
  void *pArgQueue;
206
  DWORD dwStubPhase;
207
  void *LowStackMark;
Ove Kaaven's avatar
Ove Kaaven committed
208 209 210 211
  PNDR_ASYNC_MESSAGE pAsyncMsg;
  PNDR_CORRELATION_INFO pCorrInfo;
  unsigned char *pCorrMemory;
  void *pMemoryList;
212 213 214
  CS_STUB_INFO *pCSInfo;
  unsigned char *ConformanceMark;
  unsigned char *VarianceMark;
215
  INT_PTR Unused; /* BackingStoreLowMark on IA64 */
216
  struct _NDR_PROC_CONTEXT *pContext;
217 218
  void* ContextHandleHash;
  void* pUserMarshalList;
219 220 221
  INT_PTR Reserved51_3;
  INT_PTR Reserved51_4;
  INT_PTR Reserved51_5;
Ove Kaaven's avatar
Ove Kaaven committed
222 223
} MIDL_STUB_MESSAGE, *PMIDL_STUB_MESSAGE;

224 225
typedef void * (__RPC_API * GENERIC_BINDING_ROUTINE)(void *);
typedef void (__RPC_API * GENERIC_UNBIND_ROUTINE)(void *, unsigned char *);
Ove Kaaven's avatar
Ove Kaaven committed
226

227 228 229 230 231 232 233 234 235 236 237 238 239
typedef struct _GENERIC_BINDING_ROUTINE_PAIR
{
  GENERIC_BINDING_ROUTINE pfnBind;
  GENERIC_UNBIND_ROUTINE pfnUnbind;
} GENERIC_BINDING_ROUTINE_PAIR, *PGENERIC_BINDING_ROUTINE_PAIR;

typedef struct __GENERIC_BINDING_INFO
{
  void *pObj;
  unsigned int Size;
  GENERIC_BINDING_ROUTINE pfnBind;
  GENERIC_UNBIND_ROUTINE pfnUnbind;
} GENERIC_BINDING_INFO, *PGENERIC_BINDING_INFO;
Ove Kaaven's avatar
Ove Kaaven committed
240

241 242 243 244 245 246 247 248 249
typedef void (__RPC_USER *XMIT_HELPER_ROUTINE)(PMIDL_STUB_MESSAGE);

typedef struct _XMIT_ROUTINE_QUINTUPLE
{
  XMIT_HELPER_ROUTINE pfnTranslateToXmit;
  XMIT_HELPER_ROUTINE pfnTranslateFromXmit;
  XMIT_HELPER_ROUTINE pfnFreeXmit;
  XMIT_HELPER_ROUTINE pfnFreeInst;
} XMIT_ROUTINE_QUINTUPLE, *PXMIT_ROUTINE_QUINTUPLE;
Ove Kaaven's avatar
Ove Kaaven committed
250

251 252 253 254
typedef ULONG (__RPC_USER *USER_MARSHAL_SIZING_ROUTINE)(ULONG *, ULONG, void *);
typedef unsigned char * (__RPC_USER *USER_MARSHAL_MARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *);
typedef unsigned char * (__RPC_USER *USER_MARSHAL_UNMARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *);
typedef void (__RPC_USER *USER_MARSHAL_FREEING_ROUTINE)(ULONG *, void *);
Ove Kaaven's avatar
Ove Kaaven committed
255 256 257 258 259 260 261 262

typedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE
{
  USER_MARSHAL_SIZING_ROUTINE pfnBufferSize;
  USER_MARSHAL_MARSHALLING_ROUTINE pfnMarshall;
  USER_MARSHAL_UNMARSHALLING_ROUTINE pfnUnmarshall;
  USER_MARSHAL_FREEING_ROUTINE pfnFree;
} USER_MARSHAL_ROUTINE_QUADRUPLE;
Ove Kaaven's avatar
Ove Kaaven committed
263

264 265
/* 'USRC' */
#define USER_MARSHAL_CB_SIGNATURE \
266 267
	( ( (DWORD)'U' << 24 ) | ( (DWORD)'S' << 16 ) | \
	  ( (DWORD)'R' << 8  ) | ( (DWORD)'C'       ) )
268 269 270 271 272 273 274 275 276 277 278

typedef enum
{
    USER_MARSHAL_CB_BUFFER_SIZE,
    USER_MARSHAL_CB_MARSHALL,
    USER_MARSHAL_CB_UNMARSHALL,
    USER_MARSHAL_CB_FREE
} USER_MARSHAL_CB_TYPE;

typedef struct _USER_MARSHAL_CB
{
279
    ULONG Flags;
280 281
    PMIDL_STUB_MESSAGE pStubMsg;
    PFORMAT_STRING pReserve;
282
    ULONG Signature;
283 284 285 286 287 288 289 290 291 292 293 294
    USER_MARSHAL_CB_TYPE CBType;
    PFORMAT_STRING pFormat;
    PFORMAT_STRING pTypeFormat;
} USER_MARSHAL_CB;

#define USER_CALL_CTXT_MASK(f) ((f) & 0x00ff)
#define USER_CALL_AUX_MASK(f) ((f) & 0xff00)
#define GET_USER_DATA_REP(f) HIWORD(f)

#define USER_CALL_IS_ASYNC 0x0100
#define USER_CALL_NEW_CORRELATION_DESC 0x0200

295 296
typedef struct _MALLOC_FREE_STRUCT
{
297
  void * (__WINE_ALLOC_SIZE(1) __RPC_USER *pfnAllocate)(SIZE_T);
298 299
  void   (__RPC_USER *pfnFree)(void *);
} MALLOC_FREE_STRUCT;
Ove Kaaven's avatar
Ove Kaaven committed
300

301 302 303 304 305
typedef struct _COMM_FAULT_OFFSETS
{
  short CommOffset;
  short FaultOffset;
} COMM_FAULT_OFFSETS;
Ove Kaaven's avatar
Ove Kaaven committed
306 307 308 309

typedef struct _MIDL_STUB_DESC
{
  void *RpcInterfaceInformation;
310
  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
Patrik Stridvall's avatar
Patrik Stridvall committed
311
  void (__RPC_API *pfnFree)(void *);
Ove Kaaven's avatar
Ove Kaaven committed
312 313 314 315 316 317 318 319 320 321 322
  union {
    handle_t *pAutoHandle;
    handle_t *pPrimitiveHandle;
    PGENERIC_BINDING_INFO pGenericBindingInfo;
  } IMPLICIT_HANDLE_INFO;
  const NDR_RUNDOWN *apfnNdrRundownRoutines;
  const GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs;
  const EXPR_EVAL *apfnExprEval;
  const XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple;
  const unsigned char *pFormatTypes;
  int fCheckBounds;
323
  ULONG Version;
Ove Kaaven's avatar
Ove Kaaven committed
324
  MALLOC_FREE_STRUCT *pMallocFreeStruct;
325
  LONG MIDLVersion;
Ove Kaaven's avatar
Ove Kaaven committed
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345
  const COMM_FAULT_OFFSETS *CommFaultOffsets;
  const USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple;
  const NDR_NOTIFY_ROUTINE *NotifyRoutineTable;
  ULONG_PTR mFlags;
  ULONG_PTR Reserved3;
  ULONG_PTR Reserved4;
  ULONG_PTR Reserved5;
} MIDL_STUB_DESC;
typedef const MIDL_STUB_DESC *PMIDL_STUB_DESC;

typedef struct _MIDL_FORMAT_STRING
{
  short Pad;
#if defined(__GNUC__)
  unsigned char Format[0];
#else
  unsigned char Format[1];
#endif
} MIDL_FORMAT_STRING;

346 347 348 349 350 351 352 353 354 355 356 357
typedef struct _MIDL_SYNTAX_INFO
{
  RPC_SYNTAX_IDENTIFIER TransferSyntax;
  RPC_DISPATCH_TABLE* DispatchTable;
  PFORMAT_STRING ProcString;
  const unsigned short* FmtStringOffset;
  PFORMAT_STRING TypeString;
  const void* aUserMarshalQuadruple;
  ULONG_PTR pReserved1;
  ULONG_PTR pReserved2;
} MIDL_SYNTAX_INFO, *PMIDL_SYNTAX_INFO;

Patrik Stridvall's avatar
Patrik Stridvall committed
358
typedef void (__RPC_API *STUB_THUNK)( PMIDL_STUB_MESSAGE );
Ove Kaaven's avatar
Ove Kaaven committed
359

360 361 362
#ifdef WINE_STRICT_PROTOTYPES
typedef LONG (__RPC_API *SERVER_ROUTINE)(void);
#else
363
typedef LONG (__RPC_API *SERVER_ROUTINE)();
364
#endif
Ove Kaaven's avatar
Ove Kaaven committed
365 366 367 368 369 370 371 372

typedef struct _MIDL_SERVER_INFO_
{
  PMIDL_STUB_DESC pStubDesc;
  const SERVER_ROUTINE *DispatchTable;
  PFORMAT_STRING ProcString;
  const unsigned short *FmtStringOffset;
  const STUB_THUNK *ThunkTable;
373 374 375
  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
  ULONG_PTR nCount;
  PMIDL_SYNTAX_INFO pSyntaxInfo;
Ove Kaaven's avatar
Ove Kaaven committed
376 377
} MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;

Ove Kaaven's avatar
Ove Kaaven committed
378 379 380 381 382
typedef struct _MIDL_STUBLESS_PROXY_INFO
{
  PMIDL_STUB_DESC pStubDesc;
  PFORMAT_STRING ProcFormatString;
  const unsigned short *FormatStringOffset;
383 384 385
  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
  ULONG_PTR nCount;
  PMIDL_SYNTAX_INFO pSyntaxInfo;
Ove Kaaven's avatar
Ove Kaaven committed
386 387
} MIDL_STUBLESS_PROXY_INFO, *PMIDL_STUBLESS_PROXY_INFO;

388

389
#if defined(__i386__) && !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__CYGWIN__)
390 391 392
/* Calling convention for returning structures/unions is different between Windows and gcc on i386 */
typedef LONG_PTR CLIENT_CALL_RETURN;
#else
Ove Kaaven's avatar
Ove Kaaven committed
393 394 395 396 397
typedef union _CLIENT_CALL_RETURN
{
  void *Pointer;
  LONG_PTR Simple;
} CLIENT_CALL_RETURN;
398
#endif
Ove Kaaven's avatar
Ove Kaaven committed
399

Ove Kaaven's avatar
Ove Kaaven committed
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414
typedef enum {
  STUB_UNMARSHAL,
  STUB_CALL_SERVER,
  STUB_MARSHAL,
  STUB_CALL_SERVER_NO_HRESULT
} STUB_PHASE;

typedef enum {
  PROXY_CALCSIZE,
  PROXY_GETBUFFER,
  PROXY_MARSHAL,
  PROXY_SENDRECEIVE,
  PROXY_UNMARSHAL
} PROXY_PHASE;

415 416 417 418 419 420 421 422
typedef enum {
  XLAT_SERVER = 1,
  XLAT_CLIENT
} XLAT_SIDE;

typedef struct _FULL_PTR_TO_REFID_ELEMENT {
  struct _FULL_PTR_TO_REFID_ELEMENT *Next;
  void *Pointer;
423
  ULONG RefId;
424 425 426 427 428 429 430 431
  unsigned char State;
} FULL_PTR_TO_REFID_ELEMENT, *PFULL_PTR_TO_REFID_ELEMENT;

/* Full pointer translation tables */
typedef struct _FULL_PTR_XLAT_TABLES {
  struct {
    void **XlatTable;
    unsigned char *StateTable;
432
    ULONG NumberOfEntries;
433 434 435 436
  } RefIdToPointer;

  struct {
    PFULL_PTR_TO_REFID_ELEMENT *XlatTable;
437 438
    ULONG NumberOfBuckets;
    ULONG HashMask;
439 440
  } PointerToRefId;

441
  ULONG                   NextRefId;
442 443 444
  XLAT_SIDE               XlatSide;
} FULL_PTR_XLAT_TABLES,  *PFULL_PTR_XLAT_TABLES;

Ove Kaaven's avatar
Ove Kaaven committed
445 446
struct IRpcStubBuffer;

447
#ifndef _ERROR_STATUS_T_DEFINED
448
typedef ULONG error_status_t;
449 450 451
#define _ERROR_STATUS_T_DEFINED
#endif

452 453 454
typedef void  * NDR_CCONTEXT;

typedef struct _SCONTEXT_QUEUE {
455
  ULONG NumberOfObjects;
456 457 458
  NDR_SCONTEXT *ArrayOfObjects;
} SCONTEXT_QUEUE, *PSCONTEXT_QUEUE;

459 460 461 462
typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1
{
    void *Buffer;
    ULONG BufferSize;
463
    void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
464 465 466 467 468 469 470 471 472 473 474 475 476 477
    void (__RPC_API *pfnFree)(void *);
    struct IRpcChannelBuffer *pRpcChannelBuffer;
    ULONG_PTR Reserved[5];
} NDR_USER_MARSHAL_INFO_LEVEL1;

typedef struct _NDR_USER_MARSHAL_INFO
{
    ULONG InformationLevel;
    union
    {
        NDR_USER_MARSHAL_INFO_LEVEL1 Level1;
    } DUMMYUNIONNAME1;
} NDR_USER_MARSHAL_INFO;

478 479
/* Context Handles */

480
RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
481
  NDRCContextBinding( NDR_CCONTEXT CContext );
482 483

RPCRTAPI void RPC_ENTRY
484
  NDRCContextMarshall( NDR_CCONTEXT CContext, void *pBuff );
485 486

RPCRTAPI void RPC_ENTRY
487
  NDRCContextUnmarshall( NDR_CCONTEXT *pCContext, RPC_BINDING_HANDLE hBinding,
488
                         void *pBuff, ULONG DataRepresentation );
489 490

RPCRTAPI void RPC_ENTRY
491
  NDRSContextMarshall( NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn );
492 493

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
494
  NDRSContextUnmarshall( void *pBuff, ULONG DataRepresentation );
495 496

RPCRTAPI void RPC_ENTRY
497 498
  NDRSContextMarshallEx( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
                         void *pBuff, NDR_RUNDOWN userRunDownIn );
499 500

RPCRTAPI void RPC_ENTRY
501 502
  NDRSContextMarshall2( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
                        void *pBuff, NDR_RUNDOWN userRunDownIn, void * CtxGuard,
503
                        ULONG Flags );
504 505

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
506
  NDRSContextUnmarshallEx( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
507
                           ULONG DataRepresentation );
508 509

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
510
  NDRSContextUnmarshall2( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
511 512
                          ULONG DataRepresentation, void *CtxGuard,
                          ULONG Flags );
513

514 515 516 517
RPCRTAPI void RPC_ENTRY
  NdrClientContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck );

RPCRTAPI void RPC_ENTRY
518 519
  NdrClientContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT* pContextHandle,
                              RPC_BINDING_HANDLE BindHandle );
520 521

RPCRTAPI void RPC_ENTRY
522
  NdrServerContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine );
523 524

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
525
  NdrServerContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg );
526 527 528 529 530

RPCRTAPI void RPC_ENTRY
  NdrContextHandleSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
531
  NdrContextHandleInitialize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
532 533 534 535 536 537

RPCRTAPI void RPC_ENTRY
  NdrServerContextNewMarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle,
                               NDR_RUNDOWN RundownRoutine, PFORMAT_STRING pFormat );

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
538
  NdrServerContextNewUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
539

540 541 542
RPCRTAPI RPC_STATUS RPC_ENTRY
  RpcSmDestroyClientContext( void **ContextHandle );

543
RPCRTAPI void RPC_ENTRY
544
  RpcSsDestroyClientContext( void **ContextHandle );
545

Ove Kaaven's avatar
Ove Kaaven committed
546 547 548 549 550
RPCRTAPI void RPC_ENTRY
  NdrSimpleTypeMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );
RPCRTAPI void RPC_ENTRY
  NdrSimpleTypeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );

551 552 553 554 555 556 557 558 559 560 561 562
RPCRTAPI unsigned char* RPC_ENTRY
  NdrByteCountPointerMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
RPCRTAPI unsigned char* RPC_ENTRY
  NdrByteCountPointerUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc );
RPCRTAPI void RPC_ENTRY
  NdrByteCountPointerBufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
RPCRTAPI void RPC_ENTRY
  NdrByteCountPointerFree( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );

RPCRTAPI unsigned char* RPC_ENTRY
  NdrRangeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc );

Ove Kaaven's avatar
Ove Kaaven committed
563
/* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */
564
#define SIMPLE_TYPE_MARSHAL(type) \
Ove Kaaven's avatar
Ove Kaaven committed
565 566 567 568 569 570
RPCRTAPI unsigned char* RPC_ENTRY \
  Ndr##type##Marshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
RPCRTAPI unsigned char* RPC_ENTRY \
  Ndr##type##Unmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ); \
RPCRTAPI void RPC_ENTRY \
  Ndr##type##BufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
571
RPCRTAPI ULONG RPC_ENTRY \
572 573 574 575
  Ndr##type##MemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );

#define TYPE_MARSHAL(type) \
  SIMPLE_TYPE_MARSHAL(type) \
Ove Kaaven's avatar
Ove Kaaven committed
576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594
RPCRTAPI void RPC_ENTRY \
  Ndr##type##Free( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );

TYPE_MARSHAL(Pointer)
TYPE_MARSHAL(SimpleStruct)
TYPE_MARSHAL(ConformantStruct)
TYPE_MARSHAL(ConformantVaryingStruct)
TYPE_MARSHAL(ComplexStruct)
TYPE_MARSHAL(FixedArray)
TYPE_MARSHAL(ConformantArray)
TYPE_MARSHAL(ConformantVaryingArray)
TYPE_MARSHAL(VaryingArray)
TYPE_MARSHAL(ComplexArray)
TYPE_MARSHAL(EncapsulatedUnion)
TYPE_MARSHAL(NonEncapsulatedUnion)
TYPE_MARSHAL(XmitOrRepAs)
TYPE_MARSHAL(UserMarshal)
TYPE_MARSHAL(InterfacePointer)

595 596 597
SIMPLE_TYPE_MARSHAL(ConformantString)
SIMPLE_TYPE_MARSHAL(NonConformantString)

Ove Kaaven's avatar
Ove Kaaven committed
598
#undef TYPE_MARSHAL
599
#undef SIMPLE_TYPE_MARSHAL
Ove Kaaven's avatar
Ove Kaaven committed
600

601 602 603 604 605 606 607
RPCRTAPI void RPC_ENTRY
  NdrCorrelationInitialize( PMIDL_STUB_MESSAGE pStubMsg, void *pMemory, ULONG CacheSize, ULONG flags );
RPCRTAPI void RPC_ENTRY
  NdrCorrelationPass( PMIDL_STUB_MESSAGE pStubMsg );
RPCRTAPI void RPC_ENTRY
  NdrCorrelationFree( PMIDL_STUB_MESSAGE pStubMsg );

Ove Kaaven's avatar
Ove Kaaven committed
608
RPCRTAPI void RPC_ENTRY
609
  NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, LONG NumberParams );
Ove Kaaven's avatar
Ove Kaaven committed
610 611 612
RPCRTAPI void RPC_ENTRY
  NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );

613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628
#define USER_MARSHAL_FC_BYTE    1
#define USER_MARSHAL_FC_CHAR    2
#define USER_MARSHAL_FC_SMALL   3
#define USER_MARSHAL_FC_USMALL  4
#define USER_MARSHAL_FC_WCHAR   5
#define USER_MARSHAL_FC_SHORT   6
#define USER_MARSHAL_FC_USHORT  7
#define USER_MARSHAL_FC_LONG    8
#define USER_MARSHAL_FC_ULONG   9
#define USER_MARSHAL_FC_FLOAT   10
#define USER_MARSHAL_FC_HYPER   11
#define USER_MARSHAL_FC_DOUBLE  12

RPCRTAPI unsigned char* RPC_ENTRY
  NdrUserMarshalSimpleTypeConvert( ULONG *pFlags, unsigned char *pBuffer, unsigned char FormatChar );

629 630
CLIENT_CALL_RETURN RPC_VAR_ENTRY
  NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
631
CLIENT_CALL_RETURN RPC_VAR_ENTRY
Ove Kaaven's avatar
Ove Kaaven committed
632
  NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
633
CLIENT_CALL_RETURN RPC_VAR_ENTRY
634
  NdrClientCall3( MIDL_STUBLESS_PROXY_INFO *info, ULONG proc, void *retval, ... );
635
CLIENT_CALL_RETURN RPC_VAR_ENTRY
636
  NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
637 638
CLIENT_CALL_RETURN RPC_VAR_ENTRY
  Ndr64AsyncClientCall( MIDL_STUBLESS_PROXY_INFO *info, ULONG proc, void *retval, ... );
639
CLIENT_CALL_RETURN RPC_VAR_ENTRY
640
  NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
Ove Kaaven's avatar
Ove Kaaven committed
641 642 643 644 645

RPCRTAPI void RPC_ENTRY
  NdrServerCall2( PRPC_MESSAGE pRpcMsg );
RPCRTAPI void RPC_ENTRY
  NdrServerCall( PRPC_MESSAGE pRpcMsg );
646 647
RPCRTAPI void RPC_ENTRY
  NdrServerCallAll( PRPC_MESSAGE pRpcMsg );
648 649
RPCRTAPI void RPC_ENTRY
  NdrAsyncServerCall( PRPC_MESSAGE pRpcMsg );
Ove Kaaven's avatar
Ove Kaaven committed
650

651 652 653 654 655 656
RPCRTAPI LONG RPC_ENTRY
  NdrStubCall2( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
RPCRTAPI LONG RPC_ENTRY
  NdrStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
RPCRTAPI LONG RPC_ENTRY
  NdrAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
657 658
RPCRTAPI LONG RPC_ENTRY
  NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
Ove Kaaven's avatar
Ove Kaaven committed
659

Ove Kaaven's avatar
Ove Kaaven committed
660
RPCRTAPI void* RPC_ENTRY
661
  NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2) __WINE_MALLOC;
Ove Kaaven's avatar
Ove Kaaven committed
662 663 664

RPCRTAPI void RPC_ENTRY
  NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr );
665 666

RPCRTAPI RPC_STATUS RPC_ENTRY
667 668
  NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg, ULONG *pCommStatus,
                            ULONG *pFaultStatus, RPC_STATUS Status_ );
669

Ove Kaaven's avatar
Ove Kaaven committed
670 671
RPCRTAPI void RPC_ENTRY
  NdrOleFree( void* NodeToFree );
672 673
RPCRTAPI void* RPC_ENTRY
  NdrOleAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1) __WINE_DEALLOC(NdrOleFree) __WINE_MALLOC;
Ove Kaaven's avatar
Ove Kaaven committed
674

675 676 677
RPCRTAPI void RPC_ENTRY
  NdrClientInitialize( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
                       PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
678
RPCRTAPI void RPC_ENTRY
679
  NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
680
                          PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
681 682
RPCRTAPI unsigned char* RPC_ENTRY
  NdrServerInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
683
RPCRTAPI unsigned char* RPC_ENTRY
684
  NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
685 686 687 688 689 690 691 692 693 694
RPCRTAPI unsigned char* RPC_ENTRY
  NdrServerInitializeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, PRPC_MESSAGE pRpcMsg );
RPCRTAPI void RPC_ENTRY
  NdrServerInitializeMarshall( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg  );
RPCRTAPI void RPC_ENTRY
  NdrServerMarshall( struct IRpcStubBuffer *pThis, struct IRpcChannelBuffer *pChannel, PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
RPCRTAPI void RPC_ENTRY
  NdrServerUnmarshall( struct IRpcChannelBuffer *pChannel, PRPC_MESSAGE pRpcMsg,
                       PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc,
                       PFORMAT_STRING pFormat, void *pParamList );
695
RPCRTAPI unsigned char* RPC_ENTRY
696
  NdrGetBuffer( PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle );
697
RPCRTAPI void RPC_ENTRY
698
  NdrFreeBuffer( PMIDL_STUB_MESSAGE pStubMsg );
699
RPCRTAPI unsigned char* RPC_ENTRY
700
  NdrSendReceive( PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer );
701

702
RPCRTAPI unsigned char * RPC_ENTRY
703
  NdrNsGetBuffer( PMIDL_STUB_MESSAGE pStubMsg, ULONG BufferLength, RPC_BINDING_HANDLE Handle );
704 705 706
RPCRTAPI unsigned char * RPC_ENTRY
  NdrNsSendReceive( PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pBufferEnd, RPC_BINDING_HANDLE *pAutoHandle );

707 708 709
RPCRTAPI RPC_STATUS RPC_ENTRY
  NdrGetDcomProtocolVersion( PMIDL_STUB_MESSAGE pStubMsg, RPC_VERSION *pVersion );

710
RPCRTAPI PFULL_PTR_XLAT_TABLES RPC_ENTRY
711
  NdrFullPointerXlatInit( ULONG NumberOfPointers, XLAT_SIDE XlatSide );
712 713 714 715
RPCRTAPI void RPC_ENTRY
  NdrFullPointerXlatFree( PFULL_PTR_XLAT_TABLES pXlatTables );
RPCRTAPI int RPC_ENTRY
  NdrFullPointerQueryPointer( PFULL_PTR_XLAT_TABLES pXlatTables, void *pPointer,
716
                              unsigned char QueryType, ULONG *pRefId );
717
RPCRTAPI int RPC_ENTRY
718
  NdrFullPointerQueryRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId,
719 720
                            unsigned char QueryType, void **ppPointer );
RPCRTAPI void RPC_ENTRY
721
  NdrFullPointerInsertRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, void *pPointer );
722 723 724 725 726 727 728 729 730 731
RPCRTAPI int RPC_ENTRY
  NdrFullPointerFree( PFULL_PTR_XLAT_TABLES pXlatTables, void *Pointer );

RPCRTAPI void RPC_ENTRY
  NdrRpcSsEnableAllocate( PMIDL_STUB_MESSAGE pMessage );
RPCRTAPI void RPC_ENTRY
  NdrRpcSsDisableAllocate( PMIDL_STUB_MESSAGE pMessage );
RPCRTAPI void RPC_ENTRY
  NdrRpcSmSetClientToOsf( PMIDL_STUB_MESSAGE pMessage );
RPCRTAPI void RPC_ENTRY
732
  NdrRpcSmClientFree( void *NodeToFree );
733
RPCRTAPI void * RPC_ENTRY
734
  NdrRpcSmClientAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1) __WINE_DEALLOC(NdrRpcSmClientFree) __WINE_MALLOC;
735
RPCRTAPI void RPC_ENTRY
736
  NdrRpcSsDefaultFree( void *NodeToFree );
737 738
RPCRTAPI void * RPC_ENTRY
  NdrRpcSsDefaultAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1) __WINE_DEALLOC(NdrRpcSsDefaultFree) __WINE_MALLOC;
739

740 741 742
RPCRTAPI RPC_STATUS RPC_ENTRY
  NdrGetUserMarshalInfo( ULONG *pFlags, ULONG InformationLevel, NDR_USER_MARSHAL_INFO *pMarshalInfo );

Eric Pouech's avatar
Eric Pouech committed
743 744 745
#ifdef __cplusplus
}
#endif
746
#endif /*__WINE_RPCNDR_H */