ReactOS  0.4.13-dev-73-gcfe54aa
ndr_stubless.h
Go to the documentation of this file.
1 /*
2  * NDR -Oi,-Oif,-Oicf Interpreter
3  *
4  * Copyright 2007 Robert Shearman (for CodeWeavers)
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #pragma once
22 
23 #include "ndrtypes.h"
24 
25 /* there can't be any alignment with the structures in this file */
26 #include "pshpack1.h"
27 
28 typedef struct _NDR_PROC_HEADER
29 {
30  /* type of handle to use:
31  * 0 - Explicit handle.
32  * Handle is passed as a parameter to the function.
33  * Indicates that explicit handle information follows the header,
34  * which actually describes the handle.
35  * FC_BIND_GENERIC = 31 - Implicit handle with custom binding routines
36  * (MIDL_STUB_DESC::IMPLICIT_HANDLE_INFO::pGenericBindingInfo)
37  * FC_BIND_PRIMITIVE = 32 - Implicit handle using handle_t created by
38  * calling application
39  * FC_AUTO_HANDLE = 33 - Automatic handle
40  * FC_CALLBACK_HANDLE = 34 - Implicit handle used for a callback: current handle
41  * from last remote call
42  */
43  unsigned char handle_type;
44 
45  /* procedure flags:
46  * Oi_FULL_PTR_USED = 0x01 - A full pointer can have the value NULL and can
47  * change during the call from NULL to non-NULL and supports aliasing
48  * and cycles. Indicates that the NdrFullPointerXlatInit function
49  * should be called.
50  * Oi_RPCSS_ALLOC_USED = 0x02 - Use RpcSS allocate/free routines instead of
51  * normal allocate/free routines
52  * Oi_OBJECT_PROC = 0x04 - Indicates a procedure that is part of an OLE
53  * interface, rather than a DCE RPC interface.
54  * Oi_HAS_RPCFLAGS = 0x08 - Indicates that the rpc_flags element is
55  * present in the header.
56  * Oi_HAS_COMM_OR_FAULT = 0x20 - If Oi_OBJECT_PROC not present only then
57  * indicates that the procedure has the comm_status or fault_status
58  * MIDL attribute.
59  * Oi_OBJ_USE_V2_INTERPRETER = 0x20 - If Oi_OBJECT_PROC present only
60  * then indicates that the format string is in -Oif or -Oicf format
61  * Oi_USE_NEW_INIT_ROUTINES = 0x40 - Use NdrXInitializeNew instead of
62  * NdrXInitialize?
63  */
64  unsigned char Oi_flags;
65 
66  /* the zero-based index of the procedure */
67  unsigned short proc_num;
68 
69  /* total size of all parameters on the stack, including any "this"
70  * pointer and/or return value */
71  unsigned short stack_size;
73 
74 /* same as above struct except additional element rpc_flags */
75 typedef struct _NDR_PROC_HEADER_RPC
76 {
77  unsigned char handle_type;
78  unsigned char Oi_flags;
79 
80  /*
81  * RPCF_Idempotent = 0x0001 - [idempotent] MIDL attribute
82  * RPCF_Broadcast = 0x0002 - [broadcast] MIDL attribute
83  * RPCF_Maybe = 0x0004 - [maybe] MIDL attribute
84  * Reserved = 0x0008 - 0x0080
85  * RPCF_Message = 0x0100 - [message] MIDL attribute
86  * Reserved = 0x0200 - 0x1000
87  * RPCF_InputSynchronous = 0x2000 - unknown
88  * RPCF_Asynchronous = 0x4000 - [async] MIDL attribute
89  * Reserved = 0x8000
90  */
91  unsigned int rpc_flags;
92  unsigned short proc_num;
93  unsigned short stack_size;
94 
96 
98 {
99  /* the pre-computed client buffer size so that interpreter can skip all
100  * or some (if the flag ClientMustSize is specified) of the sizing pass */
102 
103  /* the pre-computed server buffer size so that interpreter can skip all
104  * or some (if the flag ServerMustSize is specified) of the sizing pass */
106 
108 
109  /* number of params */
110  unsigned char number_of_params;
112 
114 {
115  /* parameter direction. One of:
116  * FC_IN_PARAM_BASETYPE = 0x4e - an in param
117  * FC_RETURN_PARAM_BASETYPE = 0x53 - a return param
118  */
119  unsigned char param_direction;
120 
121  /* One of: FC_BYTE,FC_CHAR,FC_SMALL,FC_USMALL,FC_WCHAR,FC_SHORT,FC_USHORT,
122  * FC_LONG,FC_ULONG,FC_FLOAT,FC_HYPER,FC_DOUBLE,FC_ENUM16,FC_ENUM32,
123  * FC_ERROR_STATUS_T,FC_INT3264,FC_UINT3264 */
124  unsigned char type_format_char;
126 
127 typedef struct _NDR_PARAM_OI_OTHER
128 {
129  /* One of:
130  * FC_IN_PARAM = 0x4d - An in param
131  * FC_IN_OUT_PARAM = 0x50 - An in/out param
132  * FC_OUT_PARAM = 0x51 - An out param
133  * FC_RETURN_PARAM = 0x52 - A return value
134  * FC_IN_PARAM_NO_FREE_INST = 0x4f - A param for which no freeing is done
135  */
136  unsigned char param_direction;
137 
138  /* Size of param on stack in NUMBERS OF INTS */
139  unsigned char stack_size;
140 
141  /* offset in the type format string table */
142  unsigned short type_offset;
144 
145 typedef struct
146 {
148  /* the offset on the calling stack where the parameter is located */
149  unsigned short stack_offset;
150  union
151  {
152  /* see NDR_PARAM_OI_BASETYPE::type_format_char */
153  unsigned char type_format_char;
154  /* offset into the provided type format string where the type for this
155  * parameter starts */
156  unsigned short type_offset;
157  } u;
158 } NDR_PARAM_OIF;
159 
160 /* explicit handle description for FC_BIND_PRIMITIVE type */
161 typedef struct _NDR_EHD_PRIMITIVE
162 {
163  /* FC_BIND_PRIMITIVE */
164  unsigned char handle_type;
165 
166  /* is the handle passed in via a pointer? */
167  unsigned char flag;
168 
169  /* offset from the beginning of the stack to the handle in bytes */
170  unsigned short offset;
172 
173 /* explicit handle description for FC_BIND_GENERIC type */
174 typedef struct _NDR_EHD_GENERIC
175 {
176  /* FC_BIND_GENERIC */
177  unsigned char handle_type;
178 
179  /* upper 4bits is a flag indicating whether the handle is passed in
180  * via a pointer. lower 4bits is the size of the user defined generic
181  * handle type. the size must be less than or equal to the machine
182  * register size */
183  unsigned char flag_and_size;
184 
185  /* offset from the beginning of the stack to the handle in bytes */
186  unsigned short offset;
187 
188  /* the index into the aGenericBindingRoutinesPairs field of MIDL_STUB_DESC
189  * giving the bind and unbind routines for the handle */
191 
192  /* FC_PAD */
193  unsigned char unused;
195 
196 /* explicit handle description for FC_BIND_CONTEXT type */
197 typedef struct _NDR_EHD_CONTEXT
198 {
199  /* FC_BIND_CONTEXT */
200  unsigned char handle_type;
201 
202  /* Any of the following flags:
203  * NDR_CONTEXT_HANDLE_CANNOT_BE_NULL = 0x01
204  * NDR_CONTEXT_HANDLE_SERIALIZE = 0x02
205  * NDR_CONTEXT_HANDLE_NO_SERIALIZE = 0x04
206  * NDR_STRICT_CONTEXT_HANDLE = 0x08
207  * HANDLE_PARAM_IS_OUT = 0x20
208  * HANDLE_PARAM_IS_RETURN = 0x21
209  * HANDLE_PARAM_IS_IN = 0x40
210  * HANDLE_PARAM_IS_VIA_PTR = 0x80
211  */
212  unsigned char flags;
213 
214  /* offset from the beginning of the stack to the handle in bytes */
215  unsigned short offset;
216 
217  /* zero-based index on rundown routine in apfnNdrRundownRoutines field
218  * of MIDL_STUB_DESC */
220 
221  /* varies depending on NDR version used.
222  * V1: zero-based index into parameters
223  * V2: zero-based index into handles that are parameters */
224  unsigned char param_num;
226 
227 #include "poppack.h"
228 
230 {
239 };
240 
242  void **stack_top, void **fpu_stack ) DECLSPEC_HIDDEN;
244  void **stack_top ) DECLSPEC_HIDDEN;
245 void client_do_args( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, enum stubless_phase phase,
246  void **fpu_args, unsigned short number_of_params, unsigned char *pRetVal ) DECLSPEC_HIDDEN;
248  unsigned int stack_size, BOOL object_proc,
249  void *buffer, unsigned int size, unsigned int *count ) DECLSPEC_HIDDEN;
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
unsigned short stack_size
Definition: ndr_stubless.h:93
RPC_STATUS NdrpCompleteAsyncClientCall(RPC_ASYNC_STATE *pAsync, void *Reply) DECLSPEC_HIDDEN
unsigned short offset
Definition: ndr_stubless.h:186
unsigned char handle_type
Definition: ndr_stubless.h:164
unsigned char context_rundown_routine_index
Definition: ndr_stubless.h:219
struct _NDR_EHD_GENERIC NDR_EHD_GENERIC
LONG_PTR CDECL ndr_async_client_call(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, void **stack_top) DECLSPEC_HIDDEN
unsigned char handle_type
Definition: ndr_stubless.h:77
unsigned char stack_size
Definition: ndr_stubless.h:139
unsigned char param_direction
Definition: ndr_stubless.h:119
GLuint GLuint GLsizei count
Definition: gl.h:1545
unsigned short type_offset
Definition: ndr_stubless.h:142
GLuint buffer
Definition: glext.h:5915
unsigned char param_direction
Definition: ndr_stubless.h:136
long RPC_STATUS
Definition: rpc.h:52
unsigned char handle_type
Definition: ndr_stubless.h:200
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned char flag
Definition: ndr_stubless.h:167
INTERPRETER_OPT_FLAGS Oi2Flags
Definition: ndr_stubless.h:107
unsigned short proc_num
Definition: ndr_stubless.h:67
unsigned char handle_type
Definition: ndr_stubless.h:177
unsigned short proc_num
Definition: ndr_stubless.h:92
stubless_phase
Definition: ndr_stubless.h:229
static jsval_t stack_top(script_ctx_t *ctx)
Definition: engine.c:102
unsigned char unused
Definition: ndr_stubless.h:193
unsigned char Oi_flags
Definition: ndr_stubless.h:78
unsigned short constant_client_buffer_size
Definition: ndr_stubless.h:101
struct _NDR_EHD_CONTEXT NDR_EHD_CONTEXT
void client_do_args(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, enum stubless_phase phase, void **fpu_args, unsigned short number_of_params, unsigned char *pRetVal) DECLSPEC_HIDDEN
Definition: ndr_stubless.c:469
GLsizeiptr size
Definition: glext.h:5919
unsigned char handle_type
Definition: ndr_stubless.h:43
struct _NDR_PROC_HEADER NDR_PROC_HEADER
unsigned char flags
Definition: ndr_stubless.h:212
const unsigned char * PFORMAT_STRING
Definition: rpcndr.h:176
struct _NDR_PROC_PARTIAL_OIF_HEADER NDR_PROC_PARTIAL_OIF_HEADER
unsigned char binding_routine_pair_index
Definition: ndr_stubless.h:190
unsigned char param_num
Definition: ndr_stubless.h:224
unsigned char Oi_flags
Definition: ndr_stubless.h:64
unsigned int rpc_flags
Definition: ndr_stubless.h:91
struct _NDR_PARAM_OI_OTHER NDR_PARAM_OI_OTHER
unsigned short offset
Definition: ndr_stubless.h:170
unsigned short stack_size
Definition: ndr_stubless.h:71
#define DECLSPEC_HIDDEN
Definition: precomp.h:8
#define CDECL
Definition: compat.h:21
struct _NDR_PROC_HEADER_RPC NDR_PROC_HEADER_RPC
unsigned char flag_and_size
Definition: ndr_stubless.h:183
unsigned char type_format_char
Definition: ndr_stubless.h:124
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned short type_offset
Definition: ndr_stubless.h:156
PFORMAT_STRING convert_old_args(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, unsigned int stack_size, BOOL object_proc, void *buffer, unsigned int size, unsigned int *count) DECLSPEC_HIDDEN
Definition: ndr_stubless.c:581
unsigned short constant_server_buffer_size
Definition: ndr_stubless.h:105
struct _NDR_EHD_PRIMITIVE NDR_EHD_PRIMITIVE
LONG_PTR CDECL ndr_client_call(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, void **stack_top, void **fpu_stack) DECLSPEC_HIDDEN
Definition: ndr_stubless.c:652
struct _NDR_PARAM_OI_BASETYPE NDR_PARAM_OI_BASETYPE
unsigned short stack_offset
Definition: ndr_stubless.h:149
unsigned char type_format_char
Definition: ndr_stubless.h:153
unsigned short offset
Definition: ndr_stubless.h:215
PARAM_ATTRIBUTES attr
Definition: ndr_stubless.h:147