Use exception handler for GlobalUnlock, GlobalFree.
[wine/wine64.git] / include / rpcndr.h
blob20684b0c788a17acd1139ab8b750a49890dd8d25
1 #ifndef __WINE_RPCNDR_H
2 #define __WINE_RPCNDR_H
4 #ifndef __RPCNDR_H_VERSION__
5 /* FIXME: I'm not sure what version though */
6 #define __RPCNDR_H_VERSION__
7 #endif // __RPCNDR_H_VERSION__
9 typedef unsigned char byte;
10 typedef __int64 hyper;
11 typedef __uint64 MIDL_uhyper;
12 /* 'boolean' tend to conflict, let's call it _wine_boolean */
13 typedef unsigned char _wine_boolean;
14 /* typedef _wine_boolean boolean; */
16 typedef struct
18 void *pad[2];
19 void *userContext;
20 } *NDR_SCONTEXT;
22 #define NDRSContextValue(hContext) (&(hContext)->userContext)
23 #define cbNDRContext 20
25 typedef void __RPC_USER (*NDR_RUNDOWN)(void *context);
26 typedef void __RPC_USER (*NDR_NOTIFY_ROUTINE)(void);
27 typedef void __RPC_USER (*NDR_NOTIFY2_ROUTINE)(_wine_boolean flag);
29 #define DECLSPEC_UUID(x)
30 #define MIDL_INTERFACE(x) struct
32 struct _MIDL_STUB_MESSAGE;
33 struct _MIDL_STUB_DESC;
34 struct _FULL_PTR_XLAT_TABLES;
36 typedef void __RPC_USER (*EXPR_EVAL)(struct _MIDL_STUB_MESSAGE *);
37 typedef const unsigned char *PFORMAT_STRING;
39 typedef struct
41 long Dimension;
42 unsigned long *BufferConformanceMark;
43 unsigned long *BufferVarianceMark;
44 unsigned long *MaxCountArray;
45 unsigned long *OffsetArray;
46 unsigned long *ActualCountArray;
47 } ARRAY_INFO, *PARRAY_INFO;
49 typedef struct _NDR_PIPE_DESC *PNDR_PIPE_DESC;
50 typedef struct _NDR_PIPE_MESSAGE *PNDR_PIPE_MESSAGE;
51 typedef struct _NDR_ASYNC_MESSAGE *PNDR_ASYNC_MESSAGE;
52 typedef struct _NDR_CORRELATION_INFO *PNDR_CORRELATION_INFO;
54 #include "pshpack4.h"
55 typedef struct _MIDL_STUB_MESSAGE
57 PRPC_MESSAGE RpcMsg;
58 unsigned char *Buffer;
59 unsigned char *BufferStart;
60 unsigned char *BufferEnd;
61 unsigned char *BufferMark;
62 unsigned long BufferLength;
63 unsigned long MemorySize;
64 unsigned char *Memory;
65 int IsClient;
66 int ReuseBuffer;
67 unsigned char *AllocAllNodesMemory;
68 unsigned char *AllocAllNodesMemoryEnd;
69 int IgnoreEmbeddedPointers;
70 unsigned char *PointerBufferMark;
71 unsigned char fBufferValid;
72 unsigned char uFlags;
73 ULONG_PTR MaxCount;
74 unsigned long Offset;
75 unsigned long ActualCount;
76 void * __RPC_API (*pfnAllocate)(size_t);
77 void __RPC_API (*pfnFree)(void *);
78 unsigned char *StackTop;
79 unsigned char *pPresentedType;
80 unsigned char *pTransmitType;
81 handle_t SavedHandle;
82 const struct _MIDL_STUB_DESC *StubDesc;
83 struct _FULL_PTR_XLAT_TABLES *FullPtrXlatTables;
84 unsigned long FullPtrRefId;
85 unsigned long ulUnused1;
86 int fInDontFree:1;
87 int fDontCallFreeInst:1;
88 int fInOnlyParam:1;
89 int fHasReturn:1;
90 int fHasExtensions:1;
91 int fHasNewCorrDesc:1;
92 int fUnused:10;
93 unsigned long dwDestContext;
94 void *pvDestContext;
95 NDR_SCONTEXT *SavedContextHandles;
96 long ParamNumber;
97 struct IRpcChannelBuffer *pRpcChannelBuffer;
98 PARRAY_INFO pArrayInfo;
99 unsigned long *SizePtrCountArray;
100 unsigned long *SizePtrOffsetArray;
101 unsigned long *SizePtrLengthArray;
102 void *pArgQueue;
103 unsigned long dwStubPhase;
104 PNDR_PIPE_DESC pPipeDesc;
105 PNDR_ASYNC_MESSAGE pAsyncMsg;
106 PNDR_CORRELATION_INFO pCorrInfo;
107 unsigned char *pCorrMemory;
108 void *pMemoryList;
109 ULONG_PTR w2kReserved[5];
110 } MIDL_STUB_MESSAGE, *PMIDL_STUB_MESSAGE;
111 #include "poppack.h"
113 typedef struct _GENERIC_BINDING_ROUTINE_PAIR GENERIC_BINDING_ROUTINE_PAIR, *PGENERIC_BINDING_ROUTINE_PAIR;
115 typedef struct __GENERIC_BINDING_INFO GENERIC_BINDING_INFO, *PGENERIC_BINDING_INFO;
117 typedef struct _XMIT_ROUTINE_QUINTUPLE XMIT_ROUTINE_QUINTUPLE, *PXMIT_ROUTINE_QUINTUPLE;
119 typedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE USER_MARSHAL_ROUTINE_QUADRUPLE;
121 typedef struct _MALLOC_FREE_STRUCT MALLOC_FREE_STRUCT;
123 typedef struct _COMM_FAULT_OFFSETS COMM_FAULT_OFFSETS;
125 typedef struct _MIDL_STUB_DESC
127 void *RpcInterfaceInformation;
128 void * __RPC_API (*pfnAllocate)(size_t);
129 void __RPC_API (*pfnFree)(void *);
130 union {
131 handle_t *pAutoHandle;
132 handle_t *pPrimitiveHandle;
133 PGENERIC_BINDING_INFO pGenericBindingInfo;
134 } IMPLICIT_HANDLE_INFO;
135 const NDR_RUNDOWN *apfnNdrRundownRoutines;
136 const GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs;
137 const EXPR_EVAL *apfnExprEval;
138 const XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple;
139 const unsigned char *pFormatTypes;
140 int fCheckBounds;
141 unsigned long Version;
142 MALLOC_FREE_STRUCT *pMallocFreeStruct;
143 long MIDLVersion;
144 const COMM_FAULT_OFFSETS *CommFaultOffsets;
145 const USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple;
146 const NDR_NOTIFY_ROUTINE *NotifyRoutineTable;
147 ULONG_PTR mFlags;
148 ULONG_PTR Reserved3;
149 ULONG_PTR Reserved4;
150 ULONG_PTR Reserved5;
151 } MIDL_STUB_DESC;
152 typedef const MIDL_STUB_DESC *PMIDL_STUB_DESC;
154 typedef struct _MIDL_FORMAT_STRING
156 short Pad;
157 #if defined(__GNUC__)
158 unsigned char Format[0];
159 #else
160 unsigned char Format[1];
161 #endif
162 } MIDL_FORMAT_STRING;
164 typedef void __RPC_API (*STUB_THUNK)( PMIDL_STUB_MESSAGE );
166 typedef long __RPC_API (*SERVER_ROUTINE)();
168 typedef struct _MIDL_SERVER_INFO_
170 PMIDL_STUB_DESC pStubDesc;
171 const SERVER_ROUTINE *DispatchTable;
172 PFORMAT_STRING ProcString;
173 const unsigned short *FmtStringOffset;
174 const STUB_THUNK *ThunkTable;
175 PFORMAT_STRING LocalFormatTypes;
176 PFORMAT_STRING LocalProcString;
177 const unsigned short *LocalFmtStringOffset;
178 } MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;
180 typedef enum {
181 STUB_UNMARSHAL,
182 STUB_CALL_SERVER,
183 STUB_MARSHAL,
184 STUB_CALL_SERVER_NO_HRESULT
185 } STUB_PHASE;
187 typedef enum {
188 PROXY_CALCSIZE,
189 PROXY_GETBUFFER,
190 PROXY_MARSHAL,
191 PROXY_SENDRECEIVE,
192 PROXY_UNMARSHAL
193 } PROXY_PHASE;
195 struct IRpcStubBuffer;
197 RPCRTAPI void RPC_ENTRY
198 NdrSimpleTypeMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );
199 RPCRTAPI void RPC_ENTRY
200 NdrSimpleTypeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );
202 /* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */
203 #define TYPE_MARSHAL(type) \
204 RPCRTAPI unsigned char* RPC_ENTRY \
205 Ndr##type##Marshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
206 RPCRTAPI unsigned char* RPC_ENTRY \
207 Ndr##type##Unmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ); \
208 RPCRTAPI void RPC_ENTRY \
209 Ndr##type##BufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
210 RPCRTAPI unsigned long RPC_ENTRY \
211 Ndr##type##MemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ); \
212 RPCRTAPI void RPC_ENTRY \
213 Ndr##type##Free( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
215 TYPE_MARSHAL(Pointer)
216 TYPE_MARSHAL(SimpleStruct)
217 TYPE_MARSHAL(ConformantStruct)
218 TYPE_MARSHAL(ConformantVaryingStruct)
219 TYPE_MARSHAL(ComplexStruct)
220 TYPE_MARSHAL(FixedArray)
221 TYPE_MARSHAL(ConformantArray)
222 TYPE_MARSHAL(ConformantVaryingArray)
223 TYPE_MARSHAL(VaryingArray)
224 TYPE_MARSHAL(ComplexArray)
225 TYPE_MARSHAL(EncapsulatedUnion)
226 TYPE_MARSHAL(NonEncapsulatedUnion)
227 TYPE_MARSHAL(ByteCountPointer)
228 TYPE_MARSHAL(XmitOrRepAs)
229 TYPE_MARSHAL(UserMarshal)
230 TYPE_MARSHAL(InterfacePointer)
232 #undef TYPE_MARSHAL
234 RPCRTAPI void RPC_ENTRY
235 NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, long NumberParams );
236 RPCRTAPI void RPC_ENTRY
237 NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
239 RPCRTAPI void* RPC_ENTRY
240 NdrOleAllocate( size_t Size );
241 RPCRTAPI void RPC_ENTRY
242 NdrOleFree( void* NodeToFree );
244 #endif /*__WINE_RPCNDR_H */