rpcndr.h 25 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 21
/* FIXME: What version?   Perhaps something is better than nothing, however incorrect */
#define __RPCNDR_H_VERSION__ ( 399 )
Ove Kaaven's avatar
Ove Kaaven committed
22 23
#endif

24 25 26
#ifndef __WINE_RPCNDR_H
#define __WINE_RPCNDR_H

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

31
#include <basetsd.h>
32

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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
   is just a workaround for that limitation */

#define __NDR_CHAR_REP_MASK  0x000fL
#define __NDR_INT_REP_MASK   0x00f0L
#define __NDR_FLOAT_REP_MASK 0xff00L

#define __NDR_IEEE_FLOAT     0x0000L
#define __NDR_VAX_FLOAT      0x0100L
#define __NDR_IBM_FLOAT      0x0300L

#define __NDR_ASCII_CHAR     0x0000L
#define __NDR_EBCDIC_CHAR    0x0001L

#define __NDR_LITTLE_ENDIAN  0x0010L
#define __NDR_BIG_ENDIAN     0x0000L

/* 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
#define hyper __int64
#define MIDL_uhyper unsigned __int64
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 117

#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)

118 119 120 121 122 123
#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
124 125 126 127 128 129 130 131 132
typedef struct
{
  void *pad[2];
  void *userContext;
} *NDR_SCONTEXT;

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

Patrik Stridvall's avatar
Patrik Stridvall committed
133 134
typedef void (__RPC_USER *NDR_RUNDOWN)(void *context);
typedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void);
135
typedef void (__RPC_USER *NDR_NOTIFY2_ROUTINE)(boolean flag);
136 137 138 139

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

Ove Kaaven's avatar
Ove Kaaven committed
140 141 142
struct _MIDL_STUB_MESSAGE;
struct _MIDL_STUB_DESC;
struct _FULL_PTR_XLAT_TABLES;
143 144
struct NDR_ALLOC_ALL_NODES_CONTEXT;
struct NDR_POINTER_QUEUE_STATE;
Ove Kaaven's avatar
Ove Kaaven committed
145

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

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

161 162
typedef struct
{
163 164
  ULONG WireCodeset;
  ULONG DesiredReceivingCodeset;
165 166 167
  void *CSArrayInfo;
} CS_STUB_INFO;

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

250 251
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
252

253 254 255 256 257 258 259 260 261 262 263 264 265
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
266

267 268 269 270 271 272 273 274 275
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
276

277 278 279 280
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
281 282 283 284 285 286 287 288

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
289

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

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

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

327 328 329 330 331
typedef struct _COMM_FAULT_OFFSETS
{
  short CommOffset;
  short FaultOffset;
} COMM_FAULT_OFFSETS;
Ove Kaaven's avatar
Ove Kaaven committed
332 333 334 335

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

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

386
typedef LONG (__RPC_API *SERVER_ROUTINE)();
Ove Kaaven's avatar
Ove Kaaven committed
387 388 389 390 391 392 393 394

typedef struct _MIDL_SERVER_INFO_
{
  PMIDL_STUB_DESC pStubDesc;
  const SERVER_ROUTINE *DispatchTable;
  PFORMAT_STRING ProcString;
  const unsigned short *FmtStringOffset;
  const STUB_THUNK *ThunkTable;
395 396 397
  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
  ULONG_PTR nCount;
  PMIDL_SYNTAX_INFO pSyntaxInfo;
Ove Kaaven's avatar
Ove Kaaven committed
398 399
} MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;

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

typedef union _CLIENT_CALL_RETURN
{
  void *Pointer;
  LONG_PTR Simple;
} CLIENT_CALL_RETURN;

Ove Kaaven's avatar
Ove Kaaven committed
416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
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;

431 432 433 434 435 436 437 438
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;
439
  ULONG RefId;
440 441 442 443 444 445 446 447
  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;
448
    ULONG NumberOfEntries;
449 450 451 452
  } RefIdToPointer;

  struct {
    PFULL_PTR_TO_REFID_ELEMENT *XlatTable;
453 454
    ULONG NumberOfBuckets;
    ULONG HashMask;
455 456
  } PointerToRefId;

457
  ULONG                   NextRefId;
458 459 460
  XLAT_SIDE               XlatSide;
} FULL_PTR_XLAT_TABLES,  *PFULL_PTR_XLAT_TABLES;

Ove Kaaven's avatar
Ove Kaaven committed
461 462
struct IRpcStubBuffer;

463
typedef ULONG error_status_t;
464 465 466
typedef void  * NDR_CCONTEXT;

typedef struct _SCONTEXT_QUEUE {
467
  ULONG NumberOfObjects;
468 469 470
  NDR_SCONTEXT *ArrayOfObjects;
} SCONTEXT_QUEUE, *PSCONTEXT_QUEUE;

471 472 473 474
typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1
{
    void *Buffer;
    ULONG BufferSize;
475
    void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
476 477 478 479 480 481 482 483 484 485 486 487 488 489
    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;

490 491
/* Context Handles */

492
RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
493
  NDRCContextBinding( NDR_CCONTEXT CContext );
494 495

RPCRTAPI void RPC_ENTRY
496
  NDRCContextMarshall( NDR_CCONTEXT CContext, void *pBuff );
497 498

RPCRTAPI void RPC_ENTRY
499
  NDRCContextUnmarshall( NDR_CCONTEXT *pCContext, RPC_BINDING_HANDLE hBinding,
500
                         void *pBuff, ULONG DataRepresentation );
501 502

RPCRTAPI void RPC_ENTRY
503
  NDRSContextMarshall( NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn );
504 505

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
506
  NDRSContextUnmarshall( void *pBuff, ULONG DataRepresentation );
507 508

RPCRTAPI void RPC_ENTRY
509 510
  NDRSContextMarshallEx( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
                         void *pBuff, NDR_RUNDOWN userRunDownIn );
511 512

RPCRTAPI void RPC_ENTRY
513 514
  NDRSContextMarshall2( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
                        void *pBuff, NDR_RUNDOWN userRunDownIn, void * CtxGuard,
515
                        ULONG Flags );
516 517

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
518
  NDRSContextUnmarshallEx( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
519
                           ULONG DataRepresentation );
520 521

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
522
  NDRSContextUnmarshall2( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
523 524
                          ULONG DataRepresentation, void *CtxGuard,
                          ULONG Flags );
525

526 527 528 529
RPCRTAPI void RPC_ENTRY
  NdrClientContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck );

RPCRTAPI void RPC_ENTRY
530 531
  NdrClientContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT* pContextHandle,
                              RPC_BINDING_HANDLE BindHandle );
532 533

RPCRTAPI void RPC_ENTRY
534
  NdrServerContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine );
535 536

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
537
  NdrServerContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg );
538 539 540 541 542

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

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
543
  NdrContextHandleInitialize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
544 545 546 547 548 549

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

RPCRTAPI NDR_SCONTEXT RPC_ENTRY
550
  NdrServerContextNewUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
551

552 553 554
RPCRTAPI RPC_STATUS RPC_ENTRY
  RpcSmDestroyClientContext( void **ContextHandle );

555
RPCRTAPI void RPC_ENTRY
556
  RpcSsDestroyClientContext( void **ContextHandle );
557

Ove Kaaven's avatar
Ove Kaaven committed
558 559 560 561 562
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 );

563 564 565 566 567 568 569 570 571 572 573 574
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
575
/* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */
576
#define SIMPLE_TYPE_MARSHAL(type) \
Ove Kaaven's avatar
Ove Kaaven committed
577 578 579 580 581 582
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 ); \
583
RPCRTAPI ULONG RPC_ENTRY \
584 585 586 587
  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
588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606
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)

607 608 609
SIMPLE_TYPE_MARSHAL(ConformantString)
SIMPLE_TYPE_MARSHAL(NonConformantString)

Ove Kaaven's avatar
Ove Kaaven committed
610
#undef TYPE_MARSHAL
611
#undef SIMPLE_TYPE_MARSHAL
Ove Kaaven's avatar
Ove Kaaven committed
612

613 614 615 616 617 618 619
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
620
RPCRTAPI void RPC_ENTRY
621
  NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, LONG NumberParams );
Ove Kaaven's avatar
Ove Kaaven committed
622 623 624
RPCRTAPI void RPC_ENTRY
  NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );

625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640
#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 );

641 642
/* Note: this should return a CLIENT_CALL_RETURN, but calling convention for
 * returning structures/unions is different between Windows and gcc on i386. */
643
LONG_PTR RPC_VAR_ENTRY
Ove Kaaven's avatar
Ove Kaaven committed
644
  NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
645
LONG_PTR RPC_VAR_ENTRY
Ove Kaaven's avatar
Ove Kaaven committed
646
  NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
647 648
LONG_PTR RPC_VAR_ENTRY
  NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
649 650
LONG_PTR RPC_VAR_ENTRY
  NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
Ove Kaaven's avatar
Ove Kaaven committed
651 652 653 654 655

RPCRTAPI void RPC_ENTRY
  NdrServerCall2( PRPC_MESSAGE pRpcMsg );
RPCRTAPI void RPC_ENTRY
  NdrServerCall( PRPC_MESSAGE pRpcMsg );
656 657
RPCRTAPI void RPC_ENTRY
  NdrAsyncServerCall( PRPC_MESSAGE pRpcMsg );
Ove Kaaven's avatar
Ove Kaaven committed
658

659 660 661 662 663 664
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 );
665 666
RPCRTAPI LONG RPC_ENTRY
  NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
Ove Kaaven's avatar
Ove Kaaven committed
667

Ove Kaaven's avatar
Ove Kaaven committed
668
RPCRTAPI void* RPC_ENTRY
669
  NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2);
Ove Kaaven's avatar
Ove Kaaven committed
670 671 672

RPCRTAPI void RPC_ENTRY
  NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr );
673 674

RPCRTAPI RPC_STATUS RPC_ENTRY
675 676
  NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg, ULONG *pCommStatus,
                            ULONG *pFaultStatus, RPC_STATUS Status_ );
677

Ove Kaaven's avatar
Ove Kaaven committed
678
RPCRTAPI void* RPC_ENTRY
679
  NdrOleAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
Ove Kaaven's avatar
Ove Kaaven committed
680 681 682
RPCRTAPI void RPC_ENTRY
  NdrOleFree( void* NodeToFree );

683 684 685
RPCRTAPI void RPC_ENTRY
  NdrClientInitialize( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
                       PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
686
RPCRTAPI void RPC_ENTRY
687
  NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
688
                          PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
689 690
RPCRTAPI unsigned char* RPC_ENTRY
  NdrServerInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
691
RPCRTAPI unsigned char* RPC_ENTRY
692
  NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
693 694 695 696 697 698 699 700 701 702
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 );
703
RPCRTAPI unsigned char* RPC_ENTRY
704
  NdrGetBuffer( PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle );
705
RPCRTAPI void RPC_ENTRY
706
  NdrFreeBuffer( PMIDL_STUB_MESSAGE pStubMsg );
707
RPCRTAPI unsigned char* RPC_ENTRY
708
  NdrSendReceive( PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer );
709

710
RPCRTAPI unsigned char * RPC_ENTRY
711
  NdrNsGetBuffer( PMIDL_STUB_MESSAGE pStubMsg, ULONG BufferLength, RPC_BINDING_HANDLE Handle );
712 713 714
RPCRTAPI unsigned char * RPC_ENTRY
  NdrNsSendReceive( PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pBufferEnd, RPC_BINDING_HANDLE *pAutoHandle );

715 716 717
RPCRTAPI RPC_STATUS RPC_ENTRY
  NdrGetDcomProtocolVersion( PMIDL_STUB_MESSAGE pStubMsg, RPC_VERSION *pVersion );

718
RPCRTAPI PFULL_PTR_XLAT_TABLES RPC_ENTRY
719
  NdrFullPointerXlatInit( ULONG NumberOfPointers, XLAT_SIDE XlatSide );
720 721 722 723
RPCRTAPI void RPC_ENTRY
  NdrFullPointerXlatFree( PFULL_PTR_XLAT_TABLES pXlatTables );
RPCRTAPI int RPC_ENTRY
  NdrFullPointerQueryPointer( PFULL_PTR_XLAT_TABLES pXlatTables, void *pPointer,
724
                              unsigned char QueryType, ULONG *pRefId );
725
RPCRTAPI int RPC_ENTRY
726
  NdrFullPointerQueryRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId,
727 728
                            unsigned char QueryType, void **ppPointer );
RPCRTAPI void RPC_ENTRY
729
  NdrFullPointerInsertRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, void *pPointer );
730 731 732 733 734 735 736 737 738 739
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
740
  NdrRpcSmClientAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
741
RPCRTAPI void RPC_ENTRY
742
  NdrRpcSmClientFree( void *NodeToFree );
743
RPCRTAPI void * RPC_ENTRY
744
  NdrRpcSsDefaultAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
745
RPCRTAPI void RPC_ENTRY
746
  NdrRpcSsDefaultFree( void *NodeToFree );
747

748 749 750
RPCRTAPI RPC_STATUS RPC_ENTRY
  NdrGetUserMarshalInfo( ULONG *pFlags, ULONG InformationLevel, NDR_USER_MARSHAL_INFO *pMarshalInfo );

Eric Pouech's avatar
Eric Pouech committed
751 752 753
#ifdef __cplusplus
}
#endif
754
#endif /*__WINE_RPCNDR_H */