ReactOS 0.4.16-dev-1948-gd260c1d
ndr_stubless.h File Reference
#include "ndrtypes.h"
#include "pshpack1.h"
#include "poppack.h"
Include dependency graph for ndr_stubless.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _NDR_PROC_HEADER
 
struct  _NDR_PROC_HEADER_RPC
 
struct  _NDR_PROC_PARTIAL_OIF_HEADER
 
struct  _NDR_PARAM_OI_BASETYPE
 
struct  _NDR_PARAM_OI_OTHER
 
struct  NDR_PARAM_OIF
 
struct  _NDR_EHD_PRIMITIVE
 
struct  _NDR_EHD_GENERIC
 
struct  _NDR_EHD_CONTEXT
 
struct  async_call_data
 

Typedefs

typedef struct _NDR_PROC_HEADER NDR_PROC_HEADER
 
typedef struct _NDR_PROC_HEADER_RPC NDR_PROC_HEADER_RPC
 
typedef struct _NDR_PROC_PARTIAL_OIF_HEADER NDR_PROC_PARTIAL_OIF_HEADER
 
typedef struct _NDR_PARAM_OI_BASETYPE NDR_PARAM_OI_BASETYPE
 
typedef struct _NDR_PARAM_OI_OTHER NDR_PARAM_OI_OTHER
 
typedef struct _NDR_EHD_PRIMITIVE NDR_EHD_PRIMITIVE
 
typedef struct _NDR_EHD_GENERIC NDR_EHD_GENERIC
 
typedef struct _NDR_EHD_CONTEXT NDR_EHD_CONTEXT
 

Enumerations

enum  stubless_phase {
  STUBLESS_UNMARSHAL , STUBLESS_INITOUT , STUBLESS_CALLSERVER , STUBLESS_CALCSIZE ,
  STUBLESS_GETBUFFER , STUBLESS_MARSHAL , STUBLESS_MUSTFREE , STUBLESS_FREE
}
 

Functions

void client_do_args (PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, enum stubless_phase phase, BOOLEAN fpu_args, unsigned short number_of_params, unsigned char *pRetVal)
 
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)
 
RPC_STATUS NdrpCompleteAsyncClientCall (RPC_ASYNC_STATE *pAsync, void *Reply)
 
RPC_STATUS NdrpCompleteAsyncServerCall (RPC_ASYNC_STATE *pAsync, void *Reply)
 

Typedef Documentation

◆ NDR_EHD_CONTEXT

◆ NDR_EHD_GENERIC

◆ NDR_EHD_PRIMITIVE

◆ NDR_PARAM_OI_BASETYPE

◆ NDR_PARAM_OI_OTHER

◆ NDR_PROC_HEADER

◆ NDR_PROC_HEADER_RPC

◆ NDR_PROC_PARTIAL_OIF_HEADER

Enumeration Type Documentation

◆ stubless_phase

Enumerator
STUBLESS_UNMARSHAL 
STUBLESS_INITOUT 
STUBLESS_CALLSERVER 
STUBLESS_CALCSIZE 
STUBLESS_GETBUFFER 
STUBLESS_MARSHAL 
STUBLESS_MUSTFREE 
STUBLESS_FREE 

Definition at line 246 of file ndr_stubless.h.

247{
256};
@ STUBLESS_INITOUT
Definition: ndr_stubless.h:249
@ STUBLESS_GETBUFFER
Definition: ndr_stubless.h:252
@ STUBLESS_MARSHAL
Definition: ndr_stubless.h:253
@ STUBLESS_CALCSIZE
Definition: ndr_stubless.h:251
@ STUBLESS_UNMARSHAL
Definition: ndr_stubless.h:248
@ STUBLESS_CALLSERVER
Definition: ndr_stubless.h:250
@ STUBLESS_MUSTFREE
Definition: ndr_stubless.h:254
@ STUBLESS_FREE
Definition: ndr_stubless.h:255

Function Documentation

◆ client_do_args()

void client_do_args ( PMIDL_STUB_MESSAGE  pStubMsg,
PFORMAT_STRING  pFormat,
enum stubless_phase  phase,
BOOLEAN  fpu_args,
unsigned short  number_of_params,
unsigned char pRetVal 
)

Definition at line 484 of file ndr_stubless.c.

486{
487 const NDR_PARAM_OIF *params = (const NDR_PARAM_OIF *)pFormat;
488 unsigned int i;
489
490 for (i = 0; i < number_of_params; i++)
491 {
492 unsigned char *pArg = pStubMsg->StackTop + params[i].stack_offset;
493 PFORMAT_STRING pTypeFormat = (PFORMAT_STRING)&pStubMsg->StubDesc->pFormatTypes[params[i].u.type_offset];
494
495#ifndef __i386__ /* floats are passed as doubles through varargs functions */
496 float f;
497
498 if (params[i].attr.IsBasetype &&
499 params[i].u.type_format_char == FC_FLOAT &&
500 !params[i].attr.IsSimpleRef &&
501 !fpu_args)
502 {
503 f = *(double *)pArg;
504 pArg = (unsigned char *)&f;
505 }
506#endif
507
508 TRACE("param[%d]: %p type %02x %s\n", i, pArg,
509 params[i].attr.IsBasetype ? params[i].u.type_format_char : *pTypeFormat,
511
512 switch (phase)
513 {
514 case STUBLESS_INITOUT:
515 if (*(unsigned char **)pArg)
516 {
518 memset( *(unsigned char **)pArg, 0, calc_arg_size( pStubMsg, pTypeFormat ));
520 memset( *(unsigned char **)pArg, 0, basetype_arg_size( params[i].u.type_format_char ));
521 }
522 break;
524 if (params[i].attr.IsSimpleRef && !*(unsigned char **)pArg)
526 if (params[i].attr.IsIn) call_buffer_sizer(pStubMsg, pArg, &params[i]);
527 break;
528 case STUBLESS_MARSHAL:
529 if (params[i].attr.IsIn) call_marshaller(pStubMsg, pArg, &params[i]);
530 break;
532 if (params[i].attr.IsOut)
533 {
534 if (params[i].attr.IsReturn && pRetVal) pArg = pRetVal;
535 call_unmarshaller(pStubMsg, &pArg, &params[i], 0);
536 }
537 break;
538 case STUBLESS_FREE:
539 if (!params[i].attr.IsBasetype && params[i].attr.IsOut && !params[i].attr.IsByValue)
540 NdrClearOutParameters( pStubMsg, pTypeFormat, *(unsigned char **)pArg );
541 break;
542 default:
544 }
545 }
546}
void WINAPI NdrClearOutParameters(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr)
GLfloat f
Definition: glext.h:7540
GLenum const GLfloat * params
Definition: glext.h:5645
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
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
if(dx< 0)
Definition: linetemp.h:194
static unsigned char * call_unmarshaller(PMIDL_STUB_MESSAGE pStubMsg, unsigned char **ppMemory, const NDR_PARAM_OIF *param, unsigned char fMustAlloc)
Definition: ndr_stubless.c:108
static BOOL param_needs_alloc(PARAM_ATTRIBUTES attr)
Definition: ndr_stubless.c:440
static DWORD calc_arg_size(MIDL_STUB_MESSAGE *pStubMsg, PFORMAT_STRING pFormat)
Definition: ndr_stubless.c:149
static unsigned char * call_marshaller(PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pMemory, const NDR_PARAM_OIF *param)
Definition: ndr_stubless.c:81
static const char * debugstr_PROC_PF(PARAM_ATTRIBUTES param_attributes)
Definition: ndr_stubless.c:240
static BOOL param_is_out_basetype(PARAM_ATTRIBUTES attr)
Definition: ndr_stubless.c:445
static void call_buffer_sizer(PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pMemory, const NDR_PARAM_OIF *param)
Definition: ndr_stubless.c:55
static size_t basetype_arg_size(unsigned char fc)
Definition: ndr_stubless.c:450
@ FC_FLOAT
Definition: ndrtypes.h:144
const unsigned char * PFORMAT_STRING
Definition: rpcndr.h:159
void DECLSPEC_NORETURN WINAPI RpcRaiseException(RPC_STATUS exception)
Definition: rpcrt4_main.c:213
#define memset(x, y, z)
Definition: compat.h:39
#define TRACE(s)
Definition: solgame.cpp:4
unsigned char * StackTop
Definition: rpcndr.h:209
const struct _MIDL_STUB_DESC * StubDesc
Definition: rpcndr.h:213
Definition: cookie.c:202
#define RPC_X_NULL_REF_POINTER
Definition: winerror.h:1444
#define RPC_S_INTERNAL_ERROR
Definition: winerror.h:1431

Referenced by do_ndr_async_client_call(), ndr_client_call(), NdrMesProcEncodeDecode(), NdrpClientCall2(), and NdrpCompleteAsyncClientCall().

◆ convert_old_args()

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 
)

Definition at line 596 of file ndr_stubless.c.

599{
601 unsigned int i, stack_offset = object_proc ? sizeof(void *) : 0;
602
603 for (i = 0; stack_offset < stack_size; i++)
604 {
605 const NDR_PARAM_OI_BASETYPE *param = (const NDR_PARAM_OI_BASETYPE *)pFormat;
606 const NDR_PARAM_OI_OTHER *other = (const NDR_PARAM_OI_OTHER *)pFormat;
607
608 if (i + 1 > size / sizeof(*args))
609 {
610 FIXME( "%u args not supported\n", i );
612 }
613
614 args[i].stack_offset = stack_offset;
615 memset( &args[i].attr, 0, sizeof(args[i].attr) );
616
617 switch (param->param_direction)
618 {
620 args[i].attr.IsIn = 1;
621 args[i].attr.IsBasetype = 1;
622 break;
624 args[i].attr.IsOut = 1;
625 args[i].attr.IsReturn = 1;
626 args[i].attr.IsBasetype = 1;
627 break;
628 case FC_IN_PARAM:
629 args[i].attr.IsIn = 1;
630 args[i].attr.MustFree = 1;
631 break;
633 args[i].attr.IsIn = 1;
634 args[i].attr.IsDontCallFreeInst = 1;
635 break;
636 case FC_IN_OUT_PARAM:
637 args[i].attr.IsIn = 1;
638 args[i].attr.IsOut = 1;
639 args[i].attr.MustFree = 1;
640 break;
641 case FC_OUT_PARAM:
642 args[i].attr.IsOut = 1;
643 break;
644 case FC_RETURN_PARAM:
645 args[i].attr.IsOut = 1;
646 args[i].attr.IsReturn = 1;
647 break;
648 }
649 if (args[i].attr.IsBasetype)
650 {
651 args[i].u.type_format_char = param->type_format_char;
652 stack_offset += type_stack_size( param->type_format_char );
653 pFormat += sizeof(NDR_PARAM_OI_BASETYPE);
654 }
655 else
656 {
657 args[i].u.type_offset = other->type_offset;
658 args[i].attr.IsByValue = is_by_value( &pStubMsg->StubDesc->pFormatTypes[other->type_offset] );
659 stack_offset += other->stack_size * sizeof(void *);
660 pFormat += sizeof(NDR_PARAM_OI_OTHER);
661 }
662 }
663 *count = i;
664 return (PFORMAT_STRING)args;
665}
#define FIXME(fmt,...)
Definition: precomp.h:53
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLfloat param
Definition: glext.h:5796
int other
Definition: msacm.c:1376
static BOOL is_by_value(PFORMAT_STRING format)
Definition: ndr_stubless.c:579
static unsigned int type_stack_size(unsigned char fc)
Definition: ndr_stubless.c:548
struct _NDR_PARAM_OI_OTHER NDR_PARAM_OI_OTHER
struct _NDR_PARAM_OI_BASETYPE NDR_PARAM_OI_BASETYPE
@ FC_RETURN_PARAM_BASETYPE
Definition: ndrtypes.h:241
@ FC_IN_PARAM_NO_FREE_INST
Definition: ndrtypes.h:237
@ FC_OUT_PARAM
Definition: ndrtypes.h:239
@ FC_RETURN_PARAM
Definition: ndrtypes.h:240
@ FC_IN_OUT_PARAM
Definition: ndrtypes.h:238
@ FC_IN_PARAM_BASETYPE
Definition: ndrtypes.h:236
@ FC_IN_PARAM
Definition: ndrtypes.h:235
#define args
Definition: format.c:66
Definition: match.c:390
static unsigned stack_offset(compile_ctx_t *ctx)
Definition: compile.c:349

Referenced by do_ndr_async_client_call(), NdrAsyncServerCall(), NdrMesProcEncodeDecode(), NdrpClientCall2(), and NdrStubCall2().

◆ NdrpCompleteAsyncClientCall()

RPC_STATUS NdrpCompleteAsyncClientCall ( RPC_ASYNC_STATE pAsync,
void Reply 
)

Definition at line 1755 of file ndr_stubless.c.

1756{
1757 /* pointer to start of stack where arguments start */
1758 PMIDL_STUB_MESSAGE pStubMsg;
1760 /* header for procedure string */
1763
1764 if (!pAsync->StubInfo)
1766
1767 async_call_data = pAsync->StubInfo;
1770
1771 /* order of phases:
1772 * 1. CALCSIZE - calculate the buffer size
1773 * 2. GETBUFFER - allocate the buffer
1774 * 3. MARSHAL - marshal [in] params into the buffer
1775 * 4. SENDRECEIVE - send buffer
1776 * Then in NdrpCompleteAsyncClientCall:
1777 * 1. SENDRECEIVE - receive buffer
1778 * 2. UNMARSHAL - unmarshal [out] params from buffer
1779 */
1780
1781 /* 1. SENDRECEIVE */
1782 TRACE( "RECEIVE\n" );
1784 /* receive the [out] params */
1786#if 0
1787 NdrNsReceive(&stubMsg, stubMsg.Buffer, pStubDesc->IMPLICIT_HANDLE_INFO.pAutoHandle);
1788#else
1789 FIXME("using auto handle - call NdrNsReceive when it gets implemented\n");
1790#endif
1791 else
1792 {
1794 if (status != RPC_S_OK)
1795 goto cleanup;
1800 }
1801
1802 /* convert strings, floating point values and endianness into our
1803 * preferred format */
1804#if 0
1806 NdrConvert(pStubMsg, pFormat);
1807#endif
1808
1809 /* 2. UNMARSHAL */
1810 TRACE( "UNMARSHAL\n" );
1813
1814cleanup:
1816 {
1817 /* free extra correlation package */
1819 }
1820
1821 /* free the full pointer translation tables */
1824
1825 /* free marshalling buffer */
1828
1831
1832 TRACE("-- 0x%lx\n", status);
1833 return status;
1834}
#define FALSE
Definition: types.h:117
static void cleanup(void)
Definition: main.c:1335
void WINAPI NdrCorrelationFree(PMIDL_STUB_MESSAGE pStubMsg)
void WINAPI NdrConvert(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat)
void WINAPI NdrFreeBuffer(PMIDL_STUB_MESSAGE pStubMsg)
void WINAPI NdrFullPointerXlatFree(PFULL_PTR_XLAT_TABLES pXlatTables)
void client_do_args(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, enum stubless_phase phase, BOOLEAN fpu_args, unsigned short number_of_params, unsigned char *pRetVal)
Definition: ndr_stubless.c:484
static void client_free_handle(PMIDL_STUB_MESSAGE pStubMsg, const NDR_PROC_HEADER *pProcHeader, PFORMAT_STRING pFormat, handle_t hBinding)
Definition: ndr_stubless.c:385
#define Oi_FULL_PTR_USED
Definition: ndrtypes.h:290
@ FC_AUTO_HANDLE
Definition: ndrtypes.h:195
RPC_STATUS WINAPI I_RpcReceive(PRPC_MESSAGE pMsg)
Definition: rpc_message.c:1853
#define RPC_BUFFER_ASYNC
Definition: rpcdcep.h:70
#define NDR_LOCAL_DATA_REPRESENTATION
Definition: rpcndr.h:68
#define RPC_S_OK
Definition: rpcnterr.h:22
void WINAPI I_RpcFree(void *Object)
Definition: rpcrt4_main.c:755
long RPC_STATUS
Definition: rpc.h:48
unsigned char * Buffer
Definition: rpcndr.h:186
struct _FULL_PTR_XLAT_TABLES * FullPtrXlatTables
Definition: rpcndr.h:214
ULONG BufferLength
Definition: rpcndr.h:190
unsigned char * BufferEnd
Definition: rpcndr.h:188
PRPC_MESSAGE RpcMsg
Definition: rpcndr.h:185
unsigned char * BufferStart
Definition: rpcndr.h:187
unsigned int fHasNewCorrDesc
Definition: rpcndr.h:222
unsigned char Oi_flags
Definition: ndr_stubless.h:64
unsigned char handle_type
Definition: ndr_stubless.h:43
void * StubInfo
Definition: rpcasync.h:158
unsigned int BufferLength
Definition: rpcdcep.h:41
void * Buffer
Definition: rpcdcep.h:40
ULONG DataRepresentation
Definition: rpcdcep.h:39
ULONG RpcFlags
Definition: rpcdcep.h:48
RPC_BINDING_HANDLE hBinding
Definition: ndr_stubless.h:235
MIDL_STUB_MESSAGE * pStubMsg
Definition: ndr_stubless.h:231
PFORMAT_STRING pHandleFormat
Definition: ndr_stubless.h:233
PFORMAT_STRING pParamFormat
Definition: ndr_stubless.h:234
unsigned int number_of_params
Definition: ndr_stubless.h:239
const NDR_PROC_HEADER * pProcHeader
Definition: ndr_stubless.h:232
Definition: ps.c:97
#define RPC_S_INVALID_ASYNC_HANDLE
Definition: winerror.h:1517

Referenced by RpcAsyncCompleteCall().

◆ NdrpCompleteAsyncServerCall()

RPC_STATUS NdrpCompleteAsyncServerCall ( RPC_ASYNC_STATE pAsync,
void Reply 
)

Definition at line 2097 of file ndr_stubless.c.

2098{
2099 /* pointer to start of stack where arguments start */
2100 PMIDL_STUB_MESSAGE pStubMsg;
2102 /* the type of pass we are currently doing */
2103 enum stubless_phase phase;
2105
2106 if (!pAsync->StubInfo)
2108
2109 async_call_data = pAsync->StubInfo;
2111
2112 TRACE("pAsync %p, pAsync->StubInfo %p, pFormat %p\n", pAsync, pAsync->StubInfo, async_call_data->pHandleFormat);
2113
2115 {
2116 TRACE("stub implementation returned 0x%Ix\n", *(LONG_PTR *)Reply);
2117 *async_call_data->retval_ptr = *(LONG_PTR *)Reply;
2118 }
2119 else
2120 TRACE("void stub implementation\n");
2121
2122 for (phase = STUBLESS_CALCSIZE; phase <= STUBLESS_FREE; phase++)
2123 {
2124 TRACE("phase = %d\n", phase);
2125 switch (phase)
2126 {
2127 case STUBLESS_GETBUFFER:
2129 {
2130 ERR("objects not supported\n");
2133 I_RpcFree(pAsync);
2135 }
2136 else
2137 {
2139 /* allocate buffer for [out] and [ret] params */
2141 if (status)
2144 }
2145 break;
2146
2147 case STUBLESS_CALCSIZE:
2148 case STUBLESS_MARSHAL:
2149 case STUBLESS_MUSTFREE:
2150 case STUBLESS_FREE:
2152 break;
2153 default:
2154 ERR("shouldn't reach here. phase %d\n", phase);
2155 break;
2156 }
2157 }
2158
2159#if 0 /* FIXME */
2160 if (ext_flags.HasNewCorrDesc)
2161 {
2162 /* free extra correlation package */
2164 }
2165
2166 if (Oif_flags.HasPipes)
2167 {
2168 /* NdrPipesDone(...) */
2169 }
2170
2171 /* free the full pointer translation tables */
2174#endif
2175
2176 /* free server function stack */
2179 I_RpcFree(pAsync);
2180
2181 return S_OK;
2182}
#define ERR(fmt,...)
Definition: precomp.h:57
#define free
Definition: debug_ros.c:5
#define S_OK
Definition: intsafe.h:52
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
static LONG_PTR * stub_do_args(MIDL_STUB_MESSAGE *pStubMsg, PFORMAT_STRING pFormat, enum stubless_phase phase, unsigned short number_of_params)
stubless_phase
Definition: ndr_stubless.h:247
#define Oi_OBJECT_PROC
Definition: ndrtypes.h:292
RPC_STATUS WINAPI I_RpcGetBuffer(PRPC_MESSAGE pMsg)
Definition: rpc_message.c:1634
LONG_PTR * retval_ptr
Definition: ndr_stubless.h:241
#define RPC_X_BAD_STUB_DATA
Definition: winerror.h:1447

Referenced by RpcAsyncCompleteCall().