rpcndr.h 25.7 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
/* stupid #if can't handle casts... this __stupidity
53 54
   is just a workaround for that limitation */

55 56 57
#define __NDR_CHAR_REP_MASK  0x000f
#define __NDR_INT_REP_MASK   0x00f0
#define __NDR_FLOAT_REP_MASK 0xff00
58

59 60 61
#define __NDR_IEEE_FLOAT     0x0000
#define __NDR_VAX_FLOAT      0x0100
#define __NDR_IBM_FLOAT      0x0300
62

63 64
#define __NDR_ASCII_CHAR     0x0000
#define __NDR_EBCDIC_CHAR    0x0001
65

66 67
#define __NDR_LITTLE_ENDIAN  0x0010
#define __NDR_BIG_ENDIAN     0x0000
68 69 70

/* Mac's are special */
#if defined(__RPC_MAC__)
71
# define __NDR_LOCAL_DATA_REPRESENTATION \
72 73
    (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_BIG_ENDIAN)
#else
74
# define __NDR_LOCAL_DATA_REPRESENTATION \
75 76 77 78 79 80 81 82
    (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_LITTLE_ENDIAN)
#endif

#define __NDR_LOCAL_ENDIAN \
  (__NDR_LOCAL_DATA_REPRESENTATION & __NDR_INT_REP_MASK)

/* for convenience, define NDR_LOCAL_IS_BIG_ENDIAN iff it is */
#if __NDR_LOCAL_ENDIAN == __NDR_BIG_ENDIAN
83
# define NDR_LOCAL_IS_BIG_ENDIAN
84
#elif __NDR_LOCAL_ENDIAN == __NDR_LITTLE_ENDIAN
85
# undef NDR_LOCAL_IS_BIG_ENDIAN
86
#else
87
# error alien NDR_LOCAL_ENDIAN - Greg botched the defines again, please report
88 89 90 91
#endif

/* finally, do the casts like Microsoft */

92 93 94 95 96 97 98 99 100 101 102 103
#define NDR_CHAR_REP_MASK             ((ULONG) __NDR_CHAR_REP_MASK)
#define NDR_INT_REP_MASK              ((ULONG) __NDR_INT_REP_MASK)
#define NDR_FLOAT_REP_MASK            ((ULONG) __NDR_FLOAT_REP_MASK)
#define NDR_IEEE_FLOAT                ((ULONG) __NDR_IEEE_FLOAT)
#define NDR_VAX_FLOAT                 ((ULONG) __NDR_VAX_FLOAT)
#define NDR_IBM_FLOAT                 ((ULONG) __NDR_IBM_FLOAT)
#define NDR_ASCII_CHAR                ((ULONG) __NDR_ASCII_CHAR)
#define NDR_EBCDIC_CHAR               ((ULONG) __NDR_EBCDIC_CHAR)
#define NDR_LITTLE_ENDIAN             ((ULONG) __NDR_LITTLE_ENDIAN)
#define NDR_BIG_ENDIAN                ((ULONG) __NDR_BIG_ENDIAN)
#define NDR_LOCAL_DATA_REPRESENTATION ((ULONG) __NDR_LOCAL_DATA_REPRESENTATION)
#define NDR_LOCAL_ENDIAN              ((ULONG) __NDR_LOCAL_ENDIAN)
104 105


106
#define TARGET_IS_NT50_OR_LATER 1
Ove Kaaven's avatar
Ove Kaaven committed
107 108
#define TARGET_IS_NT40_OR_LATER 1
#define TARGET_IS_NT351_OR_WIN95_OR_LATER 1
109

110
#define small char
111
typedef unsigned char byte;
112 113
typedef INT64 hyper;
typedef UINT64 MIDL_uhyper;
114
typedef unsigned char boolean;
Ove Kaaven's avatar
Ove Kaaven committed
115

Ove Kaaven's avatar
Ove Kaaven committed
116
#define __RPC_CALLEE WINAPI
117
#define RPC_VAR_ENTRY WINAPIV
118
#define NDR_SHAREABLE static
Ove Kaaven's avatar
Ove Kaaven committed
119

Ove Kaaven's avatar
Ove Kaaven committed
120 121 122
#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)
123 124
#define midl_user_free MIDL_user_free
#define midl_user_allocate MIDL_user_allocate
Ove Kaaven's avatar
Ove Kaaven committed
125

126 127 128
void * __RPC_USER MIDL_user_allocate(SIZE_T);
void __RPC_USER MIDL_user_free(void *);

Ove Kaaven's avatar
Ove Kaaven committed
129 130 131 132
#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)

133 134 135 136 137 138
#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))

139
typedef struct _NDR_SCONTEXT
Ove Kaaven's avatar
Ove Kaaven committed
140 141 142 143 144 145 146 147
{
  void *pad[2];
  void *userContext;
} *NDR_SCONTEXT;

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

Patrik Stridvall's avatar
Patrik Stridvall committed
148 149
typedef void (__RPC_USER *NDR_RUNDOWN)(void *context);
typedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void);
150
typedef void (__RPC_USER *NDR_NOTIFY2_ROUTINE)(boolean flag);
151 152 153 154

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

Ove Kaaven's avatar
Ove Kaaven committed
155 156 157
struct _MIDL_STUB_MESSAGE;
struct _MIDL_STUB_DESC;
struct _FULL_PTR_XLAT_TABLES;
158 159
struct NDR_ALLOC_ALL_NODES_CONTEXT;
struct NDR_POINTER_QUEUE_STATE;
Ove Kaaven's avatar
Ove Kaaven committed
160

161
typedef unsigned char *RPC_BUFPTR;
162
typedef ULONG RPC_LENGTH;
Patrik Stridvall's avatar
Patrik Stridvall committed
163
typedef void (__RPC_USER *EXPR_EVAL)(struct _MIDL_STUB_MESSAGE *);
Ove Kaaven's avatar
Ove Kaaven committed
164 165 166 167
typedef const unsigned char *PFORMAT_STRING;

typedef struct
{
168 169 170 171 172 173
  LONG Dimension;
  ULONG *BufferConformanceMark;
  ULONG *BufferVarianceMark;
  ULONG *MaxCountArray;
  ULONG *OffsetArray;
  ULONG *ActualCountArray;
Ove Kaaven's avatar
Ove Kaaven committed
174 175
} ARRAY_INFO, *PARRAY_INFO;

176 177
typedef struct
{
178 179
  ULONG WireCodeset;
  ULONG DesiredReceivingCodeset;
180 181 182
  void *CSArrayInfo;
} CS_STUB_INFO;

Ove Kaaven's avatar
Ove Kaaven committed
183 184 185 186 187 188 189 190 191 192 193 194
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;
195 196
  ULONG BufferLength;
  ULONG MemorySize;
Ove Kaaven's avatar
Ove Kaaven committed
197
  unsigned char *Memory;
198 199 200
  unsigned char IsClient;
  unsigned char Pad;
  unsigned short uFlags2;
Ove Kaaven's avatar
Ove Kaaven committed
201
  int ReuseBuffer;
202 203
  struct NDR_ALLOC_ALL_NODES_CONTEXT *pAllocAllNodesContext;
  struct NDR_POINTER_QUEUE_STATE *pPointerQueueState;
Ove Kaaven's avatar
Ove Kaaven committed
204 205
  int IgnoreEmbeddedPointers;
  unsigned char *PointerBufferMark;
206
  unsigned char CorrDespIncrement;
207 208
  unsigned char uFlags;
  unsigned short UniquePtrCount;
Ove Kaaven's avatar
Ove Kaaven committed
209
  ULONG_PTR MaxCount;
210 211
  ULONG Offset;
  ULONG ActualCount;
212
  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
Patrik Stridvall's avatar
Patrik Stridvall committed
213
  void (__RPC_API *pfnFree)(void *);
Ove Kaaven's avatar
Ove Kaaven committed
214 215 216 217 218 219
  unsigned char *StackTop;
  unsigned char *pPresentedType;
  unsigned char *pTransmitType;
  handle_t SavedHandle;
  const struct _MIDL_STUB_DESC *StubDesc;
  struct _FULL_PTR_XLAT_TABLES *FullPtrXlatTables;
220 221
  ULONG FullPtrRefId;
  ULONG PointerLength;
222 223 224 225 226 227 228 229 230 231 232 233 234
  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;
235
  int fUnused:3;
236
  int fUnused2:16;
237
  DWORD dwDestContext;
Ove Kaaven's avatar
Ove Kaaven committed
238 239
  void *pvDestContext;
  NDR_SCONTEXT *SavedContextHandles;
240
  LONG ParamNumber;
Ove Kaaven's avatar
Ove Kaaven committed
241 242
  struct IRpcChannelBuffer *pRpcChannelBuffer;
  PARRAY_INFO pArrayInfo;
243 244 245
  ULONG *SizePtrCountArray;
  ULONG *SizePtrOffsetArray;
  ULONG *SizePtrLengthArray;
Ove Kaaven's avatar
Ove Kaaven committed
246
  void *pArgQueue;
247
  DWORD dwStubPhase;
248
  void *LowStackMark;
Ove Kaaven's avatar
Ove Kaaven committed
249 250 251 252
  PNDR_ASYNC_MESSAGE pAsyncMsg;
  PNDR_CORRELATION_INFO pCorrInfo;
  unsigned char *pCorrMemory;
  void *pMemoryList;
253 254 255
  CS_STUB_INFO *pCSInfo;
  unsigned char *ConformanceMark;
  unsigned char *VarianceMark;
256
  INT_PTR Unused; /* BackingStoreLowMark on IA64 */
257
  struct _NDR_PROC_CONTEXT *pContext;
258 259
  void* ContextHandleHash;
  void* pUserMarshalList;
260 261 262
  INT_PTR Reserved51_3;
  INT_PTR Reserved51_4;
  INT_PTR Reserved51_5;
Ove Kaaven's avatar
Ove Kaaven committed
263 264
} MIDL_STUB_MESSAGE, *PMIDL_STUB_MESSAGE;

265 266
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
267

268 269 270 271 272 273 274 275 276 277 278 279 280
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
281

282 283 284 285 286 287 288 289 290
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
291

292 293 294 295
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
296 297 298 299 300 301 302 303

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
304

305 306
/* 'USRC' */
#define USER_MARSHAL_CB_SIGNATURE \
307 308
	( ( (DWORD)'U' << 24 ) | ( (DWORD)'S' << 16 ) | \
	  ( (DWORD)'R' << 8  ) | ( (DWORD)'C'       ) )
309 310 311 312 313 314 315 316 317 318 319

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
{
320
    ULONG Flags;
321 322
    PMIDL_STUB_MESSAGE pStubMsg;
    PFORMAT_STRING pReserve;
323
    ULONG Signature;
324 325 326 327 328 329 330 331 332 333 334 335
    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

336 337
typedef struct _MALLOC_FREE_STRUCT
{
338
  void * (__WINE_ALLOC_SIZE(1) __RPC_USER *pfnAllocate)(SIZE_T);
339 340
  void   (__RPC_USER *pfnFree)(void *);
} MALLOC_FREE_STRUCT;
Ove Kaaven's avatar
Ove Kaaven committed
341

342 343 344 345 346
typedef struct _COMM_FAULT_OFFSETS
{
  short CommOffset;
  short FaultOffset;
} COMM_FAULT_OFFSETS;
Ove Kaaven's avatar
Ove Kaaven committed
347 348 349 350

typedef struct _MIDL_STUB_DESC
{
  void *RpcInterfaceInformation;
351
  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
Patrik Stridvall's avatar
Patrik Stridvall committed
352
  void (__RPC_API *pfnFree)(void *);
Ove Kaaven's avatar
Ove Kaaven committed
353 354 355 356 357 358 359 360 361 362 363
  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;
364
  ULONG Version;
Ove Kaaven's avatar
Ove Kaaven committed
365
  MALLOC_FREE_STRUCT *pMallocFreeStruct;
366
  LONG MIDLVersion;
Ove Kaaven's avatar
Ove Kaaven committed
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386
  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;

387 388 389 390 391 392 393 394 395 396 397 398
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
399
typedef void (__RPC_API *STUB_THUNK)( PMIDL_STUB_MESSAGE );
Ove Kaaven's avatar
Ove Kaaven committed
400

401 402 403
#ifdef WINE_STRICT_PROTOTYPES
typedef LONG (__RPC_API *SERVER_ROUTINE)(void);
#else
404
typedef LONG (__RPC_API *SERVER_ROUTINE)();
405
#endif
Ove Kaaven's avatar
Ove Kaaven committed
406 407 408 409 410 411 412 413

typedef struct _MIDL_SERVER_INFO_
{
  PMIDL_STUB_DESC pStubDesc;
  const SERVER_ROUTINE *DispatchTable;
  PFORMAT_STRING ProcString;
  const unsigned short *FmtStringOffset;
  const STUB_THUNK *ThunkTable;
414 415 416
  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
  ULONG_PTR nCount;
  PMIDL_SYNTAX_INFO pSyntaxInfo;
Ove Kaaven's avatar
Ove Kaaven committed
417 418
} MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;

Ove Kaaven's avatar
Ove Kaaven committed
419 420 421 422 423
typedef struct _MIDL_STUBLESS_PROXY_INFO
{
  PMIDL_STUB_DESC pStubDesc;
  PFORMAT_STRING ProcFormatString;
  const unsigned short *FormatStringOffset;
424 425 426
  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
  ULONG_PTR nCount;
  PMIDL_SYNTAX_INFO pSyntaxInfo;
Ove Kaaven's avatar
Ove Kaaven committed
427 428
} MIDL_STUBLESS_PROXY_INFO, *PMIDL_STUBLESS_PROXY_INFO;

429

430
#if defined(__i386__) && !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__CYGWIN__)
431 432 433
/* 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
434 435 436 437 438
typedef union _CLIENT_CALL_RETURN
{
  void *Pointer;
  LONG_PTR Simple;
} CLIENT_CALL_RETURN;
439
#endif
Ove Kaaven's avatar
Ove Kaaven committed
440

Ove Kaaven's avatar
Ove Kaaven committed
441 442 443 444 445 446 447 448 449 450 451 452 453 454 455
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;

456 457 458 459 460 461 462 463
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;
464
  ULONG RefId;
465 466 467 468 469 470 471 472
  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;
473
    ULONG NumberOfEntries;
474 475 476 477
  } RefIdToPointer;

  struct {
    PFULL_PTR_TO_REFID_ELEMENT *XlatTable;
478 479
    ULONG NumberOfBuckets;
    ULONG HashMask;
480 481
  } PointerToRefId;

482
  ULONG                   NextRefId;
483 484 485
  XLAT_SIDE               XlatSide;
} FULL_PTR_XLAT_TABLES,  *PFULL_PTR_XLAT_TABLES;

Ove Kaaven's avatar
Ove Kaaven committed
486 487
struct IRpcStubBuffer;

488
typedef ULONG error_status_t;
489 490 491
typedef void  * NDR_CCONTEXT;

typedef struct _SCONTEXT_QUEUE {
492
  ULONG NumberOfObjects;
493 494 495
  NDR_SCONTEXT *ArrayOfObjects;
} SCONTEXT_QUEUE, *PSCONTEXT_QUEUE;

496 497 498 499
typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1
{
    void *Buffer;
    ULONG BufferSize;
500
    void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
501 502 503 504 505 506 507 508 509 510 511 512 513 514
    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;

515 516
/* Context Handles */

517
RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
518
  NDRCContextBinding( NDR_CCONTEXT CContext );
519 520

RPCRTAPI void RPC_ENTRY
521
  NDRCContextMarshall( NDR_CCONTEXT CContext, void *pBuff );
522 523

RPCRTAPI void RPC_ENTRY
524
  NDRCContextUnmarshall( NDR_CCONTEXT *pCContext, RPC_BINDING_HANDLE hBinding,
525
                         void *pBuff, ULONG DataRepresentation );
526 527

RPCRTAPI void RPC_ENTRY
528
  NDRSContextMarshall( NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn );
529 530

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
531
  NDRSContextUnmarshall( void *pBuff, ULONG DataRepresentation );
532 533

RPCRTAPI void RPC_ENTRY
534 535
  NDRSContextMarshallEx( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
                         void *pBuff, NDR_RUNDOWN userRunDownIn );
536 537

RPCRTAPI void RPC_ENTRY
538 539
  NDRSContextMarshall2( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
                        void *pBuff, NDR_RUNDOWN userRunDownIn, void * CtxGuard,
540
                        ULONG Flags );
541 542

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
543
  NDRSContextUnmarshallEx( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
544
                           ULONG DataRepresentation );
545 546

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
547
  NDRSContextUnmarshall2( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
548 549
                          ULONG DataRepresentation, void *CtxGuard,
                          ULONG Flags );
550

551 552 553 554
RPCRTAPI void RPC_ENTRY
  NdrClientContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck );

RPCRTAPI void RPC_ENTRY
555 556
  NdrClientContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT* pContextHandle,
                              RPC_BINDING_HANDLE BindHandle );
557 558

RPCRTAPI void RPC_ENTRY
559
  NdrServerContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine );
560 561

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
562
  NdrServerContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg );
563 564 565 566 567

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

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
568
  NdrContextHandleInitialize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
569 570 571 572 573 574

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

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
575
  NdrServerContextNewUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
576

577 578 579
RPCRTAPI RPC_STATUS RPC_ENTRY
  RpcSmDestroyClientContext( void **ContextHandle );

580
RPCRTAPI void RPC_ENTRY
581
  RpcSsDestroyClientContext( void **ContextHandle );
582

Ove Kaaven's avatar
Ove Kaaven committed
583 584 585 586 587
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 );

588 589 590 591 592 593 594 595 596 597 598 599
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
600
/* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */
601
#define SIMPLE_TYPE_MARSHAL(type) \
Ove Kaaven's avatar
Ove Kaaven committed
602 603 604 605 606 607
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 ); \
608
RPCRTAPI ULONG RPC_ENTRY \
609 610 611 612
  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
613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631
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)

632 633 634
SIMPLE_TYPE_MARSHAL(ConformantString)
SIMPLE_TYPE_MARSHAL(NonConformantString)

Ove Kaaven's avatar
Ove Kaaven committed
635
#undef TYPE_MARSHAL
636
#undef SIMPLE_TYPE_MARSHAL
Ove Kaaven's avatar
Ove Kaaven committed
637

638 639 640 641 642 643 644
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
645
RPCRTAPI void RPC_ENTRY
646
  NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, LONG NumberParams );
Ove Kaaven's avatar
Ove Kaaven committed
647 648 649
RPCRTAPI void RPC_ENTRY
  NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );

650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665
#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 );

666
CLIENT_CALL_RETURN RPC_VAR_ENTRY
Ove Kaaven's avatar
Ove Kaaven committed
667
  NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
668
CLIENT_CALL_RETURN RPC_VAR_ENTRY
Ove Kaaven's avatar
Ove Kaaven committed
669
  NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
670
CLIENT_CALL_RETURN RPC_VAR_ENTRY
671
  NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
672
CLIENT_CALL_RETURN RPC_VAR_ENTRY
673
  NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
Ove Kaaven's avatar
Ove Kaaven committed
674 675 676 677 678

RPCRTAPI void RPC_ENTRY
  NdrServerCall2( PRPC_MESSAGE pRpcMsg );
RPCRTAPI void RPC_ENTRY
  NdrServerCall( PRPC_MESSAGE pRpcMsg );
679 680
RPCRTAPI void RPC_ENTRY
  NdrAsyncServerCall( PRPC_MESSAGE pRpcMsg );
Ove Kaaven's avatar
Ove Kaaven committed
681

682 683 684 685 686 687
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 );
688 689
RPCRTAPI LONG RPC_ENTRY
  NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
Ove Kaaven's avatar
Ove Kaaven committed
690

Ove Kaaven's avatar
Ove Kaaven committed
691
RPCRTAPI void* RPC_ENTRY
692
  NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2);
Ove Kaaven's avatar
Ove Kaaven committed
693 694 695

RPCRTAPI void RPC_ENTRY
  NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr );
696 697

RPCRTAPI RPC_STATUS RPC_ENTRY
698 699
  NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg, ULONG *pCommStatus,
                            ULONG *pFaultStatus, RPC_STATUS Status_ );
700

Ove Kaaven's avatar
Ove Kaaven committed
701
RPCRTAPI void* RPC_ENTRY
702
  NdrOleAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
Ove Kaaven's avatar
Ove Kaaven committed
703 704 705
RPCRTAPI void RPC_ENTRY
  NdrOleFree( void* NodeToFree );

706 707 708
RPCRTAPI void RPC_ENTRY
  NdrClientInitialize( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
                       PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
709
RPCRTAPI void RPC_ENTRY
710
  NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
711
                          PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
712 713
RPCRTAPI unsigned char* RPC_ENTRY
  NdrServerInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
714
RPCRTAPI unsigned char* RPC_ENTRY
715
  NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
716 717 718 719 720 721 722 723 724 725
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 );
726
RPCRTAPI unsigned char* RPC_ENTRY
727
  NdrGetBuffer( PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle );
728
RPCRTAPI void RPC_ENTRY
729
  NdrFreeBuffer( PMIDL_STUB_MESSAGE pStubMsg );
730
RPCRTAPI unsigned char* RPC_ENTRY
731
  NdrSendReceive( PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer );
732

733
RPCRTAPI unsigned char * RPC_ENTRY
734
  NdrNsGetBuffer( PMIDL_STUB_MESSAGE pStubMsg, ULONG BufferLength, RPC_BINDING_HANDLE Handle );
735 736 737
RPCRTAPI unsigned char * RPC_ENTRY
  NdrNsSendReceive( PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pBufferEnd, RPC_BINDING_HANDLE *pAutoHandle );

738 739 740
RPCRTAPI RPC_STATUS RPC_ENTRY
  NdrGetDcomProtocolVersion( PMIDL_STUB_MESSAGE pStubMsg, RPC_VERSION *pVersion );

741
RPCRTAPI PFULL_PTR_XLAT_TABLES RPC_ENTRY
742
  NdrFullPointerXlatInit( ULONG NumberOfPointers, XLAT_SIDE XlatSide );
743 744 745 746
RPCRTAPI void RPC_ENTRY
  NdrFullPointerXlatFree( PFULL_PTR_XLAT_TABLES pXlatTables );
RPCRTAPI int RPC_ENTRY
  NdrFullPointerQueryPointer( PFULL_PTR_XLAT_TABLES pXlatTables, void *pPointer,
747
                              unsigned char QueryType, ULONG *pRefId );
748
RPCRTAPI int RPC_ENTRY
749
  NdrFullPointerQueryRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId,
750 751
                            unsigned char QueryType, void **ppPointer );
RPCRTAPI void RPC_ENTRY
752
  NdrFullPointerInsertRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, void *pPointer );
753 754 755 756 757 758 759 760 761 762
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
763
  NdrRpcSmClientAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
764
RPCRTAPI void RPC_ENTRY
765
  NdrRpcSmClientFree( void *NodeToFree );
766
RPCRTAPI void * RPC_ENTRY
767
  NdrRpcSsDefaultAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
768
RPCRTAPI void RPC_ENTRY
769
  NdrRpcSsDefaultFree( void *NodeToFree );
770

771 772 773
RPCRTAPI RPC_STATUS RPC_ENTRY
  NdrGetUserMarshalInfo( ULONG *pFlags, ULONG InformationLevel, NDR_USER_MARSHAL_INFO *pMarshalInfo );

Eric Pouech's avatar
Eric Pouech committed
774 775 776
#ifdef __cplusplus
}
#endif
777
#endif /*__WINE_RPCNDR_H */