35 const OXID_INFO *oxid_info,
const IID *iid,
36 DWORD dest_context,
void *dest_context_data,
40 MSHCTX dest_context,
void *dest_context_data,
45#define NORMALEXTREFS 5
48#define SORFP_TABLEWEAK SORF_OXRES1
51#define SORFP_NOLIFETIMEMGMT SORF_OXRES2
125 return IStream_Write(
stream, &hresult,
sizeof(hresult),
NULL);
133 return IStream_Read(
stream, phresult,
sizeof(*phresult),
NULL);
246 TRACE(
"%p\n", iface);
248 return IUnknown_AddRef(marshaler->
outer_unk);
255 TRACE(
"%p\n", iface);
257 return IUnknown_Release(marshaler->
outer_unk);
263 TRACE(
"%s, %p, %#lx, %p, %#lx, %p\n",
debugstr_guid(
riid), pv, dest_context, pvDestContext, mshlflags,
clsid);
265 if (dest_context == MSHCTX_INPROC || dest_context == MSHCTX_CROSSCTX)
285 TRACE(
"%s, %p, %#lx, %p, %#lx, %p\n",
debugstr_guid(
riid), pv, dest_context, pvDestContext, mshlflags,
size);
289 if (dest_context == MSHCTX_INPROC || dest_context == MSHCTX_CROSSCTX)
297 hr = IMarshal_GetMarshalSizeMax(marshal,
riid, pv, dest_context, pvDestContext, mshlflags,
size);
298 IMarshal_Release(marshal);
303 void *pv,
DWORD dest_context,
void *pvDestContext,
DWORD mshlflags)
309 dest_context, pvDestContext, mshlflags);
313 if (dest_context == MSHCTX_INPROC || dest_context == MSHCTX_CROSSCTX)
316 GUID unknown_guid = { 0 };
324 if (mshlflags & MSHLFLAGS_TABLEWEAK)
325 IUnknown_Release(
data.object);
327 hr = IStream_Write(
stream, &mshlflags,
sizeof(mshlflags),
NULL);
333 hr = IStream_Write(
stream, &unknown_guid,
sizeof(unknown_guid),
NULL);
341 hr = IMarshal_MarshalInterface(marshal,
stream,
riid, pv, dest_context, pvDestContext, mshlflags);
342 IMarshal_Release(marshal);
355 hr = IStream_Read(
stream, &mshlflags,
sizeof(mshlflags),
NULL);
361 hr = IStream_Read(
stream, &unknown_guid,
sizeof(unknown_guid),
NULL);
365 if (!(mshlflags & (MSHLFLAGS_TABLEWEAK | MSHLFLAGS_TABLESTRONG)))
366 IUnknown_Release(
data.object);
380 hr = IStream_Read(
stream, &mshlflags,
sizeof(mshlflags),
NULL);
386 hr = IStream_Read(
stream, &unknown_guid,
sizeof(unknown_guid),
NULL);
389 IUnknown_Release(
data.object);
423 object =
malloc(
sizeof(*
object));
429 object->refcount = 1;
430 object->outer_unk =
outer ?
outer : &
object->IUnknown_inner;
432 *marshaler = &
object->IUnknown_inner;
441 DWORD dest_context,
void *pvDestContext,
DWORD mshlFlags)
450 hr = IUnknown_QueryInterface(unk, &IID_IMarshal, (
void **)&marshal);
459 hr = IMarshal_GetMarshalSizeMax(marshal,
riid, unk, dest_context, pvDestContext, mshlFlags,
size);
464 IMarshal_Release(marshal);
470 if (
flags & MSHLFLAGS_TABLESTRONG)
471 TRACE(
" MSHLFLAGS_TABLESTRONG");
472 if (
flags & MSHLFLAGS_TABLEWEAK)
473 TRACE(
" MSHLFLAGS_TABLEWEAK");
474 if (!(
flags & (MSHLFLAGS_TABLESTRONG|MSHLFLAGS_TABLEWEAK)))
475 TRACE(
" MSHLFLAGS_NORMAL");
476 if (
flags & MSHLFLAGS_NOPING)
477 TRACE(
" MSHLFLAGS_NOPING");
484 DWORD dest_context,
void *pvDestContext,
DWORD mshlFlags)
486 CLSID marshaler_clsid;
490 TRACE(
"%p, %s, %p, %lx, %p, ",
stream,
debugstr_guid(
riid), unk, dest_context, pvDestContext);
497 hr = IUnknown_QueryInterface(unk, &IID_IMarshal, (
void **)&marshal);
502 ERR(
"Failed to get marshaller, %#lx\n",
hr);
506 hr = IMarshal_GetUnmarshalClass(marshal,
riid, unk, dest_context, pvDestContext, mshlFlags,
510 ERR(
"IMarshal::GetUnmarshalClass failed, %#lx\n",
hr);
517 TRACE(
"Using standard marshaling\n");
523 TRACE(
"Using custom marshaling\n");
530 hr = IMarshal_GetMarshalSizeMax(marshal,
riid, unk, dest_context, pvDestContext, mshlFlags,
534 ERR(
"Failed to get max size of marshal data, error %#lx\n",
hr);
541 ERR(
"Failed to write OR_CUSTOM header to stream with %#lx\n",
hr);
546 TRACE(
"Calling IMarshal::MarshalInterface\n");
548 hr = IMarshal_MarshalInterface(marshal,
stream,
riid, unk, dest_context, pvDestContext, mshlFlags);
556 IMarshal_Release(marshal);
558 TRACE(
"completed with hr %#lx\n",
hr);
577 ERR(
"Failed to read common OBJREF header, %#lx\n",
hr);
588 if (iid) *iid = objref.
iid;
593 TRACE(
"Using standard unmarshaling\n");
601 TRACE(
"Using custom unmarshaling\n");
604 custom_header_size, &
res);
605 if (
hr !=
S_OK || (
res != custom_header_size))
607 ERR(
"Failed to read OR_CUSTOM header, %#lx\n",
hr);
612 CLSCTX_INPROC_SERVER, &IID_IMarshal,
617 FIXME(
"Invalid or unimplemented marshaling type specified: %lx\n", objref.
flags);
622 ERR(
"Failed to create marshal, %#lx\n",
hr);
630 struct OR_STANDARD
obj;
638 if (
obj.saResAddr.wNumEntries)
640 ERR(
"unsupported size of DUALSTRINGARRAY\n");
649 WARN(
"Could not map OXID %s to apartment object\n",
657 ERR(
"could not map object ID to stub manager, oxid=%s, oid=%s\n",
685 ERR(
"StdMarshal ReleaseMarshalData failed with error %#lx\n",
hr);
692 hr = IMarshal_ReleaseMarshalData(marshal,
stream);
694 ERR(
"IMarshal::ReleaseMarshalData failed with error %#lx\n",
hr);
696 IMarshal_Release(marshal);
704 struct OR_STANDARD
obj;
714 ERR(
"Apartment not initialized\n");
726 if (
obj.saResAddr.wNumEntries)
728 ERR(
"unsupported size of DUALSTRINGARRAY\n");
735 TRACE(
"Unmarshalling object marshalled in same apartment for iid %s, "
765 WARN(
"Couldn't find object for OXID %s, OID %s, assuming disconnected\n",
772 TRACE(
"Treating unmarshal from OXID %s as inter-process\n",
777 dest_context_data,
riid,
784 else TRACE(
"Successfully created proxy %p\n", *
ppv);
810 ERR(
"StdMarshal UnmarshalInterface failed, hr %#lx\n",
hr);
815 hr = IMarshal_UnmarshalInterface(marshal,
stream, &iid, (
void **)&
object);
816 IMarshal_Release(marshal);
818 ERR(
"IMarshal::UnmarshalInterface failed, hr %#lx\n",
hr);
826 TRACE(
"requested interface != marshalled interface, additional QI needed\n");
827 hr = IUnknown_QueryInterface(
object,
riid,
ppv);
830 IUnknown_Release(
object);
838 TRACE(
"completed with hr %#lx\n",
hr);
871 DWORD dest_context,
void *dest_context_data, MSHLFLAGS mshlflags)
887 stdobjref->
flags = SORF_NULL;
888 if (mshlflags & MSHLFLAGS_TABLEWEAK)
890 if (mshlflags & MSHLFLAGS_NOPING)
891 stdobjref->
flags |= SORF_NOPING;
892 stdobjref->
oid = manager->
oid;
894 tablemarshal = ((mshlflags & MSHLFLAGS_TABLESTRONG) || (mshlflags & MSHLFLAGS_TABLEWEAK));
910 IPSFactoryBuffer_Release(psfb);
912 ERR(
"Failed to create an IRpcStubBuffer from IPSFactory for %s with error %#lx\n",
926 if (
stub) IRpcStubBuffer_Release(
stub);
945 if (mshlflags & MSHLFLAGS_TABLESTRONG)
975 hr = IMultiQI_QueryMultipleInterfaces(
iface, 1, &mqi);
984 TRACE(
"%p - before %ld\n", iface,
This->refs);
1001 REMQIRESULT *qiresults =
NULL;
1002 ULONG nonlocal_mqis = 0;
1004 ULONG successful_mqis = 0;
1005 IID *iids =
malloc(cMQIs *
sizeof(*iids));
1009 TRACE(
"cMQIs: %ld\n", cMQIs);
1013 for (
i = 0;
i < cMQIs;
i++)
1021 iids[nonlocal_mqis] = *pMQIs[
i].pIID;
1027 TRACE(
"%ld interfaces not found locally\n", nonlocal_mqis);
1031 if (nonlocal_mqis != 0)
1048 nonlocal_mqis, iids, &qiresults);
1049 IRemUnknown_Release(
remunk);
1051 WARN(
"IRemUnknown_RemQueryInterface failed with error %#lx\n",
hr);
1061 for (
i = 0;
i < nonlocal_mqis;
i++)
1064 HRESULT hrobj = qiresults[
i].hResult;
1068 This->dest_context_data,
1070 (
void **)&pMQIs[
index].pItf);
1076 pMQIs[
index].hr = hrobj;
1086 TRACE(
"%ld/%ld successfully queried\n", successful_mqis, cMQIs);
1091 if (successful_mqis == cMQIs)
1093 else if (successful_mqis == 0)
1112 return IMultiQI_QueryInterface(&
This->IMultiQI_iface,
riid, ppvObject);
1118 return IMultiQI_AddRef(&
This->IMultiQI_iface);
1124 return IMultiQI_Release(&
This->IMultiQI_iface);
1129 void* pvDestContext,
DWORD mshlflags,
CLSID* pCid)
1137 void* pvDestContext,
DWORD mshlflags,
DWORD* pSize)
1156 void* pvDestContext,
DWORD mshlflags)
1171 if ((mshlflags != MSHLFLAGS_TABLEWEAK) &&
1172 (mshlflags != MSHLFLAGS_TABLESTRONG))
1175 ULONG cPublicRefsOld;
1180 ULONG cPublicRefsNew;
1181 cPublicRefsOld = cPublicRefs;
1186 }
while (cPublicRefs != cPublicRefsOld);
1197 REMINTERFACEREF rif;
1199 rif.cPublicRefs = (mshlflags == MSHLFLAGS_TABLESTRONG) ? 1 :
NORMALEXTREFS;
1200 rif.cPrivateRefs = 0;
1201 hr = IRemUnknown_RemAddRef(remunk, 1, &rif, &hrref);
1202 IRemUnknown_Release(remunk);
1207 if (mshlflags != MSHLFLAGS_TABLESTRONG)
1211 ERR(
"IRemUnknown_RemAddRef returned with %#lx, hrref = %#lx\n",
hr, hrref);
1219 TRACE(
"writing stdobjref: flags = %#lx cPublicRefs = %ld oxid = %s oid = %s ipid = %s\n",
1235 REMQIRESULT *qiresults =
NULL;
1249 1, &
iid, &qiresults);
1259 REMINTERFACEREF rif;
1260 rif.ipid = qiresults->std.ipid;
1261 rif.cPublicRefs = qiresults->std.cPublicRefs;
1262 rif.cPrivateRefs = 0;
1263 IRemUnknown_RemRelease(remunk, 1, &rif);
1268 ERR(
"IRemUnknown_RemQueryInterface failed with error %#lx\n",
hr);
1269 IRemUnknown_Release(remunk);
1286 This->dest_context_data, (
void**)&marshal);
1290 hr = IMarshal_UnmarshalInterface(marshal, pStm,
riid,
ppv);
1291 IMarshal_Release(marshal);
1304 This->dest_context_data, (
void**)&marshal);
1308 hr = IMarshal_ReleaseMarshalData(marshal, pStm);
1309 IMarshal_Release(marshal);
1322 This->dest_context_data, (
void**)&marshal);
1327 IMarshal_Release(marshal);
1347 return IMultiQI_QueryInterface(&
This->IMultiQI_iface,
riid, ppvObject);
1353 return IMultiQI_AddRef(&
This->IMultiQI_iface);
1359 return IMultiQI_Release(&
This->IMultiQI_iface);
1370 DWORD *pCapabilities)
1372 FIXME(
"(%p, %p, %p, %p, %p, %p, %p, %p): stub\n", pProxy, pAuthnSvc,
1373 pAuthzSvc, ppServerPrincName, pAuthnLevel, pImpLevel, pAuthInfo,
1380 if (ppServerPrincName)
1381 *ppServerPrincName =
NULL;
1389 *pCapabilities = EOAC_NONE;
1402 FIXME(
"%p, %ld, %ld, %s, %ld, %ld, %p, %#lx: stub\n", pProxy, AuthnSvc, AuthzSvc,
1403 pServerPrincName == COLE_DEFAULT_PRINCIPAL ?
"<default principal>" :
debugstr_w(pServerPrincName),
1411 FIXME(
"(%p, %p): stub\n", pProxy, ppCopy);
1432 ERR(
"Wait failed for ifproxy %p\n",
This);
1436 if (
This->refs == 0)
1440 TRACE(
"getting public ref for ifproxy %p\n",
This);
1446 REMINTERFACEREF rif;
1447 rif.ipid =
This->stdobjref.ipid;
1449 rif.cPrivateRefs = 0;
1450 hr = IRemUnknown_RemAddRef(
remunk, 1, &rif, &hrref);
1451 IRemUnknown_Release(
remunk);
1455 ERR(
"IRemUnknown_RemAddRef returned with %#lx, hrref = %#lx\n",
hr, hrref);
1470 ERR(
"Wait failed for ifproxy %p\n",
This);
1474 public_refs =
This->refs;
1475 if (public_refs > 0)
1479 TRACE(
"releasing %ld refs\n", public_refs);
1484 REMINTERFACEREF rif;
1485 rif.ipid =
This->stdobjref.ipid;
1486 rif.cPublicRefs = public_refs;
1487 rif.cPrivateRefs = 0;
1488 hr = IRemUnknown_RemRelease(
remunk, 1, &rif);
1489 IRemUnknown_Release(
remunk);
1493 WARN(
"couldn't release references because object was "
1494 "disconnected: oxid = %s, oid = %s\n",
1498 ERR(
"IRemUnknown_RemRelease failed with error %#lx\n",
hr);
1510 if (
This->proxy) IRpcProxyBuffer_Disconnect(
This->proxy);
1512 IRpcChannelBuffer_Release(
This->chan);
1529 IRpcChannelBuffer_Release(
This->chan);
1533 if (
This->proxy) IRpcProxyBuffer_Release(
This->proxy);
1546 if (!
This->remoting_mutex)
1579 This->cs.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": proxy_manager");
1600 This->dest_context = MSHCTX_INPROC;
1612 TRACE(
"%p created for OXID %s, OID %s\n",
This,
1621 MSHCTX old_dest_context;
1622 MSHCTX new_dest_context;
1626 old_dest_context =
This->dest_context;
1627 new_dest_context = old_dest_context;
1630 switch (old_dest_context)
1635 case MSHCTX_CROSSCTX:
1648 case MSHCTX_CROSSCTX:
1654 case MSHCTX_NOSHAREDMEM:
1657 case MSHCTX_DIFFERENTMACHINE:
1668 if (old_dest_context == new_dest_context)
break;
1671 }
while (new_dest_context != old_dest_context);
1688 IMultiQI_AddRef(&
This->IMultiQI_iface);
1694 IMarshal_AddRef(&
This->IMarshal_iface);
1699 *
ppv = &
This->IClientSecurity_iface;
1700 IClientSecurity_AddRef(&
This->IClientSecurity_iface);
1741 IMultiQI_AddRef(&
This->IMultiQI_iface);
1755 IPSFactoryBuffer_Release(psfb);
1773 TRACE(
"ifproxy %p created for IPID %s, interface %s with %lu public refs\n",
1833 BOOL called_in_original_apt;
1843 called_in_original_apt =
This->parent && (
This->parent->oxid == apt->
oxid);
1849 if (
This->remunk && called_in_original_apt)
1852 *remunk =
This->remunk;
1853 IRemUnknown_AddRef(*remunk);
1855 else if (!
This->parent)
1872 stdobjref.
ipid =
This->oxid_info.ipidRemUnknown;
1877 &
This->oxid_info, (
void**)remunk);
1878 if (
hr ==
S_OK && called_in_original_apt)
1880 This->remunk = *remunk;
1881 IRemUnknown_AddRef(
This->remunk);
1887 TRACE(
"got IRemUnknown* pointer %p, hr = %#lx\n", *remunk,
hr);
1901 LONG old_refs, new_refs;
1912 new_refs =
refs + 1;
1953 if (
This->remunk) IRemUnknown_Release(
This->remunk);
1956 This->cs.DebugInfo->Spare[0] = 0;
1982 *proxy_found =
proxy;
2025 IMarshal_AddRef(iface);
2050 DWORD dwDestContext,
void *pvDestContext,
DWORD mshlflags,
CLSID *pCid)
2057 DWORD dwDestContext,
void *pvDestContext,
DWORD mshlflags,
DWORD *pSize)
2075 ERR(
"Apartment not initialized\n");
2084 dest_context_data, mshlflags);
2088 ERR(
"Failed to create ifstub, hr %#lx\n",
hr);
2099 void *dest_context_data,
REFIID riid,
const OXID_INFO *oxid_info,
void **
object)
2106 TRACE(
"stdobjref: flags = %#lx cPublicRefs = %ld oxid = %s oid = %s ipid = %s\n",
2121 TRACE(
"proxy manager already created, using\n");
2172 ERR(
"Failed to read common OBJREF header, %#lx\n",
hr);
2184 FIXME(
"unsupported objref.flags = %lx\n", objref.
flags);
2202 ERR(
"Failed to read common OBJREF header, %#lx\n",
hr);
2214 FIXME(
"unsupported objref.flags = %lx\n", objref.
flags);
2223 FIXME(
"(), stub!\n");
2245 object =
malloc(
sizeof(*
object));
2250 object->refcount = 1;
2254 hr = IMarshal_QueryInterface(&
object->IMarshal_iface,
riid, ppvObject);
2255 IMarshal_Release(&
object->IMarshal_iface);
2277 TRACE(
"%s, %p, %lx, %p, %lx, %p\n",
debugstr_guid(
riid),
pUnk, dwDestContext,
dest_context,
flags, marshal);
#define CO_E_NOTINITIALIZED
COMPILER_DEPENDENT_UINT64 UINT64
HRESULT apartment_createwindowifneeded(struct apartment *apt)
void apartment_release(struct apartment *apt)
OXID apartment_getoxid(const struct apartment *apt)
struct apartment * apartment_findfromoxid(OXID oxid)
struct apartment * apartment_get_current_or_mta(void)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
const CLSID CLSID_StdMarshal
const CLSID CLSID_InProcFreeMarshaler
struct ifstub * stub_manager_new_ifstub(struct stub_manager *m, IRpcStubBuffer *sb, REFIID iid, DWORD dest_context, void *dest_context_data, MSHLFLAGS flags)
ULONG stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tableweak, BOOL last_unlock_releases)
struct stub_manager * get_stub_manager_from_object(struct apartment *apt, IUnknown *object, BOOL alloc)
HRESULT rpc_create_clientchannel(const OXID *oxid, const IPID *ipid, const OXID_INFO *oxid_info, const IID *iid, DWORD dest_context, void *dest_context_data, IRpcChannelBuffer **chan, struct apartment *apt)
ULONG stub_manager_int_release(struct stub_manager *stub_manager)
void rpc_start_remoting(struct apartment *apt)
BOOL stub_manager_is_table_marshaled(struct stub_manager *m, const IPID *ipid)
struct stub_manager * get_stub_manager(struct apartment *apt, OID oid)
HRESULT ipid_get_dest_context(const IPID *ipid, MSHCTX *dest_context, void **dest_context_data)
BOOL stub_manager_notify_unmarshal(struct stub_manager *m, const IPID *ipid)
struct ifstub * stub_manager_find_ifstub(struct stub_manager *m, REFIID iid, MSHLFLAGS flags)
HRESULT rpc_resolve_oxid(OXID oxid, OXID_INFO *oxid_info)
HRESULT rpc_register_interface(REFIID riid)
void stub_manager_release_marshal_data(struct stub_manager *m, ULONG refs, const IPID *ipid, BOOL tableweak)
ULONG stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL tableweak)
HRESULT WINAPI CoGetPSClsid(REFIID riid, CLSID *pclsid)
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
static HRESULT WINAPI Proxy_QueryInterface(IMarshal *iface, REFIID riid, void **ppvObject)
HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, IUnknown *unk, IStream **stream)
static HRESULT WINAPI ftmarshaler_MarshalInterface(IMarshal *iface, IStream *stream, REFIID riid, void *pv, DWORD dest_context, void *pvDestContext, DWORD mshlflags)
static HRESULT proxy_manager_get_remunknown(struct proxy_manager *This, IRemUnknown **remunk)
static HRESULT WINAPI ftmarshaler_DisconnectObject(IMarshal *iface, DWORD reserved)
HRESULT WINAPI CoCreateFreeThreadedMarshaler(IUnknown *outer, IUnknown **marshaler)
static HRESULT ifproxy_release_public_refs(struct ifproxy *This)
static HRESULT proxy_manager_construct(struct apartment *apt, ULONG sorflags, OXID oxid, OID oid, const OXID_INFO *oxid_info, struct proxy_manager **proxy_manager)
HRESULT WINAPI CoMarshalHresult(IStream *stream, HRESULT hresult)
HRESULT WINAPI CoGetInterfaceAndReleaseStream(IStream *stream, REFIID riid, void **obj)
static ULONG WINAPI ftmarshaler_AddRef(IMarshal *iface)
static HRESULT WINAPI ProxyCliSec_SetBlanket(IClientSecurity *iface, IUnknown *pProxy, DWORD AuthnSvc, DWORD AuthzSvc, OLECHAR *pServerPrincName, DWORD AuthnLevel, DWORD ImpLevel, void *pAuthInfo, DWORD Capabilities)
static HRESULT WINAPI Proxy_UnmarshalInterface(IMarshal *iface, IStream *pStm, REFIID riid, void **ppv)
static HRESULT WINAPI ftmarshaler_GetMarshalSizeMax(IMarshal *iface, REFIID riid, void *pv, DWORD dest_context, void *pvDestContext, DWORD mshlflags, DWORD *size)
static HRESULT proxy_manager_find_ifproxy(struct proxy_manager *This, REFIID riid, struct ifproxy **ifproxy_found)
static HRESULT WINAPI ProxyCliSec_CopyProxy(IClientSecurity *iface, IUnknown *pProxy, IUnknown **ppCopy)
static struct proxy_manager * impl_from_IMultiQI(IMultiQI *iface)
static HRESULT WINAPI StdMarshalImpl_ReleaseMarshalData(IMarshal *iface, IStream *stream)
static LONG proxy_manager_addref_if_alive(struct proxy_manager *This)
static ULONG WINAPI StdMarshalImpl_AddRef(IMarshal *iface)
HRESULT WINAPI CoMarshalInterface(IStream *stream, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
static HRESULT get_unmarshaler_from_stream(IStream *stream, IMarshal **marshal, IID *iid)
static HRESULT std_release_marshal_data(IStream *stream)
static HRESULT WINAPI ftmarshaler_ReleaseMarshalData(IMarshal *iface, IStream *stream)
static ULONG WINAPI ClientIdentity_Release(IMultiQI *iface)
static ULONG WINAPI ProxyCliSec_AddRef(IClientSecurity *iface)
static ULONG WINAPI ftmarshaler_inner_Release(IUnknown *iface)
static HRESULT unmarshal_object(const STDOBJREF *stdobjref, struct apartment *apt, MSHCTX dest_context, void *dest_context_data, REFIID riid, const OXID_INFO *oxid_info, void **object)
static HRESULT WINAPI StdMarshalImpl_GetUnmarshalClass(IMarshal *iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid)
static void ifproxy_destroy(struct ifproxy *This)
HRESULT apartment_disconnectproxies(struct apartment *apt)
static const IUnknownVtbl ftmarshaler_inner_vtbl
static HRESULT WINAPI Proxy_MarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags)
static ULONG WINAPI ftmarshaler_inner_AddRef(IUnknown *iface)
HRESULT WINAPI CoUnmarshalHresult(IStream *stream, HRESULT *phresult)
static void ifproxy_disconnect(struct ifproxy *This)
static struct ftmarshaler * impl_ft_from_IUnknown(IUnknown *iface)
static HRESULT WINAPI ProxyCliSec_QueryInterface(IClientSecurity *iface, REFIID riid, void **ppvObject)
static const IMultiQIVtbl ClientIdentity_Vtbl
static HRESULT std_unmarshal_interface(MSHCTX dest_context, void *dest_context_data, IStream *stream, REFIID riid, void **ppv, BOOL dest_context_known)
static HRESULT WINAPI StdMarshalImpl_QueryInterface(IMarshal *iface, REFIID riid, void **ppv)
static HRESULT WINAPI Proxy_ReleaseMarshalData(IMarshal *iface, IStream *pStm)
static struct stdmarshal * impl_from_StdMarshal(IMarshal *iface)
static HRESULT WINAPI ftmarshaler_inner_QueryInterface(IUnknown *iface, REFIID riid, void **obj)
static HRESULT StdMarshalImpl_Construct(REFIID, DWORD, void *, void **)
static struct ftmarshaler * impl_ft_from_IMarshal(IMarshal *iface)
static ULONG WINAPI ClientIdentity_AddRef(IMultiQI *iface)
static HRESULT ifproxy_get_public_ref(struct ifproxy *This)
static HRESULT WINAPI StdMarshalImpl_MarshalInterface(IMarshal *iface, IStream *stream, REFIID riid, void *pv, DWORD dest_context, void *dest_context_data, DWORD mshlflags)
static ULONG WINAPI Proxy_Release(IMarshal *iface)
static const IMarshalVtbl ProxyMarshal_Vtbl
static void proxy_manager_set_context(struct proxy_manager *This, MSHCTX dest_context, void *dest_context_data)
#define SORFP_NOLIFETIMEMGMT
static const IMarshalVtbl ftmarshaler_vtbl
static void proxy_manager_destroy(struct proxy_manager *This)
static HRESULT proxy_manager_create_ifproxy(struct proxy_manager *This, const STDOBJREF *stdobjref, REFIID riid, IRpcChannelBuffer *channel, struct ifproxy **iif_out)
static HRESULT WINAPI Proxy_DisconnectObject(IMarshal *iface, DWORD dwReserved)
static HRESULT WINAPI ftmarshaler_QueryInterface(IMarshal *iface, REFIID riid, void **obj)
HRESULT WINAPI CoGetStandardMarshal(REFIID riid, IUnknown *pUnk, DWORD dwDestContext, void *dest_context, DWORD flags, IMarshal **marshal)
static ULONG WINAPI ftmarshaler_Release(IMarshal *iface)
static struct proxy_manager * impl_from_IClientSecurity(IClientSecurity *iface)
static ULONG WINAPI StdMarshalImpl_Release(IMarshal *iface)
HRESULT WINAPI InternalCoStdMarshalObject(REFIID riid, DWORD dest_context, void *dest_context_data, void **ppvObject)
static ULONG WINAPI Proxy_AddRef(IMarshal *iface)
static struct proxy_manager * impl_from_IMarshal(IMarshal *iface)
HRESULT marshal_object(struct apartment *apt, STDOBJREF *stdobjref, REFIID riid, IUnknown *object, DWORD dest_context, void *dest_context_data, MSHLFLAGS mshlflags)
static HRESULT WINAPI StdMarshalImpl_GetMarshalSizeMax(IMarshal *iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize)
HRESULT WINAPI RPC_CreateClientChannel(const OXID *oxid, const IPID *ipid, const OXID_INFO *oxid_info, const IID *iid, DWORD dest_context, void *dest_context_data, IRpcChannelBuffer **chan, struct apartment *apt)
static const IClientSecurityVtbl ProxyCliSec_Vtbl
static BOOL find_proxy_manager(struct apartment *apt, OXID oxid, OID oid, struct proxy_manager **proxy_found)
static void dump_mshflags(MSHLFLAGS flags)
static HRESULT WINAPI ClientIdentity_QueryInterface(IMultiQI *iface, REFIID riid, void **ppv)
static HRESULT WINAPI Proxy_GetUnmarshalClass(IMarshal *iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid)
HRESULT WINAPI CoReleaseMarshalData(IStream *stream)
static HRESULT WINAPI StdMarshalImpl_UnmarshalInterface(IMarshal *iface, IStream *stream, REFIID riid, void **ppv)
static HRESULT proxy_manager_query_local_interface(struct proxy_manager *This, REFIID riid, void **ppv)
static HRESULT WINAPI ClientIdentity_QueryMultipleInterfaces(IMultiQI *iface, ULONG cMQIs, MULTI_QI *pMQIs)
static HRESULT WINAPI ftmarshaler_UnmarshalInterface(IMarshal *iface, IStream *stream, REFIID riid, void **ppv)
static ULONG WINAPI ProxyCliSec_Release(IClientSecurity *iface)
static void proxy_manager_disconnect(struct proxy_manager *This)
static HRESULT WINAPI ProxyCliSec_QueryBlanket(IClientSecurity *iface, IUnknown *pProxy, DWORD *pAuthnSvc, DWORD *pAuthzSvc, OLECHAR **ppServerPrincName, DWORD *pAuthnLevel, DWORD *pImpLevel, void **pAuthInfo, DWORD *pCapabilities)
static const IMarshalVtbl StdMarshalVtbl
static HRESULT WINAPI Proxy_GetMarshalSizeMax(IMarshal *iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize)
static void fill_std_objref(OBJREF *objref, const GUID *iid, STDOBJREF *std)
HRESULT WINAPI CoUnmarshalInterface(IStream *stream, REFIID riid, void **ppv)
HRESULT WINAPI CoGetMarshalSizeMax(ULONG *size, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
static HRESULT WINAPI ftmarshaler_GetUnmarshalClass(IMarshal *iface, REFIID riid, void *pv, DWORD dest_context, void *pvDestContext, DWORD mshlflags, CLSID *clsid)
static HRESULT WINAPI StdMarshalImpl_DisconnectObject(IMarshal *iface, DWORD reserved)
static HRESULT get_facbuf_for_iid(REFIID riid, IPSFactoryBuffer **facbuf)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
static void cleanup(void)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
#define InterlockedExchangePointer(Target, Value)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLenum GLenum GLenum mapping
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
_Must_inspect_result_ typedef _Out_ PHIDP_CAPS Capabilities
#define InterlockedExchangeAdd
#define InterlockedCompareExchange
void WINAPI CoTaskMemFree(void *ptr)
__forceinline long ReadNoFence(_In_ _Interlocked_operand_ long const volatile *Source)
#define seekto(pos, errstr)
static const IID IID_IRemUnknown
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
interface IMarshal * LPMARSHAL
#define IsEqualIID(riid1, riid2)
#define IsEqualCLSID(rclsid1, rclsid2)
#define RPC_C_AUTHN_LEVEL_DEFAULT
#define RPC_C_IMP_LEVEL_DEFAULT
static __inline const char * wine_dbgstr_guid(const GUID *id)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH(cursor, list)
struct proxy_manager * parent
IClientSecurity IClientSecurity_iface
struct apartment * parent
struct tagOBJREF::@1807::OR_CUSTOM u_custom
union tagOBJREF::@1807 u_objref
struct tagOBJREF::@1807::OR_STANDARD u_standard
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseMutex(IN HANDLE hMutex)
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
DWORD WINAPI GetLastError(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define CO_E_OBJNOTCONNECTED
#define RPC_E_INVALID_OBJREF
#define RPC_E_DISCONNECTED
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO