28#define USE_STUBLESS_PROXY
43#define WRITE_CHAR(str, len, val) \
44 do { if ((str)) (str)[(len)] = (val); (len)++; } while (0)
45#define WRITE_SHORT(str, len, val) \
46 do { if ((str)) *((short *)((str) + (len))) = (val); (len) += 2; } while (0)
47#define WRITE_INT(str, len, val) \
48 do { if ((str)) *((int *)((str) + (len))) = (val); (len) += 4; } while (0)
49#define ROUND_SIZE(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1))
61 const unsigned char *
format =
proxy->ProcFormatString +
proxy->FormatStringOffset[3];
72 if (
header->Oi2Flags.HasExtensions)
77 *nb_params =
header->number_of_params;
83 unsigned int nb_params;
92 unsigned int nb_params;
137 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
138 ITypeInfo_GetTypeAttr(refinfo, &
attr);
145 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
146 ITypeInfo_Release(refinfo);
197 for (
i = 0;
i <
desc->lpadesc->cDims;
i++)
198 size *=
desc->lpadesc->rgbounds[
i].cElements;
206 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
207 ITypeInfo_GetTypeAttr(refinfo, &
attr);
210 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
211 ITypeInfo_Release(refinfo);
218 if (align_ret) *align_ret =
align;
230 ITypeInfo_GetRefTypeInfo(
typeinfo, tdesc->hreftype, &refinfo);
231 ITypeInfo_GetTypeAttr(refinfo, &
attr);
240 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
241 ITypeInfo_Release(refinfo);
278 ITypeInfo_GetRefTypeInfo(
typeinfo, tdesc->hreftype, &refinfo);
279 ITypeInfo_GetTypeAttr(refinfo, &
attr);
281 switch (
attr->typekind)
298 FIXME(
"Unhandled kind %#x.\n",
attr->typekind);
303 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
304 ITypeInfo_Release(refinfo);
311 FIXME(
"Unhandled type %u.\n", tdesc->vt);
325 for (
i = 0;
i <
attr->cVars;
i++)
355 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
356 ITypeInfo_GetTypeAttr(refinfo, &
attr);
367 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
368 ITypeInfo_Release(refinfo);
387 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
388 ITypeInfo_GetTypeAttr(refinfo, &
attr);
395 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
396 ITypeInfo_Release(refinfo);
407 unsigned int struct_offset = 0;
408 unsigned char basetype;
413 for (
i = 0;
i <
attr->cVars;
i++)
416 tdesc = &
desc->elemdescVar.tdesc;
418 if (struct_offset !=
desc->oInst)
456 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
457 ITypeInfo_GetTypeAttr(refinfo, &
attr);
462 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
463 ITypeInfo_Release(refinfo);
472 TYPEDESC *
desc,
unsigned char *
str,
size_t *
len)
474 unsigned char basetype;
499 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
500 ITypeInfo_GetTypeAttr(refinfo, &
attr);
505 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
506 ITypeInfo_Release(refinfo);
511 TYPEDESC *
desc,
unsigned char *
str,
size_t *
len)
524 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
525 ITypeInfo_GetTypeAttr(refinfo, &
attr);
530 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
531 ITypeInfo_Release(refinfo);
542 size_t pointer_layout_offset, pointer_layout, member_layout,
ref;
543 unsigned int struct_offset = 0;
549 pointer_layout_offset = *
len;
551 member_layout = *
len;
560 pointer_layout = *
len;
561 if (
str) *((
short *)(
str + pointer_layout_offset)) = pointer_layout - pointer_layout_offset;
563 for (
i = 0;
i <
attr->cVars;
i++)
574 for (
i = 0;
i <
attr->cVars;
i++)
577 tdesc = &
desc->elemdescVar.tdesc;
579 if (struct_offset !=
desc->oInst)
590 if (
str) *((
short *)(
str + pointer_layout + 2)) =
ref - (pointer_layout + 2);
597 if (
str) *((
short *)(
str + member_layout + 2)) =
ref - (member_layout + 2);
631 unsigned char basetype;
685 *
len += 2 +
sizeof(*iid);
700 if (
flags & IMPLTYPEFLAG_FDEFAULT)
708 ITypeInfo_GetRefTypeOfImplType(
typeinfo,
i, &reftype);
709 ITypeInfo_GetRefTypeInfo(
typeinfo, reftype, &refinfo);
710 ITypeInfo_GetTypeAttr(refinfo, &
attr);
712 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
713 ITypeInfo_Release(refinfo);
719 unsigned char basetype,
flags = 0;
727 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
728 ITypeInfo_GetTypeAttr(refinfo, &
attr);
730 switch (
attr->typekind)
759 FIXME(
"unhandled kind %#x\n",
attr->typekind);
764 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
765 ITypeInfo_Release(refinfo);
813 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
814 ITypeInfo_GetTypeAttr(refinfo, &
attr);
816 switch (
attr->typekind)
836 FIXME(
"unhandled kind %u\n",
attr->typekind);
842 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
843 ITypeInfo_Release(refinfo);
859 unsigned int size = *
align =
sizeof(
void *);
889 *
align =
sizeof(
void *);
895#elif defined __aarch64__
896 byval = (
size <= 16);
899 if (!byval)
size = *
align =
sizeof(
void *);
900 else if (*
align <
sizeof(
void *)) *
align =
sizeof(
void *);
901 if (by_value) *by_value = byval;
907static const unsigned short IsIn = 0x0008;
908static const unsigned short IsOut = 0x0010;
915 int is_out,
unsigned short *server_size,
unsigned short *
flags,
916 unsigned char *basetype, TYPEDESC **tfs_tdesc)
928 *server_size =
sizeof(
void *);
935 *server_size =
sizeof(
void *);
938 *server_size =
sizeof(
void *);
946 ITypeInfo_GetRefTypeInfo(
typeinfo, tdesc->hreftype, &refinfo);
947 ITypeInfo_GetTypeAttr(refinfo, &
attr);
949 switch (
attr->typekind)
953 if (!is_in && is_out)
954 *server_size =
sizeof(
void *);
959 if (!is_in && is_out)
960 *server_size =
attr->cbSizeInstance;
970 is_out, server_size,
flags, basetype, tfs_tdesc);
973 FIXME(
"unhandled kind %#x\n",
attr->typekind);
978 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
979 ITypeInfo_Release(refinfo);
984 if (!is_in && is_out)
997 int is_out,
int by_val,
unsigned short *server_size,
unsigned short *
flags,
998 unsigned char *basetype, TYPEDESC **tfs_tdesc)
1009 TRACE(
"vt %u\n", tdesc->vt);
1026 server_size,
flags, basetype, tfs_tdesc);
1028 ITypeInfo_GetRefTypeInfo(
typeinfo, tdesc->hreftype, &refinfo);
1029 ITypeInfo_GetTypeAttr(refinfo, &
attr);
1031 switch (
attr->typekind)
1042 server_size,
flags, basetype, tfs_tdesc);
1053 FIXME(
"unhandled kind %#x\n",
attr->typekind);
1058 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
1059 ITypeInfo_Release(refinfo);
1066 FIXME(
"unhandled type %u\n", tdesc->vt);
1076 size_t *typelen,
unsigned char *
proc,
size_t *proclen, ELEMDESC *
desc,
1079 USHORT param_flags =
desc->paramdesc.wParamFlags;
1080 TYPEDESC *tdesc = &
desc->tdesc, *tfs_tdesc;
1081 unsigned short server_size;
1084 unsigned char basetype;
1085 unsigned short flags;
1090 is_out = param_flags & PARAMFLAG_FOUT;
1091 is_in = (param_flags & PARAMFLAG_FIN) || (!is_out && !is_return);
1094 &basetype, &tfs_tdesc);
1100 server_size = (server_size + 7) / 8;
1101 if (server_size >= 8) server_size = 0;
1102 flags |= server_size << 13;
1121#if defined __arm__ || defined __aarch64__
1131 if (
j < 4)
continue;
1146 static const unsigned int pointer_size =
sizeof(
void *);
1147 unsigned int reg_count = 0,
float_count = 0, double_count = 0, stack_pos = 0,
offset = 0;
1153 params[0] = 0x80 + reg_count++;
1156 for (
i = 0;
i <
desc->cParams;
i++)
1169 if (double_count >= 8)
break;
1206 if (double_count >= 8)
break;
1208 params[
pos + 1] = 0x84 + 2 * double_count + 1;
1217 while (
size && reg_count < 4)
1240 WORD proc_idx,
unsigned char *
proc,
size_t *proclen)
1242 unsigned int i,
align,
size, stack_size =
sizeof(
void *);
1244 for (
i = 0;
i <
desc->cParams;
i++)
1250 stack_size +=
sizeof(
void *);
1268#elif defined __x86_64__
1270 unsigned short float_mask = 0;
1272 for (
i = 0;
i <
desc->cParams &&
i < 3;
i++)
1275 if (basetype ==
FC_FLOAT) float_mask |= (1 << ((
i + 1) * 2));
1276 else if (basetype ==
FC_DOUBLE) float_mask |= (2 << ((
i + 1) * 2));
1287 unsigned int len,
count = stack_size /
sizeof(
void *);
1307 unsigned char *
type,
size_t *typelen,
unsigned char *
proc,
1308 size_t *proclen,
unsigned short *
offset)
1311 WORD proc_idx, param_idx;
1315 for (proc_idx = 3; proc_idx < parentfuncs; proc_idx++)
1318 offset[proc_idx - 3] = -1;
1321 for (proc_idx = 0; proc_idx <
funcs; proc_idx++)
1323 TRACE(
"Writing procedure %d.\n", proc_idx);
1329 offset[proc_idx + parentfuncs - 3] = *proclen;
1334 for (param_idx = 0; param_idx <
desc->cParams; param_idx++)
1336 TRACE(
"Writing parameter %d.\n", param_idx);
1356 WORD parentfuncs,
const unsigned char **type_ret,
1357 const unsigned char **proc_ret,
unsigned short **offset_ret)
1361 size_t typelen = tfs_size, proclen = 0;
1374 ERR(
"Failed to allocate format strings.\n");
1415 hr = ITypeInfo_GetTypeAttr(
typeinfo, &typeattr);
1418 typekind = typeattr->typekind;
1419 ITypeInfo_ReleaseTypeAttr(
typeinfo, typeattr);
1422 hr = ITypeInfo_GetRefTypeOfImplType(
typeinfo, -1, &reftype);
1426 hr = ITypeInfo_GetRefTypeInfo(
typeinfo, reftype, real_typeinfo);
1431 ITypeInfo_AddRef(*real_typeinfo =
typeinfo);
1433 hr = ITypeInfo_GetContainingTypeLib(*real_typeinfo, &
typelib,
NULL);
1437 hr = ITypeLib_GetLibAttr(
typelib, &libattr);
1443 syskind = libattr->syskind;
1444 ITypeLib_ReleaseTLibAttr(
typelib, libattr);
1447 hr = ITypeInfo_GetTypeAttr(*real_typeinfo, &typeattr);
1450 *
funcs = typeattr->cFuncs;
1451 *parentfuncs = typeattr->cbSizeVft / (syskind ==
SYS_WIN64 ? 8 : 4) - *
funcs;
1452 ITypeInfo_ReleaseTypeAttr(*real_typeinfo, typeattr);
1454 hr = ITypeInfo_GetRefTypeOfImplType(*real_typeinfo, 0, &reftype);
1457 hr = ITypeInfo_GetRefTypeInfo(*real_typeinfo, reftype, &parentinfo);
1461 hr = ITypeInfo_GetTypeAttr(parentinfo, &typeattr);
1464 *parentiid = typeattr->guid;
1465 ITypeInfo_ReleaseTypeAttr(parentinfo, typeattr);
1467 ITypeInfo_Release(parentinfo);
1472 ITypeInfo_Release(*real_typeinfo);
1480 desc->Version = 0x50002;
1500 TRACE(
"(%p) decreasing refs to %ld\n",
proxy, refcount);
1504 if (
proxy->proxy.pChannel)
1505 IRpcProxyBuffer_Disconnect(&
proxy->proxy.IRpcProxyBuffer_iface);
1506 if (
proxy->proxy.base_object)
1507 IUnknown_Release(
proxy->proxy.base_object);
1508 if (
proxy->proxy.base_proxy)
1509 IRpcProxyBuffer_Release(
proxy->proxy.base_proxy);
1510 free((
void *)
proxy->stub_desc.pFormatTypes);
1511 free((
void *)
proxy->proxy_info.ProcFormatString);
1537 proxy->proxy.PVtbl =
proxy->proxy_vtbl->Vtbl;
1538 proxy->proxy.RefCount = 1;
1539 proxy->proxy.piid =
proxy->proxy_vtbl->header.piid;
1540 proxy->proxy.pUnkOuter = outer;
1545 (
void **)&
proxy->proxy.base_object);
1549 *proxy_buffer = &
proxy->proxy.IRpcProxyBuffer_iface;
1565 TRACE(
"typeinfo %p, outer %p, iid %s, proxy_buffer %p, out %p.\n",
1574 ERR(
"Failed to allocate proxy object.\n");
1575 ITypeInfo_Release(real_typeinfo);
1580 proxy->proxy_info.pStubDesc = &
proxy->stub_desc;
1582 proxy->proxy_vtbl =
calloc(1,
sizeof(
proxy->proxy_vtbl->header) + (
funcs + parentfuncs) *
sizeof(
void *));
1583 if (!
proxy->proxy_vtbl)
1585 ERR(
"Failed to allocate proxy vtbl.\n");
1587 ITypeInfo_Release(real_typeinfo);
1590 proxy->proxy_vtbl->header.pStublessProxyInfo = &
proxy->proxy_info;
1592 proxy->proxy_vtbl->header.piid = &
proxy->iid;
1595 proxy->proxy_vtbl->Vtbl[parentfuncs +
i] = (
void *)-1;
1598 &
proxy->proxy_info.ProcFormatString, &
proxy->offset_table);
1599 ITypeInfo_Release(real_typeinfo);
1606 proxy->proxy_info.FormatStringOffset = &
proxy->offset_table[-3];
1611 free((
void *)
proxy->stub_desc.pFormatTypes);
1612 free((
void *)
proxy->proxy_info.ProcFormatString);
1637 TRACE(
"(%p) decreasing refs to %ld\n",
stub, refcount);
1643 IRpcStubBuffer_Disconnect(iface);
1645 if (
stub->stub.base_stub)
1647 IRpcStubBuffer_Release(
stub->stub.base_stub);
1651 free((
void *)
stub->stub_desc.pFormatTypes);
1652 free((
void *)
stub->server_info.ProcString);
1665 hr = IUnknown_QueryInterface(
server,
stub->stub_vtbl.header.piid,
1666 (
void **)&
stub->stub.stub_buffer.pvServerObject);
1669 WARN(
"Failed to get interface %s, hr %#lx.\n",
1671 stub->stub.stub_buffer.pvServerObject =
server;
1681 IUnknown_Release(
stub->stub.stub_buffer.pvServerObject);
1686 stub->stub.stub_buffer.lpVtbl = &
stub->stub_vtbl.Vtbl;
1687 stub->stub.stub_buffer.RefCount = 1;
1702 TRACE(
"typeinfo %p, iid %s, server %p, stub_buffer %p.\n",
1711 ERR(
"Failed to allocate stub object.\n");
1712 ITypeInfo_Release(real_typeinfo);
1717 stub->server_info.pStubDesc = &
stub->stub_desc;
1720 &
stub->server_info.ProcString, &
stub->offset_table);
1721 ITypeInfo_Release(real_typeinfo);
1727 stub->server_info.FmtStringOffset = &
stub->offset_table[-3];
1730 stub->stub_vtbl.header.piid = &
stub->iid;
1731 stub->stub_vtbl.header.pServerInfo = &
stub->server_info;
1732 stub->stub_vtbl.header.DispatchTableCount =
funcs + parentfuncs;
1736 stub->dispatch_table =
malloc((
funcs + parentfuncs) *
sizeof(
void *));
1737 for (
i = 3;
i < parentfuncs;
i++)
1741 stub->stub_vtbl.header.pDispatchTable = &
stub->dispatch_table[-3];
1751 free((
void *)
stub->stub_desc.pFormatTypes);
1752 free((
void *)
stub->server_info.ProcString);
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
HRESULT WINAPI StdProxy_QueryInterface(IRpcProxyBuffer *iface, REFIID riid, void **obj)
void WINAPI StdProxy_Disconnect(IRpcProxyBuffer *iface)
HRESULT WINAPI StdProxy_Connect(IRpcProxyBuffer *iface, IRpcChannelBuffer *pChannel)
BOOL fill_stubless_table(IUnknownVtbl *vtbl, DWORD num)
ULONG WINAPI StdProxy_AddRef(IRpcProxyBuffer *iface)
const IRpcStubBufferVtbl CStdStubBuffer_Delegating_Vtbl
HRESULT create_stub(REFIID iid, IUnknown *pUnk, IRpcStubBuffer **ppstub)
BOOL fill_delegated_proxy_table(IUnknownVtbl *vtbl, DWORD num)
HRESULT create_proxy(REFIID iid, IUnknown *pUnkOuter, IRpcProxyBuffer **pproxy, void **ppv)
const IUnknownVtbl * get_delegating_vtbl(DWORD num_methods)
const IRpcStubBufferVtbl CStdStubBuffer_Vtbl
struct tagVARIANT VARIANT
static const WCHAR *const ext[]
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
void __RPC_STUB NdrStubForwardingFunction(IRpcStubBuffer *iface, IRpcChannelBuffer *pChannel, PRPC_MESSAGE pMsg, DWORD *pdwStubPhase)
int align(int length, int align)
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLenum const GLfloat * params
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
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 GLint GLint j
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
D3D11_SHADER_VARIABLE_DESC desc
static OLECHAR OLECHAR *static SYSKIND
void *WINAPI NdrOleAllocate(SIZE_T Size)
void WINAPI NdrOleFree(void *NodeToFree)
LONG WINAPI NdrStubCall2(struct IRpcStubBuffer *pThis, struct IRpcChannelBuffer *pChannel, PRPC_MESSAGE pRpcMsg, DWORD *pdwStubPhase)
struct _NDR_PROC_HEADER_RPC NDR_PROC_HEADER_RPC
struct _NDR_PROC_HEADER NDR_PROC_HEADER
static const unsigned short IsReturn
static ULONG WINAPI typelib_stub_Release(IRpcStubBuffer *iface)
static HRESULT build_format_strings(ITypeInfo *typeinfo, WORD funcs, WORD parentfuncs, const unsigned char **type_ret, const unsigned char **proc_ret, unsigned short **offset_ret)
static const IRpcProxyBufferVtbl typelib_proxy_vtbl
static const unsigned short IsBasetype
#define WRITE_CHAR(str, len, val)
#define WRITE_SHORT(str, len, val)
static const MIDL_STUBLESS_PROXY_INFO * get_ndr_types_proxy_info(void)
static const unsigned short IsSimpleRef
static unsigned char get_array_fc(ITypeInfo *typeinfo, TYPEDESC *desc)
static const unsigned short IsOut
static size_t write_ip_tfs(unsigned char *str, size_t *len, const GUID *iid)
static const unsigned short MustSize
#define WRITE_INT(str, len, val)
static unsigned char get_struct_member_fc(ITypeInfo *typeinfo, TYPEDESC *tdesc)
static unsigned char get_basetype(ITypeInfo *typeinfo, TYPEDESC *desc)
static size_t write_complex_struct_pointer_ref(ITypeInfo *typeinfo, TYPEDESC *desc, unsigned char *str, size_t *len)
static void write_complex_struct_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEATTR *attr)
static const unsigned short MustFree
static void write_complex_struct_pointer_layout(ITypeInfo *typeinfo, TYPEDESC *desc, unsigned char *str, size_t *len)
static void write_simple_struct_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEATTR *attr)
static unsigned short get_tfs_offset(int param)
const ExtendedProxyFileInfo ndr_types_ProxyFileInfo
static unsigned int get_stack_size(ITypeInfo *typeinfo, TYPEDESC *desc, unsigned int *align, int *by_value)
static BOOL type_pointer_is_iface(ITypeInfo *typeinfo, TYPEDESC *tdesc)
static ULONG WINAPI typelib_proxy_Release(IRpcProxyBuffer *iface)
static unsigned char get_struct_fc(ITypeInfo *typeinfo, TYPEATTR *attr)
static HRESULT get_param_info(ITypeInfo *typeinfo, TYPEDESC *tdesc, int is_in, int is_out, int by_val, unsigned short *server_size, unsigned short *flags, unsigned char *basetype, TYPEDESC **tfs_tdesc)
#define ROUND_SIZE(size, alignment)
static const unsigned short IsByValue
static HRESULT write_iface_fs(ITypeInfo *typeinfo, WORD funcs, WORD parentfuncs, unsigned char *type, size_t *typelen, unsigned char *proc, size_t *proclen, unsigned short *offset)
HRESULT WINAPI CreateStubFromTypeInfo(ITypeInfo *typeinfo, REFIID iid, IUnknown *server, IRpcStubBuffer **stub_buffer)
HRESULT WINAPI CreateProxyFromTypeInfo(ITypeInfo *typeinfo, IUnknown *outer, REFIID iid, IRpcProxyBuffer **proxy_buffer, void **out)
static HRESULT write_param_fs(ITypeInfo *typeinfo, unsigned char *type, size_t *typelen, unsigned char *proc, size_t *proclen, ELEMDESC *desc, BOOL is_return, unsigned short *stack_offset)
static unsigned short write_oleaut_tfs(VARTYPE vt)
static void write_proc_func_header(ITypeInfo *typeinfo, FUNCDESC *desc, WORD proc_idx, unsigned char *proc, size_t *proclen)
static void init_stub_desc(MIDL_STUB_DESC *desc)
static size_t write_struct_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEATTR *attr)
static const unsigned short IsIn
static size_t write_array_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, ARRAYDESC *desc)
static HRESULT get_param_pointer_info(ITypeInfo *typeinfo, TYPEDESC *tdesc, int is_in, int is_out, unsigned short *server_size, unsigned short *flags, unsigned char *basetype, TYPEDESC **tfs_tdesc)
static HRESULT get_iface_info(ITypeInfo *typeinfo, WORD *funcs, WORD *parentfuncs, GUID *parentiid, ITypeInfo **real_typeinfo)
static void write_struct_members(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEATTR *attr)
static const NDR_PARAM_OIF * get_ndr_types_params(unsigned int *nb_params)
static size_t write_pointer_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEDESC *desc, BOOL toplevel, BOOL onstack)
static HRESULT typelib_stub_init(struct typelib_stub *stub, IUnknown *server, const GUID *parentiid, IRpcStubBuffer **stub_buffer)
static void get_default_iface(ITypeInfo *typeinfo, WORD count, GUID *iid)
static BOOL type_needs_pointer_deref(ITypeInfo *typeinfo, TYPEDESC *desc)
static unsigned int type_memsize(ITypeInfo *typeinfo, TYPEDESC *desc, unsigned int *align_ret)
static size_t write_type_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEDESC *desc, BOOL toplevel, BOOL onstack)
static BOOL type_is_non_iface_pointer(ITypeInfo *typeinfo, TYPEDESC *desc)
static const unsigned char * get_type_format_string(size_t *size)
static HRESULT typelib_proxy_init(struct typelib_proxy *proxy, IUnknown *outer, ULONG count, const GUID *parentiid, IRpcProxyBuffer **proxy_buffer, void **out)
#define IsEqualGUID(rguid1, rguid2)
#define FC_SIMPLE_POINTER
#define Oi_OBJ_USE_V2_INTERPRETER
#define FC_ALLOCED_ON_STACK
void(__RPC_STUB * PRPC_STUB_FUNCTION)(IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *pdwStubPhase)
static struct __wine_debug_functions funcs
PMIDL_STUB_DESC pStubDesc
const unsigned char * pFormatTypes
const USER_MARSHAL_ROUTINE_QUADRUPLE * aUserMarshalQuadruple
CInterfaceProxyHeader header
const PCInterfaceProxyVtblList * pProxyVtblList
CInterfaceProxyVtbl * proxy_vtbl
unsigned short * offset_table
MIDL_STUBLESS_PROXY_INFO proxy_info
MIDL_SERVER_INFO server_info
PRPC_STUB_FUNCTION * dispatch_table
CInterfaceStubVtbl stub_vtbl
cstdstubbuffer_delegating_t stub
unsigned short * offset_table
#define CONTAINING_RECORD(address, type, field)
static unsigned int compress_params_array(unsigned char *params, unsigned int count)
static unsigned int fill_params_array(const type_t *iface, const var_t *func, unsigned char *params, unsigned int count)
static unsigned stack_offset(compile_ctx_t *ctx)
static rfbScreenInfoPtr server
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
unsigned int pointer_size