File: ndrtypes.h

package info (click to toggle)
wine 10.0~repack-12
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 326,476 kB
  • sloc: ansic: 4,155,993; perl: 23,800; yacc: 22,031; javascript: 15,872; makefile: 12,346; pascal: 9,519; objc: 6,923; lex: 5,273; xml: 3,219; python: 2,688; cpp: 1,741; sh: 871; java: 750; asm: 299; cs: 62
file content (309 lines) | stat: -rw-r--r-- 10,437 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
/*
 * NDR Types
 *
 * Copyright 2006 Robert Shearman (for CodeWeavers)
 *
 * 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
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifndef __NDRTYPES_H__
#define __NDRTYPES_H__

#include <limits.h>

typedef struct
{
    unsigned short MustSize : 1; /* 0x0001 - client interpreter MUST size this
     *  parameter, other parameters may be skipped, using the value in
     *  NDR_PROC_PARTIAL_OIF_HEADER::constant_client_buffer_size instead. */
    unsigned short MustFree : 1; /* 0x0002 - server interpreter MUST size this
     *  parameter, other parameters may be skipped, using the value in
     *  NDR_PROC_PARTIAL_OIF_HEADER::constant_server_buffer_size instead. */
    unsigned short IsPipe : 1; /* 0x0004 - The parameter is a pipe handle */
    unsigned short IsIn : 1; /* 0x0008 - The parameter is an input */
    unsigned short IsOut : 1; /* 0x0010 - The parameter is an output */
    unsigned short IsReturn : 1; /* 0x0020 - The parameter is to be returned */
    unsigned short IsBasetype : 1; /* 0x0040 - The parameter is simple and has the
     *  format defined by NDR_PARAM_OIF_BASETYPE rather than by
     *  NDR_PARAM_OIF_OTHER. */
    unsigned short IsByValue : 1; /* 0x0080 - Set for compound types being sent by
     *  value. Can be of type: structure, union, transmit_as, represent_as,
     *  wire_marshal and SAFEARRAY. */
    unsigned short IsSimpleRef : 1; /* 0x0100 - parameter that is a reference
     *  pointer to anything other than another pointer, and which has no
     *  allocate attributes. */
    unsigned short IsDontCallFreeInst : 1; /*  0x0200 - Used for some represent_as types
     *  for when the free instance routine should not be called. */
    unsigned short SaveForAsyncFinish : 1; /* 0x0400 - Unknown */
    unsigned short Unused : 2;
    unsigned short ServerAllocSize : 3; /* 0xe000 - If non-zero
     *  specifies the size of the object in numbers of 8byte blocks needed.
     *  It will be stored on the server's stack rather than using an allocate
     *  call. */
} PARAM_ATTRIBUTES;

typedef struct
{
    unsigned char ServerMustSize : 1; /* 0x01 - the server must perform a
     *  sizing pass. */
    unsigned char ClientMustSize : 1; /* 0x02 - the client must perform a
     *  sizing pass. */
    unsigned char HasReturn : 1; /* 0x04 - procedure has a return value. */
    unsigned char HasPipes : 1; /* 0x08 - the pipe package should be used. */
    unsigned char Unused : 1; /* 0x10 - not used */
    unsigned char HasAsyncUuid : 1; /* 0x20 - indicates an asynchronous DCOM
     *  procedure. */
    unsigned char HasExtensions : 1; /* 0x40 - indicates that Win2000
     *  extensions are in use. */
    unsigned char HasAsyncHandle : 1; /* 0x80 - indicates an asynchronous RPC
     *  procedure. */
} INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;

typedef struct
{
    unsigned char HasNewCorrDesc : 1; /* 0x01 - indicates new correlation
     *  descriptors in use. */
    unsigned char ClientCorrCheck : 1; /* 0x02 - client needs correlation
     *  check. */
    unsigned char ServerCorrCheck : 1; /* 0x04 - server needs correlation
     *  check. */
    unsigned char HasNotify : 1; /* 0x08 - should call MIDL [notify]
     *  routine @ NotifyIndex. */
    unsigned char HasNotify2 : 1; /* 0x10 - should call MIDL [notify_flag] routine @ 
     *  NotifyIndex. */

    /* The following bits are in fact used by midl but haven't yet been
       named in the SDK. */
    unsigned char Unused : 3; /* 0x20 - has complex return */
                              /* 0x40 - has range on conformance */
} INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;

/* Win2000 extensions */
typedef struct
{
    /* size in bytes of all following extensions */
    unsigned char Size;

    INTERPRETER_OPT_FLAGS2 Flags2;

    /* client cache size hint */
    unsigned short ClientCorrHint;

    /* server cache size hint */
    unsigned short ServerCorrHint;

    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
     * HasNotify or HasNotify2 flag set */
    unsigned short NotifyIndex;
} NDR_PROC_HEADER_EXTS;

typedef struct
{
    /* size in bytes of all following extensions */
    unsigned char Size;

    INTERPRETER_OPT_FLAGS2 Flags2;

    /* client cache size hint */
    unsigned short ClientCorrHint;

    /* server cache size hint */
    unsigned short ServerCorrHint;

    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
     * HasNotify or HasNotify2 flag set */
    unsigned short NotifyIndex;

    /* needed only on IA64 to cope with float/register loading */
    unsigned short FloatArgMask;
} NDR_PROC_HEADER_EXTS64;

typedef enum
{
    FC_BYTE = 0x01, /* 0x01 */
    FC_CHAR, /* 0x02 */
    FC_SMALL, /* 0x03 */
    FC_USMALL, /* 0x04 */
    FC_WCHAR, /* 0x05 */
    FC_SHORT, /* 0x06 */
    FC_USHORT, /* 0x07 */
    FC_LONG, /* 0x08 */
    FC_ULONG, /* 0x09 */
    FC_FLOAT, /* 0x0a */
    FC_HYPER, /* 0x0b */
    FC_DOUBLE, /* 0x0c */
    FC_ENUM16, /* 0x0d */
    FC_ENUM32, /* 0x0e */
    FC_IGNORE, /* 0x0f */
    FC_ERROR_STATUS_T, /* 0x10 */

    FC_RP, /* 0x11 */ /* reference pointer */
    FC_UP, /* 0x12 */ /* unique pointer */
    FC_OP, /* 0x13 */ /* object pointer */
    FC_FP, /* 0x14 */ /* full pointer */

    FC_STRUCT, /* 0x15 */ /* simple structure */
    FC_PSTRUCT, /* 0x16 */ /* simple structure w/ pointers */
    FC_CSTRUCT, /* 0x17 */ /* conformant structure */
    FC_CPSTRUCT, /* 0x18 */ /* conformant structure w/ pointers */
    FC_CVSTRUCT, /* 0x19 */ /* conformant varying struct */
    FC_BOGUS_STRUCT, /* 0x1a */ /* complex structure */

    FC_CARRAY, /* 0x1b */ /* conformant array */
    FC_CVARRAY, /* 0x1c */ /* conformant varying array */
    FC_SMFARRAY, /* 0x1d */ /* small (<64K) fixed array */
    FC_LGFARRAY, /* 0x1e */ /* large (>= 64k) fixed array */
    FC_SMVARRAY, /* 0x1f */ /* small (<64k) varying array */
    FC_LGVARRAY, /* 0x20 */ /* large (>= 64k) varying array */
    FC_BOGUS_ARRAY, /* 0x21 */ /* complex array */

    FC_C_CSTRING, /* 0x22 */ /* conformant char string */
    FC_C_BSTRING, /* 0x23 */
    FC_C_SSTRING, /* 0x24 */
    FC_C_WSTRING, /* 0x25 */ /* conformant wchar string */
    FC_CSTRING, /* 0x26 */ /* non-conformant char string */
    FC_BSTRING, /* 0x27 */
    FC_SSTRING, /* 0x28 */
    FC_WSTRING, /* 0x29 */ /* non-conformant wchar string */

    FC_ENCAPSULATED_UNION, /* 0x2a */
    FC_NON_ENCAPSULATED_UNION, /* 0x2b */

    FC_BYTE_COUNT_POINTER, /* 0x2c */ /* [byte_count] ACF attribute */

    FC_TRANSMIT_AS, /* 0x2d */
    FC_REPRESENT_AS, /* 0x2e */

    FC_IP, /* 0x2f */ /* interface pointer */

    FC_BIND_CONTEXT, /* 0x30 */

    FC_BIND_GENERIC, /* 0x31 */
    FC_BIND_PRIMITIVE, /* 0x32 */
    FC_AUTO_HANDLE, /* 0x33 */
    FC_CALLBACK_HANDLE, /* 0x34 */

    FC_UNUSED1, /* 0x35 */

    FC_POINTER, /* 0x36 */

    FC_ALIGNM2, /* 0x37 */
    FC_ALIGNM4, /* 0x38 */
    FC_ALIGNM8, /* 0x39 */

    FC_UNUSED2, /* 0x3a */
    FC_UNUSED3, /* 0x3b */
    FC_UNUSED4, /* 0x3c */

    FC_STRUCTPAD1, /* 0x3d */
    FC_STRUCTPAD2, /* 0x3e */
    FC_STRUCTPAD3, /* 0x3f */
    FC_STRUCTPAD4, /* 0x40 */
    FC_STRUCTPAD5, /* 0x41 */
    FC_STRUCTPAD6, /* 0x42 */
    FC_STRUCTPAD7, /* 0x43 */

    FC_STRING_SIZED, /* 0x44 */

    FC_UNUSED5, /* 0x45 */

    FC_NO_REPEAT, /* 0x46 */
    FC_FIXED_REPEAT, /* 0x47 */
    FC_VARIABLE_REPEAT, /* 0x48 */
    FC_FIXED_OFFSET, /* 0x49 */
    FC_VARIABLE_OFFSET, /* 0x4a */

    FC_PP, /* 0x4b */ /* pointer layout */
/* FC_PP: FC_PAD layouts */
/* layouts: FC_NO_REPEAT FC_PAD instance */
/* instance: NdrFcShort(memofs), NdrFcShort(bufofs), desc */

    FC_EMBEDDED_COMPLEX, /* 0x4c */

    FC_IN_PARAM, /* 0x4d */
    FC_IN_PARAM_BASETYPE, /* 0x4e */
    FC_IN_PARAM_NO_FREE_INST, /* 0x4f */
    FC_IN_OUT_PARAM, /* 0x50 */
    FC_OUT_PARAM, /* 0x51 */
    FC_RETURN_PARAM, /* 0x52 */
    FC_RETURN_PARAM_BASETYPE, /* 0x53 */

    FC_DEREFERENCE, /* 0x54 */
    FC_DIV_2, /* 0x55 */
    FC_MULT_2, /* 0x56 */
    FC_ADD_1, /* 0x57 */
    FC_SUB_1, /* 0x58 */

    FC_CALLBACK, /* 0x59 */

    FC_CONSTANT_IID, /* 0x5a */

    FC_END, /* 0x5b */
    FC_PAD, /* 0x5c */

    FC_HARD_STRUCT = 0xb1,

    FC_TRANSMIT_AS_PTR, /* 0xb2 */
    FC_REPRESENT_AS_PTR, /* 0xb3 */

    FC_USER_MARSHAL, /* 0xb4 */

    FC_PIPE, /* 0xb5 */
    FC_BLKHOLE, /* 0xb6 */

    FC_RANGE, /* 0xb7 */

    FC_INT3264, /* 0xb8 */
    FC_UINT3264, /* 0xb9 */
} FORMAT_CHARACTER;

#define FC_ALLOCATE_ALL_NODES   0x01
#define FC_DONT_FREE            0x02
#define FC_ALLOCED_ON_STACK     0x04
#define FC_SIMPLE_POINTER       0x08
#define FC_POINTER_DEREF        0x10

/* flags for all handle types */
#define HANDLE_PARAM_IS_VIA_PTR 0x80
#define HANDLE_PARAM_IS_IN      0x40
#define HANDLE_PARAM_IS_OUT     0x20
#define HANDLE_PARAM_IS_RETURN  0x10

/* flags for context handles */
#define NDR_STRICT_CONTEXT_HANDLE           0x08
#define NDR_CONTEXT_HANDLE_NOSERIALIZE      0x04
#define NDR_CONTEXT_HANDLE_SERIALIZE        0x02
#define NDR_CONTEXT_HANDLE_CANNOT_BE_NULL   0x01

#define Oi_FULL_PTR_USED            0x01
#define Oi_RPCSS_ALLOC_USED         0x02
#define Oi_OBJECT_PROC              0x04
#define Oi_HAS_RPCFLAGS             0x08
#define Oi_OBJ_USE_V2_INTERPRETER   0x20
#define Oi_HAS_COMM_OR_FAULT        0x20
#define Oi_USE_NEW_INIT_ROUTINES    0x40

#define FC_NORMAL_CONFORMANCE           (unsigned char) 0x00
#define FC_POINTER_CONFORMANCE          (unsigned char) 0x10
#define FC_TOP_LEVEL_CONFORMANCE        (unsigned char) 0x20
#define FC_CONSTANT_CONFORMANCE         (unsigned char) 0x40
#define FC_TOP_LEVEL_MULTID_CONFORMANCE (unsigned char) 0x80

#define USER_MARSHAL_UNIQUE     0x80
#define USER_MARSHAL_REF        0x40
#define USER_MARSHAL_POINTER    0xc0
#define USER_MARSHAL_IID        0x20

#endif