43#define NORMALEXTREFS 5
47#define SORFP_TABLEWEAK SORF_OXRES1
50#define SORFP_NOLIFETIMEMGMT SORF_OXRES2
117 NULL, &IID_IPSFactoryBuffer, (
LPVOID*)facbuf);
140 stdobjref->
flags = SORF_NULL;
141 if (mshlflags & MSHLFLAGS_TABLEWEAK)
143 if (mshlflags & MSHLFLAGS_NOPING)
144 stdobjref->
flags |= SORF_NOPING;
145 stdobjref->
oid = manager->
oid;
147 tablemarshal = ((mshlflags & MSHLFLAGS_TABLESTRONG) || (mshlflags & MSHLFLAGS_TABLEWEAK));
163 IPSFactoryBuffer_Release(psfb);
165 ERR(
"Failed to create an IRpcStubBuffer from IPSFactory for %s with error 0x%08x\n",
179 if (
stub) IRpcStubBuffer_Release(
stub);
198 if (mshlflags & MSHLFLAGS_TABLESTRONG)
230 hr = IMultiQI_QueryMultipleInterfaces(
iface, 1, &mqi);
239 TRACE(
"%p - before %d\n", iface,
This->refs);
256 REMQIRESULT *qiresults =
NULL;
257 ULONG nonlocal_mqis = 0;
259 ULONG successful_mqis = 0;
264 TRACE(
"cMQIs: %d\n", cMQIs);
268 for (
i = 0;
i < cMQIs;
i++)
276 iids[nonlocal_mqis] = *pMQIs[
i].pIID;
282 TRACE(
"%d interfaces not found locally\n", nonlocal_mqis);
286 if (nonlocal_mqis != 0)
303 nonlocal_mqis, iids, &qiresults);
304 IRemUnknown_Release(
remunk);
306 ERR(
"IRemUnknown_RemQueryInterface failed with error 0x%08x\n",
hr);
316 for (
i = 0;
i < nonlocal_mqis;
i++)
319 HRESULT hrobj = qiresults[
i].hResult;
323 This->dest_context_data,
325 (
void **)&pMQIs[
index].pItf);
331 pMQIs[
index].hr = hrobj;
341 TRACE(
"%d/%d successfully queried\n", successful_mqis, cMQIs);
346 if (successful_mqis == cMQIs)
348 else if (successful_mqis == 0)
373 return IMultiQI_AddRef(&
This->IMultiQI_iface);
379 return IMultiQI_Release(&
This->IMultiQI_iface);
384 void* pvDestContext,
DWORD mshlflags,
CLSID* pCid)
392 void* pvDestContext,
DWORD mshlflags,
DWORD* pSize)
411 void* pvDestContext,
DWORD mshlflags)
426 if ((mshlflags != MSHLFLAGS_TABLEWEAK) &&
427 (mshlflags != MSHLFLAGS_TABLESTRONG))
430 ULONG cPublicRefsOld;
435 ULONG cPublicRefsNew;
436 cPublicRefsOld = cPublicRefs;
441 }
while (cPublicRefs != cPublicRefsOld);
454 rif.cPublicRefs = (mshlflags == MSHLFLAGS_TABLESTRONG) ? 1 :
NORMALEXTREFS;
455 rif.cPrivateRefs = 0;
456 hr = IRemUnknown_RemAddRef(remunk, 1, &rif, &hrref);
457 IRemUnknown_Release(remunk);
462 if (mshlflags != MSHLFLAGS_TABLESTRONG)
466 ERR(
"IRemUnknown_RemAddRef returned with 0x%08x, hrref = 0x%08x\n",
hr, hrref);
474 TRACE(
"writing stdobjref: flags = %04x cPublicRefs = %d oxid = %s oid = %s ipid = %s\n",
490 REMQIRESULT *qiresults =
NULL;
504 1, &
iid, &qiresults);
515 rif.ipid = qiresults->std.ipid;
516 rif.cPublicRefs = qiresults->std.cPublicRefs;
517 rif.cPrivateRefs = 0;
518 IRemUnknown_RemRelease(remunk, 1, &rif);
523 ERR(
"IRemUnknown_RemQueryInterface failed with error 0x%08x\n",
hr);
524 IRemUnknown_Release(remunk);
541 This->dest_context_data, (
void**)&marshal);
545 hr = IMarshal_UnmarshalInterface(marshal, pStm,
riid,
ppv);
546 IMarshal_Release(marshal);
559 This->dest_context_data, (
void**)&marshal);
563 hr = IMarshal_ReleaseMarshalData(marshal, pStm);
564 IMarshal_Release(marshal);
577 This->dest_context_data, (
void**)&marshal);
582 IMarshal_Release(marshal);
608 return IMultiQI_AddRef(&
This->IMultiQI_iface);
614 return IMultiQI_Release(&
This->IMultiQI_iface);
625 DWORD *pCapabilities)
627 FIXME(
"(%p, %p, %p, %p, %p, %p, %p, %p): stub\n", pProxy, pAuthnSvc,
628 pAuthzSvc, ppServerPrincName, pAuthnLevel, pImpLevel, pAuthInfo,
635 if (ppServerPrincName)
636 *ppServerPrincName =
NULL;
644 *pCapabilities = EOAC_NONE;
657 FIXME(
"(%p, %d, %d, %s, %d, %d, %p, 0x%x): stub\n", pProxy, AuthnSvc, AuthzSvc,
658 pServerPrincName == COLE_DEFAULT_PRINCIPAL ?
"<default principal>" :
debugstr_w(pServerPrincName),
666 FIXME(
"(%p, %p): stub\n", pProxy, ppCopy);
687 ERR(
"Wait failed for ifproxy %p\n",
This);
695 TRACE(
"getting public ref for ifproxy %p\n",
This);
702 rif.ipid =
This->stdobjref.ipid;
704 rif.cPrivateRefs = 0;
705 hr = IRemUnknown_RemAddRef(
remunk, 1, &rif, &hrref);
706 IRemUnknown_Release(
remunk);
710 ERR(
"IRemUnknown_RemAddRef returned with 0x%08x, hrref = 0x%08x\n",
hr, hrref);
725 ERR(
"Wait failed for ifproxy %p\n",
This);
729 public_refs =
This->refs;
734 TRACE(
"releasing %d refs\n", public_refs);
740 rif.ipid =
This->stdobjref.ipid;
741 rif.cPublicRefs = public_refs;
742 rif.cPrivateRefs = 0;
743 hr = IRemUnknown_RemRelease(
remunk, 1, &rif);
744 IRemUnknown_Release(
remunk);
748 WARN(
"couldn't release references because object was "
749 "disconnected: oxid = %s, oid = %s\n",
753 ERR(
"IRemUnknown_RemRelease failed with error 0x%08x\n",
hr);
765 if (
This->proxy) IRpcProxyBuffer_Disconnect(
This->proxy);
767 IRpcChannelBuffer_Release(
This->chan);
784 IRpcChannelBuffer_Release(
This->chan);
788 if (
This->proxy) IRpcProxyBuffer_Release(
This->proxy);
801 if (!
This->remoting_mutex)
855 This->dest_context = MSHCTX_INPROC;
867 TRACE(
"%p created for OXID %s, OID %s\n",
This,
876 MSHCTX old_dest_context;
877 MSHCTX new_dest_context;
881 old_dest_context =
This->dest_context;
882 new_dest_context = old_dest_context;
885 switch (old_dest_context)
890 case MSHCTX_CROSSCTX:
903 case MSHCTX_CROSSCTX:
909 case MSHCTX_NOSHAREDMEM:
912 case MSHCTX_DIFFERENTMACHINE:
923 if (old_dest_context == new_dest_context)
break;
926 }
while (new_dest_context != old_dest_context);
943 IMultiQI_AddRef(&
This->IMultiQI_iface);
949 IMarshal_AddRef(&
This->IMarshal_iface);
954 *
ppv = &
This->IClientSecurity_iface;
955 IClientSecurity_AddRef(&
This->IClientSecurity_iface);
996 IMultiQI_AddRef(&
This->IMultiQI_iface);
1010 IPSFactoryBuffer_Release(psfb);
1012 ERR(
"Could not create proxy for interface %s, error 0x%08x\n",
1016 ERR(
"Could not get IPSFactoryBuffer for interface %s, error 0x%08x\n",
1030 TRACE(
"ifproxy %p created for IPID %s, interface %s with %u public refs\n",
1092 BOOL called_in_original_apt;
1102 called_in_original_apt =
This->parent && (
This->parent->oxid == apt->
oxid);
1108 if (
This->remunk && called_in_original_apt)
1111 *remunk =
This->remunk;
1112 IRemUnknown_AddRef(*remunk);
1114 else if (!
This->parent)
1131 stdobjref.
ipid =
This->oxid_info.ipidRemUnknown;
1136 &
This->oxid_info, (
void**)remunk);
1137 if (
hr ==
S_OK && called_in_original_apt)
1139 This->remunk = *remunk;
1140 IRemUnknown_AddRef(
This->remunk);
1146 TRACE(
"got IRemUnknown* pointer %p, hr = 0x%08x\n", *remunk,
hr);
1186 if (
This->remunk) IRemUnknown_Release(
This->remunk);
1214 if (IMultiQI_AddRef(&
proxy->IMultiQI_iface) != 0)
1216 *proxy_found =
proxy;
1260 IMarshal_AddRef(iface);
1287 void* pvDestContext,
DWORD mshlflags,
CLSID* pCid)
1296 void* pvDestContext,
DWORD mshlflags,
DWORD* pSize)
1305 void* dest_context_data,
DWORD mshlflags)
1316 ERR(
"Apartment not initialized\n");
1325 pv, dest_context, dest_context_data, mshlflags);
1329 ERR(
"Failed to create ifstub, hres=0x%x\n",
hres);
1333 return IStream_Write(pStm, &objref,
1341 MSHCTX dest_context,
void *dest_context_data,
1350 TRACE(
"stdobjref: flags = %04x cPublicRefs = %d oxid = %s oid = %s ipid = %s\n",
1365 TRACE(
"proxy manager already created, using\n");
1413 struct OR_STANDARD
obj;
1425 ERR(
"Apartment not initialized\n");
1444 if (
obj.saResAddr.wNumEntries)
1446 ERR(
"unsupported size of DUALSTRINGARRAY\n");
1453 TRACE(
"Unmarshalling object marshalled in same apartment for iid %s, "
1481 WARN(
"Couldn't find object for OXID %s, OID %s, assuming disconnected\n",
1488 TRACE(
"Treating unmarshal from OXID %s as inter-process\n",
1493 dest_context_data,
riid,
1500 else TRACE(
"Successfully created proxy %p\n", *
ppv);
1517 ERR(
"Failed to read common OBJREF header, 0x%08x\n",
hr);
1523 ERR(
"Bad OBJREF signature 0x%08x\n", objref.
signature);
1529 FIXME(
"unsupported objref.flags = %x\n", objref.
flags);
1539 struct OR_STANDARD
obj;
1548 if (
obj.saResAddr.wNumEntries)
1550 ERR(
"unsupported size of DUALSTRINGARRAY\n");
1554 TRACE(
"oxid = %s, oid = %s, ipid = %s\n",
1561 WARN(
"Could not map OXID %s to apartment object\n",
1569 ERR(
"could not map object ID to stub manager, oxid=%s, oid=%s\n",
1589 TRACE(
"iface=%p, pStm=%p\n", iface, pStm);
1594 ERR(
"Failed to read common OBJREF header, 0x%08x\n",
hr);
1600 ERR(
"Bad OBJREF signature 0x%08x\n", objref.
signature);
1606 FIXME(
"unsupported objref.flags = %x\n", objref.
flags);
1616 FIXME(
"(), stub!\n");
1642 pStdMarshal->
ref = 0;
1682 FIXME(
"(%s,NULL,%x,%p,%x,%p), unimplemented yet.\n",
1686 TRACE(
"(%s,%p,%x,%p,%x,%p)\n",
1698 void *pvDestContext,
DWORD mshlFlags,
1705 hr = IUnknown_QueryInterface(
pUnk, &IID_IMarshal, (
LPVOID*)pMarshal);
1708 mshlFlags, pMarshal);
1729 ERR(
"Failed to read common OBJREF header, 0x%08x\n",
hr);
1736 ERR(
"Bad OBJREF signature 0x%08x\n", objref.
signature);
1740 if (iid) *iid = objref.
iid;
1745 TRACE(
"Using standard unmarshaling\n");
1753 TRACE(
"Using custom unmarshaling\n");
1756 custom_header_size, &
res);
1757 if (
hr !=
S_OK || (
res != custom_header_size))
1759 ERR(
"Failed to read OR_CUSTOM header, 0x%08x\n",
hr);
1764 CLSCTX_INPROC_SERVER, &IID_IMarshal,
1769 FIXME(
"Invalid or unimplemented marshaling type specified: %x\n",
1775 ERR(
"Failed to create marshal, 0x%08x\n",
hr);
1801 DWORD dwDestContext,
void *pvDestContext,
1811 hr = IUnknown_QueryInterface(
pUnk, &IID_IMarshal, (
void**)&pMarshal);
1816 mshlFlags, &pMarshal);
1821 hr = IMarshal_GetMarshalSizeMax(pMarshal,
riid,
pUnk, dwDestContext,
1822 pvDestContext, mshlFlags,
pulSize);
1827 IMarshal_Release(pMarshal);
1834 if (
flags & MSHLFLAGS_TABLESTRONG)
1835 TRACE(
" MSHLFLAGS_TABLESTRONG");
1836 if (
flags & MSHLFLAGS_TABLEWEAK)
1837 TRACE(
" MSHLFLAGS_TABLEWEAK");
1838 if (!(
flags & (MSHLFLAGS_TABLESTRONG|MSHLFLAGS_TABLEWEAK)))
1839 TRACE(
" MSHLFLAGS_NORMAL");
1840 if (
flags & MSHLFLAGS_NOPING)
1841 TRACE(
" MSHLFLAGS_NOPING");
1877 DWORD dwDestContext,
void *pvDestContext,
1881 CLSID marshaler_clsid;
1885 dwDestContext, pvDestContext);
1889 if (!
pUnk || !pStream)
1896 ERR(
"Failed to get marshaller, 0x%08x\n",
hr);
1900 hr = IMarshal_GetUnmarshalClass(pMarshal,
riid,
pUnk, dwDestContext,
1901 pvDestContext, mshlFlags, &marshaler_clsid);
1904 ERR(
"IMarshal::GetUnmarshalClass failed, 0x%08x\n",
hr);
1911 TRACE(
"Using standard marshaling\n");
1917 TRACE(
"Using custom marshaling\n");
1924 hr = IMarshal_GetMarshalSizeMax(pMarshal,
riid,
pUnk, dwDestContext,
1925 pvDestContext, mshlFlags,
1929 ERR(
"Failed to get max size of marshal data, error 0x%08x\n",
hr);
1933 hr = IStream_Write(pStream, &objref,
1937 ERR(
"Failed to write OR_CUSTOM header to stream with 0x%08x\n",
hr);
1942 TRACE(
"Calling IMarshal::MarshalInterface\n");
1944 hr = IMarshal_MarshalInterface(pMarshal, pStream,
riid,
pUnk, dwDestContext,
1945 pvDestContext, mshlFlags);
1954 IMarshal_Release(pMarshal);
1956 TRACE(
"completed with hr 0x%08x\n",
hr);
1990 if (!pStream || !
ppv)
1998 ERR(
"StdMarshal UnmarshalInterface failed, 0x%08x\n",
hr);
2003 hr = IMarshal_UnmarshalInterface(pMarshal, pStream, &iid, (
LPVOID*)&
object);
2004 IMarshal_Release(pMarshal);
2006 ERR(
"IMarshal::UnmarshalInterface failed, 0x%08x\n",
hr);
2014 TRACE(
"requested interface != marshalled interface, additional QI needed\n");
2015 hr = IUnknown_QueryInterface(
object,
riid,
ppv);
2017 ERR(
"Couldn't query for interface %s, hr = 0x%08x\n",
2019 IUnknown_Release(
object);
2027 TRACE(
"completed with hr 0x%x\n",
hr);
2060 TRACE(
"(%p)\n", pStream);
2067 ERR(
"StdMarshal ReleaseMarshalData failed with error 0x%08x\n",
hr);
2074 hr = IMarshal_ReleaseMarshalData(pMarshal, pStream);
2076 ERR(
"IMarshal::ReleaseMarshalData failed with error 0x%08x\n",
hr);
2078 IMarshal_Release(pMarshal);
2116 IStream_Seek(*ppStm,
seekto, STREAM_SEEK_SET, &xpos);
2120 IStream_Release(*ppStm);
2153 IStream_Release(pStm);
2191 FIXME(
"(%d), stub!\n",fLock);
2229 return IStream_Write(pStm, &hresult,
sizeof(hresult),
NULL);
2250 return IStream_Read(pStm, phresult,
sizeof(*phresult),
NULL);
#define CO_E_NOTINITIALIZED
#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 GUID IID_IClassFactory
const CLSID CLSID_StdMarshal
struct ifstub * stub_manager_new_ifstub(struct stub_manager *m, IRpcStubBuffer *sb, REFIID iid, DWORD dest_context, void *dest_context_data, MSHLFLAGS flags) DECLSPEC_HIDDEN
struct ifstub * stub_manager_find_ifstub(struct stub_manager *m, REFIID iid, MSHLFLAGS flags) DECLSPEC_HIDDEN
#define DEBUG_SET_CRITSEC_NAME(cs, name)
#define WINE_CLSCTX_DONT_HOST
ULONG stub_manager_int_release(struct stub_manager *This) DECLSPEC_HIDDEN
void RPC_StartRemoting(struct apartment *apt) DECLSPEC_HIDDEN
ULONG stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL tableweak) DECLSPEC_HIDDEN
HRESULT 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, APARTMENT *apt) DECLSPEC_HIDDEN
BOOL stub_manager_is_table_marshaled(struct stub_manager *m, const IPID *ipid) DECLSPEC_HIDDEN
HRESULT RPC_RegisterInterface(REFIID riid) DECLSPEC_HIDDEN
#define DEBUG_CLEAR_CRITSEC_NAME(cs)
struct stub_manager * get_stub_manager(APARTMENT *apt, OID oid) DECLSPEC_HIDDEN
ULONG stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tableweak, BOOL last_unlock_releases) DECLSPEC_HIDDEN
HRESULT RPC_ResolveOxid(OXID oxid, OXID_INFO *oxid_info) DECLSPEC_HIDDEN
void stub_manager_release_marshal_data(struct stub_manager *m, ULONG refs, const IPID *ipid, BOOL tableweak) DECLSPEC_HIDDEN
struct stub_manager * get_stub_manager_from_object(APARTMENT *apt, IUnknown *object, BOOL alloc) DECLSPEC_HIDDEN
BOOL stub_manager_notify_unmarshal(struct stub_manager *m, const IPID *ipid) DECLSPEC_HIDDEN
static HRESULT apartment_getoxid(const struct apartment *apt, OXID *oxid)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define HeapFree(x, y, z)
static void cleanup(void)
HRESULT WINAPI CoGetPSClsid(REFIID riid, CLSID *pclsid)
HRESULT apartment_createwindowifneeded(struct apartment *apt)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
DWORD apartment_release(struct apartment *apt)
APARTMENT * apartment_findfromoxid(OXID oxid, BOOL ref)
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv)
APARTMENT * apartment_get_current_or_mta(void)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
struct _StdMarshalImpl StdMarshalImpl
static HRESULT WINAPI Proxy_QueryInterface(IMarshal *iface, REFIID riid, void **ppvObject)
static HRESULT proxy_manager_get_remunknown(struct proxy_manager *This, IRemUnknown **remunk)
static HRESULT ifproxy_release_public_refs(struct ifproxy *This)
HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM *ppStm)
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 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)
HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID riid, LPVOID *ppv)
static ULONG WINAPI StdMarshalImpl_AddRef(IMarshal *iface)
HRESULT WINAPI CoMarshalHresult(LPSTREAM pStm, HRESULT hresult)
static HRESULT get_unmarshaler_from_stream(IStream *stream, IMarshal **marshal, IID *iid)
static ULONG WINAPI StdMarshalCF_AddRef(LPCLASSFACTORY iface)
static ULONG WINAPI StdMarshalCF_Release(LPCLASSFACTORY iface)
HRESULT WINAPI CoGetStandardMarshal(REFIID riid, IUnknown *pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL *ppMarshal)
HRESULT MARSHAL_GetStandardMarshalCF(LPVOID *ppv)
static ULONG WINAPI ClientIdentity_Release(IMultiQI *iface)
static ULONG WINAPI ProxyCliSec_AddRef(IClientSecurity *iface)
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 HRESULT WINAPI StdMarshalImpl_DisconnectObject(IMarshal *iface, DWORD dwReserved)
static void dump_MSHLFLAGS(MSHLFLAGS flags)
static HRESULT WINAPI Proxy_MarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags)
static void ifproxy_disconnect(struct ifproxy *This)
static HRESULT WINAPI ProxyCliSec_QueryInterface(IClientSecurity *iface, REFIID riid, void **ppvObject)
static const IMultiQIVtbl ClientIdentity_Vtbl
static BOOL find_proxy_manager(APARTMENT *apt, OXID oxid, OID oid, struct proxy_manager **proxy_found)
static HRESULT WINAPI StdMarshalImpl_QueryInterface(IMarshal *iface, REFIID riid, void **ppv)
HRESULT WINAPI CoReleaseMarshalData(IStream *pStream)
static HRESULT WINAPI Proxy_ReleaseMarshalData(IMarshal *iface, IStream *pStm)
static HRESULT std_unmarshal_interface(MSHCTX dest_context, void *dest_context_data, IStream *pStm, REFIID riid, void **ppv)
static HRESULT StdMarshalImpl_Construct(REFIID, DWORD, void *, void **)
static ULONG WINAPI ClientIdentity_AddRef(IMultiQI *iface)
HRESULT WINAPI CoUnmarshalInterface(IStream *pStream, REFIID riid, LPVOID *ppv)
static HRESULT ifproxy_get_public_ref(struct ifproxy *This)
static const IClassFactoryVtbl StdMarshalCFVtbl
static HRESULT get_marshaler(REFIID riid, IUnknown *pUnk, DWORD dwDestContext, void *pvDestContext, DWORD mshlFlags, LPMARSHAL *pMarshal)
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)
static const IClassFactoryVtbl * StdMarshalCF
#define SORFP_NOLIFETIMEMGMT
static HRESULT unmarshal_object(const STDOBJREF *stdobjref, APARTMENT *apt, MSHCTX dest_context, void *dest_context_data, REFIID riid, const OXID_INFO *oxid_info, void **object)
static HRESULT WINAPI StdMarshalCF_LockServer(LPCLASSFACTORY iface, BOOL fLock)
HRESULT WINAPI CoGetMarshalSizeMax(ULONG *pulSize, REFIID riid, IUnknown *pUnk, DWORD dwDestContext, void *pvDestContext, DWORD mshlFlags)
static HRESULT WINAPI StdMarshalImpl_UnmarshalInterface(IMarshal *iface, IStream *pStm, REFIID riid, void **ppv)
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 StdMarshalImpl_MarshalInterface(IMarshal *iface, IStream *pStm, REFIID riid, void *pv, DWORD dest_context, void *dest_context_data, DWORD mshlflags)
static HRESULT proxy_manager_construct(APARTMENT *apt, ULONG sorflags, OXID oxid, OID oid, const OXID_INFO *oxid_info, struct proxy_manager **proxy_manager)
static struct proxy_manager * impl_from_IClientSecurity(IClientSecurity *iface)
static ULONG WINAPI StdMarshalImpl_Release(IMarshal *iface)
static ULONG WINAPI Proxy_AddRef(IMarshal *iface)
static struct proxy_manager * impl_from_IMarshal(IMarshal *iface)
static HRESULT WINAPI StdMarshalImpl_GetMarshalSizeMax(IMarshal *iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize)
static HRESULT std_release_marshal_data(IStream *pStm)
static StdMarshalImpl * impl_from_StdMarshal(IMarshal *iface)
HRESULT marshal_object(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnknown *object, DWORD dest_context, void *dest_context_data, MSHLFLAGS mshlflags)
static HRESULT WINAPI StdMarshalCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv)
HRESULT WINAPI CoUnmarshalHresult(LPSTREAM pStm, HRESULT *phresult)
static const IClientSecurityVtbl ProxyCliSec_Vtbl
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)
static HRESULT proxy_manager_query_local_interface(struct proxy_manager *This, REFIID riid, void **ppv)
static HRESULT WINAPI StdMarshalCF_QueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppv)
static HRESULT WINAPI ClientIdentity_QueryMultipleInterfaces(IMultiQI *iface, ULONG cMQIs, MULTI_QI *pMQIs)
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 HRESULT WINAPI StdMarshalImpl_ReleaseMarshalData(IMarshal *iface, IStream *pStm)
static void fill_std_objref(OBJREF *objref, const GUID *iid, STDOBJREF *std)
static HRESULT get_facbuf_for_iid(REFIID riid, IPSFactoryBuffer **facbuf)
HRESULT WINAPI CoMarshalInterface(IStream *pStream, REFIID riid, IUnknown *pUnk, DWORD dwDestContext, void *pvDestContext, DWORD mshlFlags)
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
#define InterlockedExchangePointer(Target, Value)
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
VOID WINAPI CoTaskMemFree(LPVOID ptr)
#define InterlockedExchangeAdd
#define InterlockedCompareExchange
#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
interface IStream * LPSTREAM
#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(cursor, list)
struct proxy_manager * parent
IClientSecurity IClientSecurity_iface
struct apartment * parent
union tagOBJREF::@1697 u_objref
struct tagOBJREF::@1697::OR_STANDARD u_standard
struct tagOBJREF::@1697::OR_CUSTOM u_custom
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
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)
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
_Check_return_ _Out_ PULONG pulSize
#define CO_E_OBJNOTCONNECTED
#define HRESULT_FROM_WIN32(x)
#define RPC_E_INVALID_OBJREF
#define RPC_E_DISCONNECTED