ReactOS 0.4.15-dev-7788-g1ad9096
client.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "ctx.h"
Include dependency graph for client.c:

Go to the source code of this file.

Classes

struct  _MIDL_TYPE_FORMAT_STRING
 
struct  _MIDL_PROC_FORMAT_STRING
 

Macros

#define TYPE_FORMAT_STRING_SIZE   23
 
#define PROC_FORMAT_STRING_SIZE   21
 
#define TRANSMIT_AS_TABLE_SIZE   0
 
#define WIRE_MARSHAL_TABLE_SIZE   0
 

Typedefs

typedef struct _MIDL_TYPE_FORMAT_STRING MIDL_TYPE_FORMAT_STRING
 
typedef struct _MIDL_PROC_FORMAT_STRING MIDL_PROC_FORMAT_STRING
 

Functions

void m_CtxOpen (PCTXTYPE __RPC_FAR *pphContext, long Value)
 
void m_CtxOpen2 (PCTXTYPE __RPC_FAR *pphContext, long Value)
 
void m_CtxHello (PCTXTYPE phContext)
 
void m_CtxClose (PCTXTYPE __RPC_FAR *pphContext)
 
void interact ()
 
void main (int argc, char **argv)
 
void __RPC_FAR *__RPC_USER midl_user_allocate (size_t len)
 
void __RPC_USER midl_user_free (void __RPC_FAR *ptr)
 

Variables

const MIDL_STUB_DESC hello_StubDesc
 
const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString
 
int interactive = 0
 

Macro Definition Documentation

◆ PROC_FORMAT_STRING_SIZE

#define PROC_FORMAT_STRING_SIZE   21

Definition at line 7 of file client.c.

◆ TRANSMIT_AS_TABLE_SIZE

#define TRANSMIT_AS_TABLE_SIZE   0

Definition at line 8 of file client.c.

◆ TYPE_FORMAT_STRING_SIZE

#define TYPE_FORMAT_STRING_SIZE   23

Definition at line 6 of file client.c.

◆ WIRE_MARSHAL_TABLE_SIZE

#define WIRE_MARSHAL_TABLE_SIZE   0

Definition at line 9 of file client.c.

Typedef Documentation

◆ MIDL_PROC_FORMAT_STRING

◆ MIDL_TYPE_FORMAT_STRING

Function Documentation

◆ interact()

void interact ( )

Definition at line 341 of file client.c.

342{
343 if(interactive)
344 {
345 printf("\nPress any key to continue...");
346 getch();
347 printf("\n\n");
348 }
349}
#define printf
Definition: freeldr.h:93
int interactive
Definition: client.c:340
_Check_return_ _CRTIMP int __cdecl getch(void)

Referenced by main().

◆ m_CtxClose()

void m_CtxClose ( PCTXTYPE __RPC_FAR pphContext)

Definition at line 267 of file client.c.

269{
270
271 RPC_BINDING_HANDLE _Handle = 0;
272
273 RPC_MESSAGE _RpcMessage;
274
275 MIDL_STUB_MESSAGE _StubMsg;
276 char *buf;
277 int i;
278
279 printf("\n*******************************************************************\n");
280 printf("**** CtxClose() ***\n");
281 printf("*******************************************************************\n\n");
282
283 if(!pphContext)
284 {
286 }
288 {
290 ( PRPC_MESSAGE )&_RpcMessage,
291 ( PMIDL_STUB_MESSAGE )&_StubMsg,
293 2);
294
295
296 if(*pphContext != 0)
297 {
298 _Handle = NDRCContextBinding(( NDR_CCONTEXT )*pphContext);;
299
300 }
301
302 _StubMsg.BufferLength = 20U;
303 NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
304
306 ( PMIDL_STUB_MESSAGE )&_StubMsg,
307 ( NDR_CCONTEXT )*pphContext,
308 0);
309
310 NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer );
311
312 if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION )
314
315
316 printf("Before NdrClientContextUnmarshall: Buflen=%d\nBuffer: ", _StubMsg.BufferLength );
317 for(buf = _StubMsg.Buffer, i = 0; i < _StubMsg.BufferLength; i++)
318 printf("0x%x, ", buf[i] & 0x0FF);
319 printf("\n\n");
320
322 ( PMIDL_STUB_MESSAGE )&_StubMsg,
323 ( NDR_CCONTEXT __RPC_FAR * )pphContext,
324 _Handle);
325
326
327 printf("\nNdrClientContextUnmarshall returned: handle=0x%p\n", *pphContext);
328
329
330 }
332 {
333 NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg );
334
335 }
337
338}
void WINAPI NdrClientContextMarshall(PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck)
void WINAPI NdrClientContextUnmarshall(PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT *pContextHandle, RPC_BINDING_HANDLE BindHandle)
void WINAPI NdrConvert(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat)
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
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 const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
const MIDL_STUB_DESC hello_StubDesc
Definition: ctx_c.c:236
const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString
Definition: ctx_c.c:264
void WINAPI NdrClientInitializeNew(PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum)
void WINAPI NdrFreeBuffer(PMIDL_STUB_MESSAGE pStubMsg)
unsigned char *WINAPI NdrGetBuffer(PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle)
unsigned char *WINAPI NdrSendReceive(PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer)
RPC_BINDING_HANDLE WINAPI NDRCContextBinding(NDR_CCONTEXT CContext)
#define NDR_LOCAL_DATA_REPRESENTATION
Definition: rpcndr.h:107
const unsigned char * PFORMAT_STRING
Definition: rpcndr.h:176
void DECLSPEC_NORETURN WINAPI RpcRaiseException(RPC_STATUS exception)
Definition: rpcrt4_main.c:188
#define RpcEndFinally
Definition: rpc.h:131
#define RpcTryFinally
Definition: rpc.h:129
#define __RPC_FAR
Definition: rpc.h:56
#define RpcFinally
Definition: rpc.h:130
unsigned char Format[PROC_FORMAT_STRING_SIZE]
Definition: client.c:20
unsigned char * Buffer
Definition: rpcndr.h:203
ULONG BufferLength
Definition: rpcndr.h:207
ULONG DataRepresentation
Definition: rpcdcep.h:39
#define RPC_X_NULL_REF_POINTER
Definition: winerror.h:1087

Referenced by main().

◆ m_CtxHello()

void m_CtxHello ( PCTXTYPE  phContext)

Definition at line 206 of file client.c.

208{
209
210 RPC_BINDING_HANDLE _Handle = 0;
211
212 RPC_MESSAGE _RpcMessage;
213
214 MIDL_STUB_MESSAGE _StubMsg;
215
216 char *buf;
217 int i;
218
219 printf("\n*******************************************************************\n");
220 printf("**** CtxHello() ***\n");
221 printf("*******************************************************************\n\n");
222
224 {
226 ( PRPC_MESSAGE )&_RpcMessage,
227 ( PMIDL_STUB_MESSAGE )&_StubMsg,
229 1);
230
231
232 if(phContext != 0)
233 {
234 _Handle = NDRCContextBinding(( NDR_CCONTEXT )phContext);;
235
236 }
237 else
238 {
240 }
241
242 _StubMsg.BufferLength = 20U;
243 NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
244
246 ( PMIDL_STUB_MESSAGE )&_StubMsg,
247 ( NDR_CCONTEXT )phContext,
248 1);
249 printf("After NdrClientContextMarshall: Buflen=%d\nBuffer: ", _StubMsg.BufferLength );
250 for(buf = _StubMsg.Buffer, i = 0; i < _StubMsg.BufferLength; i++)
251 printf("0x%x, ", buf[i] & 0x0FF);
252 printf("\n\n");
253
254 NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer );
255
256 }
258 {
259 NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg );
260
261 }
263
264}
#define RPC_X_SS_IN_NULL_CONTEXT
Definition: winerror.h:1083

Referenced by main().

◆ m_CtxOpen()

void m_CtxOpen ( PCTXTYPE __RPC_FAR pphContext,
long  Value 
)

Definition at line 32 of file client.c.

35{
36 RPC_BINDING_HANDLE _Handle = 0;
37
38 RPC_MESSAGE _RpcMessage;
39
40 MIDL_STUB_MESSAGE _StubMsg;
41
42 char *ctx, *buf;
43 int i;
44
45 printf("\n*******************************************************************\n");
46 printf("**** CtxOpen() ***\n");
47 printf("*******************************************************************\n\n");
48
49 if(!pphContext)
50 {
52 }
54 {
56 ( PRPC_MESSAGE )&_RpcMessage,
57 ( PMIDL_STUB_MESSAGE )&_StubMsg,
59 0);
60
61
62 _Handle = hBinding;
63
64
65 _StubMsg.BufferLength = 4U;
66 NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
67
68 *(( long __RPC_FAR * )_StubMsg.Buffer)++ = Value;
69
70 NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer );
71
72 if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION )
74
75
76 printf("Before NdrClientContextUnmarshall: Buflen=%d\nBuffer: ", _StubMsg.RpcMsg->BufferLength);
77 for(buf = _StubMsg.Buffer, i = 0; i < _StubMsg.RpcMsg->BufferLength; i++)
78 printf("0x%x, ", buf[i] & 0x0FF);
79 printf("\n\n");
80
81 *pphContext = (void *)0;
83 ( PMIDL_STUB_MESSAGE )&_StubMsg,
84 ( NDR_CCONTEXT __RPC_FAR * )pphContext,
85 _Handle);
86
87 ctx = (char*)*pphContext;
88 printf("\nNdrClientContextUnmarshall returned: handle=0x%p\n", ctx);
89 printf("00: 0x%x <- obviously pointer to binding handle copyed from _Handle\n", *((int*)ctx));
90 ctx+=4;
91 printf("04: 0x%x <- unknown field\n", *((int*)ctx));
92 printf("08: ");
93
94 for(ctx+=4, i = 0; i < 20; i++)
95 printf("0x%x,", *(ctx+i) & 0x0FF); printf(" <- ndr 20 bytes\n\n");
96
97 printf("Buflen=%d, Buffer: ", _StubMsg.BufferLength);
98 for(buf = _StubMsg.BufferStart; buf < _StubMsg.BufferEnd; buf++)
99 printf("0x%x,", *buf & 0x0FF);
100 printf("\n");
101
102
103 }
105 {
106 NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg );
107
108 }
110
111}
handle_t hBinding
Definition: ctx_c.c:54
unsigned char * BufferEnd
Definition: rpcndr.h:205
PRPC_MESSAGE RpcMsg
Definition: rpcndr.h:202
unsigned char * BufferStart
Definition: rpcndr.h:204
unsigned int BufferLength
Definition: rpcdcep.h:41
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
Definition: wdfdevice.h:3771
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

Referenced by main().

◆ m_CtxOpen2()

void m_CtxOpen2 ( PCTXTYPE __RPC_FAR pphContext,
long  Value 
)

Definition at line 113 of file client.c.

116{
117
118 RPC_BINDING_HANDLE _Handle = 0;
119
120 RPC_MESSAGE _RpcMessage;
121
122 MIDL_STUB_MESSAGE _StubMsg;
123
124 char buf[255];
125
127 ( PRPC_MESSAGE )&_RpcMessage,
128 ( PMIDL_STUB_MESSAGE )&_StubMsg,
130 0);
131
132
133 _Handle = hBinding;
134
135
136 _StubMsg.BufferLength = 4U;
137 NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
138
139 *(( long __RPC_FAR * )_StubMsg.Buffer)++ = Value;
140
141 NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer );
142
143 if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION )
145
146 *pphContext = (void *)0;
147
149 {
151 ( PMIDL_STUB_MESSAGE )&_StubMsg,
152 NULL,
153 _Handle);
154 }
155 RpcExcept(1)
156 {
157 printf("NdrClientContextUnmarshall reported exception = %d\n", RpcExceptionCode());
158 }
160
161
162
164 {
166 ( PMIDL_STUB_MESSAGE )&_StubMsg,
167 (NDR_CCONTEXT __RPC_FAR * )pphContext,
168 NULL);
169 }
170 RpcExcept(1)
171 {
172 printf("NdrClientContextUnmarshall reported exception = %d\n", RpcExceptionCode());
173 }
175
176
178 {
180 ( PMIDL_STUB_MESSAGE )&_StubMsg,
181 NULL,
182 1);
183 }
184 RpcExcept(1)
185 {
186 printf("NdrClientContextMarshall reported exception = %d\n", RpcExceptionCode());
187 }
189
191 {
192 NDRCContextUnmarshall( NULL, _Handle, buf, _RpcMessage.DataRepresentation );
193 }
194 RpcExcept(1)
195 {
196 printf("NDRCContextUnmarshall reported exception = %d\n", RpcExceptionCode());
197 }
199
200
201 NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg );
202
203
204}
#define NULL
Definition: types.h:112
void WINAPI NDRCContextUnmarshall(NDR_CCONTEXT *CContext, RPC_BINDING_HANDLE hBinding, void *pBuff, ULONG DataRepresentation)
#define RpcEndExcept
Definition: rpc.h:128
#define RpcTryExcept
Definition: rpc.h:126
#define RpcExcept(expr)
Definition: rpc.h:127
#define RpcExceptionCode()
Definition: rpc.h:132

Referenced by main().

◆ main()

void main ( int argc  ,
char **  argv 
)

Definition at line 351 of file client.c.

352{
354 unsigned long ulCode;
355 PCTXTYPE hContext;
356 char *pszStringBinding = NULL;
358 char buffer[255];
359
360 int test_num = 0;
361 int test_value = 31337;
362
363 if(argc<2)
364 {
365 printf("USAGE: client.exe <test_number> [test_value] [interactive]\n"
366 "Available tests:\n"
367 "0. General test\n"
368 "1. NULL pointer test\n"
369 "2. Context rundown routine");
370 return;
371 }
372
373 test_num = atoi(argv[1]);
374 if(argc>2) test_value = atoi(argv[2]);
375 if(argc>3) interactive = 1;
376
378 "ncacn_np",
379 NULL,
380 "\\pipe\\hello",
381 NULL,
382 &pszStringBinding);
383
384 if (status)
385 {
386 printf("RpcStringBindingCompose %x\n", status);
387 exit(status);
388 }
389
390 status = RpcBindingFromStringBinding(pszStringBinding, &hBinding);
391
392 if (status)
393 {
394 printf("RpcBindingFromStringBinding %x\n", status);
395 exit(status);
396 }
397
398 RpcStringFree(&pszStringBinding);
399
400 switch(test_num)
401 {
402 case 0:
403 m_CtxOpen(&hContext, test_value);
405 m_CtxHello(hContext);
406 interact();
407 m_CtxClose(&hContext);
408 break;
409 case 1:
412 {
414 printf("NDRCContextBinding(NULL) returned %p\n", Handle);
415 }
416 RpcExcept(1)
417 {
418 printf("NDRCContextBinding(NULL) reported exception = %d\n", RpcExceptionCode());
419 }
421
422 m_CtxOpen2(&hContext, test_value);
423
426 {
428 printf("NDRCContextMarshall(NULL) returned %p\n", Handle);
429 }
430 RpcExcept(1)
431 {
432 printf("NDRCContextMarshall(NULL) reported exception = %d\n", RpcExceptionCode());
433 }
436 break;
437 case 2:
438 CtxOpen(&hContext, test_value);
439 interact();
440 ExitProcess(0);
441 break;
442 default:
443 printf("Unknown test %d\n", test_num);
444 }
445
446}
static int argc
Definition: ServiceArgs.c:12
void CtxOpen(PCTXTYPE __RPC_FAR *pphContext, long Value)
Definition: ctx_c.c:76
CTXTYPE __RPC_FAR * PCTXTYPE
Definition: ctx.h:48
VOID WINAPI ExitProcess(IN UINT uExitCode)
Definition: proc.c:1487
ULONG Handle
Definition: gdb_input.c:15
GLuint buffer
Definition: glext.h:5915
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
void m_CtxHello(PCTXTYPE phContext)
Definition: client.c:206
void m_CtxOpen2(PCTXTYPE __RPC_FAR *pphContext, long Value)
Definition: client.c:113
void m_CtxClose(PCTXTYPE __RPC_FAR *pphContext)
Definition: client.c:267
void m_CtxOpen(PCTXTYPE __RPC_FAR *pphContext, long Value)
Definition: client.c:32
void interact()
Definition: client.c:341
static int test_value
Definition: signal.c:25
#define argv
Definition: mplay32.c:18
void WINAPI NDRCContextMarshall(NDR_CCONTEXT CContext, void *pBuff)
RPC_STATUS WINAPI RpcBindingFree(RPC_BINDING_HANDLE *Binding)
Definition: rpc_binding.c:787
#define RpcStringBindingCompose
Definition: rpcdce.h:370
#define RpcBindingFromStringBinding
Definition: rpcdce.h:353
#define RpcStringFree
Definition: rpcdce.h:592
long RPC_STATUS
Definition: rpc.h:52
#define exit(n)
Definition: config.h:202
Definition: ps.c:97

◆ midl_user_allocate()

void __RPC_FAR *__RPC_USER midl_user_allocate ( size_t  len)

Definition at line 449 of file client.c.

450{
451 return(malloc(len));
452}
#define malloc
Definition: debug_ros.c:4
GLenum GLsizei len
Definition: glext.h:6722

◆ midl_user_free()

void __RPC_USER midl_user_free ( void __RPC_FAR ptr)

Definition at line 454 of file client.c.

455{
456 free(ptr);
457}
#define free
Definition: debug_ros.c:5
static PVOID ptr
Definition: dispmode.c:27

Variable Documentation

◆ __MIDL_ProcFormatString

static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString
extern

◆ hello_StubDesc

static const MIDL_STUB_DESC hello_StubDesc
extern
Initial value:
=
{
0,
0,
0,
0,
1,
0x10001,
0,
0x5030118,
0,
0,
0,
0x1,
0,
0,
0
}
const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString
Definition: ctx_c.c:305
static const RPC_CLIENT_INTERFACE hello___RpcClientInterface
Definition: ctx_c.c:57
void *__RPC_USER MIDL_user_allocate(SIZE_T size)
Definition: irotp.c:371
void __RPC_USER MIDL_user_free(void *p)
Definition: irotp.c:376
unsigned char Format[TYPE_FORMAT_STRING_SIZE]
Definition: client.c:14

Definition at line 236 of file ctx_c.c.

Referenced by CtxClose(), CtxHello(), CtxOpen(), hello_CtxClose(), hello_CtxHello(), hello_CtxOpen(), m_CtxClose(), m_CtxHello(), m_CtxOpen(), and m_CtxOpen2().

◆ interactive

int interactive = 0

Definition at line 340 of file client.c.

Referenced by interact(), and main().