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

43 44 45
#define __NDR_CHAR_REP_MASK  0x000f
#define __NDR_INT_REP_MASK   0x00f0
#define __NDR_FLOAT_REP_MASK 0xff00
46

47 48 49
#define __NDR_IEEE_FLOAT     0x0000
#define __NDR_VAX_FLOAT      0x0100
#define __NDR_IBM_FLOAT      0x0300
50

51 52
#define __NDR_ASCII_CHAR     0x0000
#define __NDR_EBCDIC_CHAR    0x0001
53

54 55
#define __NDR_LITTLE_ENDIAN  0x0010
#define __NDR_BIG_ENDIAN     0x0000
56 57 58

/* Mac's are special */
#if defined(__RPC_MAC__)
59
# define __NDR_LOCAL_DATA_REPRESENTATION \
60 61
    (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_BIG_ENDIAN)
#else
62
# define __NDR_LOCAL_DATA_REPRESENTATION \
63 64 65 66 67 68 69 70
    (__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
71
# define NDR_LOCAL_IS_BIG_ENDIAN
72
#elif __NDR_LOCAL_ENDIAN == __NDR_LITTLE_ENDIAN
73
# undef NDR_LOCAL_IS_BIG_ENDIAN
74
#else
75
# error alien NDR_LOCAL_ENDIAN - Greg botched the defines again, please report
76 77 78 79
#endif

/* finally, do the casts like Microsoft */

80 81 82 83 84 85 86 87 88 89 90 91
#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)
92 93


94
#define TARGET_IS_NT50_OR_LATER 1
Ove Kaaven's avatar
Ove Kaaven committed
95 96
#define TARGET_IS_NT40_OR_LATER 1
#define TARGET_IS_NT351_OR_WIN95_OR_LATER 1
97

98
#define small char
99
typedef unsigned char byte;
100 101
typedef INT64 hyper;
typedef UINT64 MIDL_uhyper;
102
typedef unsigned char boolean;
Ove Kaaven's avatar
Ove Kaaven committed
103

Ove Kaaven's avatar
Ove Kaaven committed
104
#define __RPC_CALLEE WINAPI
105
#define RPC_VAR_ENTRY __cdecl
106
#define NDR_SHAREABLE static
Ove Kaaven's avatar
Ove Kaaven committed
107

Ove Kaaven's avatar
Ove Kaaven committed
108 109 110
#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)
111 112
#define midl_user_free MIDL_user_free
#define midl_user_allocate MIDL_user_allocate
Ove Kaaven's avatar
Ove Kaaven committed
113

114 115 116
void * __RPC_USER MIDL_user_allocate(SIZE_T);
void __RPC_USER MIDL_user_free(void *);

Ove Kaaven's avatar
Ove Kaaven committed
117 118 119 120
#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)

121 122 123 124 125 126
#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))

Ove Kaaven's avatar
Ove Kaaven committed
127 128 129 130 131 132 133 134 135
typedef struct
{
  void *pad[2];
  void *userContext;
} *NDR_SCONTEXT;

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

Patrik Stridvall's avatar
Patrik Stridvall committed
136 137
typedef void (__RPC_USER *NDR_RUNDOWN)(void *context);
typedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void);
138
typedef void (__RPC_USER *NDR_NOTIFY2_ROUTINE)(boolean flag);
139 140 141 142

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

Ove Kaaven's avatar
Ove Kaaven committed
143 144 145
struct _MIDL_STUB_MESSAGE;
struct _MIDL_STUB_DESC;
struct _FULL_PTR_XLAT_TABLES;
146 147
struct NDR_ALLOC_ALL_NODES_CONTEXT;
struct NDR_POINTER_QUEUE_STATE;
Ove Kaaven's avatar
Ove Kaaven committed
148

149
typedef unsigned char *RPC_BUFPTR;
150
typedef ULONG RPC_LENGTH;
Patrik Stridvall's avatar
Patrik Stridvall committed
151
typedef void (__RPC_USER *EXPR_EVAL)(struct _MIDL_STUB_MESSAGE *);
Ove Kaaven's avatar
Ove Kaaven committed
152 153 154 155
typedef const unsigned char *PFORMAT_STRING;

typedef struct
{
156 157 158 159 160 161
  LONG Dimension;
  ULONG *BufferConformanceMark;
  ULONG *BufferVarianceMark;
  ULONG *MaxCountArray;
  ULONG *OffsetArray;
  ULONG *ActualCountArray;
Ove Kaaven's avatar
Ove Kaaven committed
162 163
} ARRAY_INFO, *PARRAY_INFO;

164 165
typedef struct
{
166 167
  ULONG WireCodeset;
  ULONG DesiredReceivingCodeset;
168 169 170
  void *CSArrayInfo;
} CS_STUB_INFO;

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

253 254
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
255

256 257 258 259 260 261 262 263 264 265 266 267 268
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
269

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

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

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
292

293 294
/* 'USRC' */
#define USER_MARSHAL_CB_SIGNATURE \
295 296
	( ( (DWORD)'U' << 24 ) | ( (DWORD)'S' << 16 ) | \
	  ( (DWORD)'R' << 8  ) | ( (DWORD)'C'       ) )
297 298 299 300 301 302 303 304 305 306 307

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
{
308
    ULONG Flags;
309 310
    PMIDL_STUB_MESSAGE pStubMsg;
    PFORMAT_STRING pReserve;
311
    ULONG Signature;
312 313 314 315 316 317 318 319 320 321 322 323
    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

324 325
typedef struct _MALLOC_FREE_STRUCT
{
326
  void * (__WINE_ALLOC_SIZE(1) __RPC_USER *pfnAllocate)(SIZE_T);
327 328
  void   (__RPC_USER *pfnFree)(void *);
} MALLOC_FREE_STRUCT;
Ove Kaaven's avatar
Ove Kaaven committed
329

330 331 332 333 334
typedef struct _COMM_FAULT_OFFSETS
{
  short CommOffset;
  short FaultOffset;
} COMM_FAULT_OFFSETS;
Ove Kaaven's avatar
Ove Kaaven committed
335 336 337 338

typedef struct _MIDL_STUB_DESC
{
  void *RpcInterfaceInformation;
339
  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
Patrik Stridvall's avatar
Patrik Stridvall committed
340
  void (__RPC_API *pfnFree)(void *);
Ove Kaaven's avatar
Ove Kaaven committed
341 342 343 344 345 346 347 348 349 350 351
  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;
352
  ULONG Version;
Ove Kaaven's avatar
Ove Kaaven committed
353
  MALLOC_FREE_STRUCT *pMallocFreeStruct;
354
  LONG MIDLVersion;
Ove Kaaven's avatar
Ove Kaaven committed
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
  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;

375 376 377 378 379 380 381 382 383 384 385 386
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
387
typedef void (__RPC_API *STUB_THUNK)( PMIDL_STUB_MESSAGE );
Ove Kaaven's avatar
Ove Kaaven committed
388

389 390 391
#ifdef WINE_STRICT_PROTOTYPES
typedef LONG (__RPC_API *SERVER_ROUTINE)(void);
#else
392
typedef LONG (__RPC_API *SERVER_ROUTINE)();
393
#endif
Ove Kaaven's avatar
Ove Kaaven committed
394 395 396 397 398 399 400 401

typedef struct _MIDL_SERVER_INFO_
{
  PMIDL_STUB_DESC pStubDesc;
  const SERVER_ROUTINE *DispatchTable;
  PFORMAT_STRING ProcString;
  const unsigned short *FmtStringOffset;
  const STUB_THUNK *ThunkTable;
402 403 404
  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
  ULONG_PTR nCount;
  PMIDL_SYNTAX_INFO pSyntaxInfo;
Ove Kaaven's avatar
Ove Kaaven committed
405 406
} MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;

Ove Kaaven's avatar
Ove Kaaven committed
407 408 409 410 411
typedef struct _MIDL_STUBLESS_PROXY_INFO
{
  PMIDL_STUB_DESC pStubDesc;
  PFORMAT_STRING ProcFormatString;
  const unsigned short *FormatStringOffset;
412 413 414
  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
  ULONG_PTR nCount;
  PMIDL_SYNTAX_INFO pSyntaxInfo;
Ove Kaaven's avatar
Ove Kaaven committed
415 416
} MIDL_STUBLESS_PROXY_INFO, *PMIDL_STUBLESS_PROXY_INFO;

417 418 419 420 421

#if defined(__i386__) && !defined(__MSC_VER) && !defined(__MINGW32__) && !defined(__CYGWIN__)
/* 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
422 423 424 425 426
typedef union _CLIENT_CALL_RETURN
{
  void *Pointer;
  LONG_PTR Simple;
} CLIENT_CALL_RETURN;
427
#endif
Ove Kaaven's avatar
Ove Kaaven committed
428

Ove Kaaven's avatar
Ove Kaaven committed
429 430 431 432 433 434 435 436 437 438 439 440 441 442 443
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;

444 445 446 447 448 449 450 451
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;
452
  ULONG RefId;
453 454 455 456 457 458 459 460
  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;
461
    ULONG NumberOfEntries;
462 463 464 465
  } RefIdToPointer;

  struct {
    PFULL_PTR_TO_REFID_ELEMENT *XlatTable;
466 467
    ULONG NumberOfBuckets;
    ULONG HashMask;
468 469
  } PointerToRefId;

470
  ULONG                   NextRefId;
471 472 473
  XLAT_SIDE               XlatSide;
} FULL_PTR_XLAT_TABLES,  *PFULL_PTR_XLAT_TABLES;

Ove Kaaven's avatar
Ove Kaaven committed
474 475
struct IRpcStubBuffer;

476
typedef ULONG error_status_t;
477 478 479
typedef void  * NDR_CCONTEXT;

typedef struct _SCONTEXT_QUEUE {
480
  ULONG NumberOfObjects;
481 482 483
  NDR_SCONTEXT *ArrayOfObjects;
} SCONTEXT_QUEUE, *PSCONTEXT_QUEUE;

484 485 486 487
typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1
{
    void *Buffer;
    ULONG BufferSize;
488
    void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
489 490 491 492 493 494 495 496 497 498 499 500 501 502
    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;

503 504
/* Context Handles */

505
RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
506
  NDRCContextBinding( NDR_CCONTEXT CContext );
507 508

RPCRTAPI void RPC_ENTRY
509
  NDRCContextMarshall( NDR_CCONTEXT CContext, void *pBuff );
510 511

RPCRTAPI void RPC_ENTRY
512
  NDRCContextUnmarshall( NDR_CCONTEXT *pCContext, RPC_BINDING_HANDLE hBinding,
513
                         void *pBuff, ULONG DataRepresentation );
514 515

RPCRTAPI void RPC_ENTRY
516
  NDRSContextMarshall( NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn );
517 518

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
519
  NDRSContextUnmarshall( void *pBuff, ULONG DataRepresentation );
520 521

RPCRTAPI void RPC_ENTRY
522 523
  NDRSContextMarshallEx( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
                         void *pBuff, NDR_RUNDOWN userRunDownIn );
524 525

RPCRTAPI void RPC_ENTRY
526 527
  NDRSContextMarshall2( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
                        void *pBuff, NDR_RUNDOWN userRunDownIn, void * CtxGuard,
528
                        ULONG Flags );
529 530

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
531
  NDRSContextUnmarshallEx( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
532
                           ULONG DataRepresentation );
533 534

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
535
  NDRSContextUnmarshall2( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
536 537
                          ULONG DataRepresentation, void *CtxGuard,
                          ULONG Flags );
538

539 540 541 542
RPCRTAPI void RPC_ENTRY
  NdrClientContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck );

RPCRTAPI void RPC_ENTRY
543 544
  NdrClientContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT* pContextHandle,
                              RPC_BINDING_HANDLE BindHandle );
545 546

RPCRTAPI void RPC_ENTRY
547
  NdrServerContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine );
548 549

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
550
  NdrServerContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg );
551 552 553 554 555

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

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
556
  NdrContextHandleInitialize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
557 558 559 560 561 562

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

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
563
  NdrServerContextNewUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
564

565 566 567
RPCRTAPI RPC_STATUS RPC_ENTRY
  RpcSmDestroyClientContext( void **ContextHandle );

568
RPCRTAPI void RPC_ENTRY
569
  RpcSsDestroyClientContext( void **ContextHandle );
570

Ove Kaaven's avatar
Ove Kaaven committed
571 572 573 574 575
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 );

576 577 578 579 580 581 582 583 584 585 586 587
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
588
/* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */
589
#define SIMPLE_TYPE_MARSHAL(type) \
Ove Kaaven's avatar
Ove Kaaven committed
590 591 592 593 594 595
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 ); \
596
RPCRTAPI ULONG RPC_ENTRY \
597 598 599 600
  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
601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619
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)

620 621 622
SIMPLE_TYPE_MARSHAL(ConformantString)
SIMPLE_TYPE_MARSHAL(NonConformantString)

Ove Kaaven's avatar
Ove Kaaven committed
623
#undef TYPE_MARSHAL
624
#undef SIMPLE_TYPE_MARSHAL
Ove Kaaven's avatar
Ove Kaaven committed
625

626 627 628 629 630 631 632
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
633
RPCRTAPI void RPC_ENTRY
634
  NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, LONG NumberParams );
Ove Kaaven's avatar
Ove Kaaven committed
635 636 637
RPCRTAPI void RPC_ENTRY
  NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );

638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653
#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 );

654
CLIENT_CALL_RETURN RPC_VAR_ENTRY
Ove Kaaven's avatar
Ove Kaaven committed
655
  NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
656
CLIENT_CALL_RETURN RPC_VAR_ENTRY
Ove Kaaven's avatar
Ove Kaaven committed
657
  NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
658
CLIENT_CALL_RETURN RPC_VAR_ENTRY
659
  NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
660
CLIENT_CALL_RETURN RPC_VAR_ENTRY
661
  NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
Ove Kaaven's avatar
Ove Kaaven committed
662 663 664 665 666

RPCRTAPI void RPC_ENTRY
  NdrServerCall2( PRPC_MESSAGE pRpcMsg );
RPCRTAPI void RPC_ENTRY
  NdrServerCall( PRPC_MESSAGE pRpcMsg );
667 668
RPCRTAPI void RPC_ENTRY
  NdrAsyncServerCall( PRPC_MESSAGE pRpcMsg );
Ove Kaaven's avatar
Ove Kaaven committed
669

670 671 672 673 674 675
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 );
676 677
RPCRTAPI LONG RPC_ENTRY
  NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
Ove Kaaven's avatar
Ove Kaaven committed
678

Ove Kaaven's avatar
Ove Kaaven committed
679
RPCRTAPI void* RPC_ENTRY
680
  NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2);
Ove Kaaven's avatar
Ove Kaaven committed
681 682 683

RPCRTAPI void RPC_ENTRY
  NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr );
684 685

RPCRTAPI RPC_STATUS RPC_ENTRY
686 687
  NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg, ULONG *pCommStatus,
                            ULONG *pFaultStatus, RPC_STATUS Status_ );
688

Ove Kaaven's avatar
Ove Kaaven committed
689
RPCRTAPI void* RPC_ENTRY
690
  NdrOleAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
Ove Kaaven's avatar
Ove Kaaven committed
691 692 693
RPCRTAPI void RPC_ENTRY
  NdrOleFree( void* NodeToFree );

694 695 696
RPCRTAPI void RPC_ENTRY
  NdrClientInitialize( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
                       PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
697
RPCRTAPI void RPC_ENTRY
698
  NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
699
                          PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
700 701
RPCRTAPI unsigned char* RPC_ENTRY
  NdrServerInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
702
RPCRTAPI unsigned char* RPC_ENTRY
703
  NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
704 705 706 707 708 709 710 711 712 713
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 );
714
RPCRTAPI unsigned char* RPC_ENTRY
715
  NdrGetBuffer( PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle );
716
RPCRTAPI void RPC_ENTRY
717
  NdrFreeBuffer( PMIDL_STUB_MESSAGE pStubMsg );
718
RPCRTAPI unsigned char* RPC_ENTRY
719
  NdrSendReceive( PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer );
720

721
RPCRTAPI unsigned char * RPC_ENTRY
722
  NdrNsGetBuffer( PMIDL_STUB_MESSAGE pStubMsg, ULONG BufferLength, RPC_BINDING_HANDLE Handle );
723 724 725
RPCRTAPI unsigned char * RPC_ENTRY
  NdrNsSendReceive( PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pBufferEnd, RPC_BINDING_HANDLE *pAutoHandle );

726 727 728
RPCRTAPI RPC_STATUS RPC_ENTRY
  NdrGetDcomProtocolVersion( PMIDL_STUB_MESSAGE pStubMsg, RPC_VERSION *pVersion );

729
RPCRTAPI PFULL_PTR_XLAT_TABLES RPC_ENTRY
730
  NdrFullPointerXlatInit( ULONG NumberOfPointers, XLAT_SIDE XlatSide );
731 732 733 734
RPCRTAPI void RPC_ENTRY
  NdrFullPointerXlatFree( PFULL_PTR_XLAT_TABLES pXlatTables );
RPCRTAPI int RPC_ENTRY
  NdrFullPointerQueryPointer( PFULL_PTR_XLAT_TABLES pXlatTables, void *pPointer,
735
                              unsigned char QueryType, ULONG *pRefId );
736
RPCRTAPI int RPC_ENTRY
737
  NdrFullPointerQueryRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId,
738 739
                            unsigned char QueryType, void **ppPointer );
RPCRTAPI void RPC_ENTRY
740
  NdrFullPointerInsertRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, void *pPointer );
741 742 743 744 745 746 747 748 749 750
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
751
  NdrRpcSmClientAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
752
RPCRTAPI void RPC_ENTRY
753
  NdrRpcSmClientFree( void *NodeToFree );
754
RPCRTAPI void * RPC_ENTRY
755
  NdrRpcSsDefaultAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
756
RPCRTAPI void RPC_ENTRY
757
  NdrRpcSsDefaultFree( void *NodeToFree );
758

759 760 761
RPCRTAPI RPC_STATUS RPC_ENTRY
  NdrGetUserMarshalInfo( ULONG *pFlags, ULONG InformationLevel, NDR_USER_MARSHAL_INFO *pMarshalInfo );

Eric Pouech's avatar
Eric Pouech committed
762 763 764
#ifdef __cplusplus
}
#endif
765
#endif /*__WINE_RPCNDR_H */