Make COM use the RPC runtime as the backend for RPC calls. Based on a
patch by Ove Kåven.
This commit is contained in:
parent
a9a1d61038
commit
db6db7cb4c
@ -32,8 +32,6 @@
|
|||||||
* of registered class objects: ISCM::ServerRegisterClsid et al
|
* of registered class objects: ISCM::ServerRegisterClsid et al
|
||||||
* - Implement the OXID resolver so we don't need magic pipe names for
|
* - Implement the OXID resolver so we don't need magic pipe names for
|
||||||
* clients and servers to meet up
|
* clients and servers to meet up
|
||||||
* - Flip our marshalling on top of the RPC runtime transport API,
|
|
||||||
* so we no longer use named pipes to communicate
|
|
||||||
*
|
*
|
||||||
* - Make all ole interface marshaling use NDR to be wire compatible with
|
* - Make all ole interface marshaling use NDR to be wire compatible with
|
||||||
* native DCOM
|
* native DCOM
|
||||||
|
@ -197,9 +197,11 @@ IRpcStubBuffer *mid_to_stubbuffer(wine_marshal_id *mid);
|
|||||||
|
|
||||||
void start_apartment_listener_thread(void);
|
void start_apartment_listener_thread(void);
|
||||||
|
|
||||||
extern HRESULT PIPE_GetNewPipeBuf(wine_marshal_id *mid, IRpcChannelBuffer **pipebuf);
|
HRESULT PIPE_GetNewPipeBuf(wine_marshal_id *mid, IRpcChannelBuffer **pipebuf);
|
||||||
void RPC_StartLocalServer(REFCLSID clsid, IStream *stream);
|
|
||||||
HRESULT RPC_ExecuteCall(RPCOLEMESSAGE *msg, IRpcStubBuffer *stub);
|
HRESULT RPC_ExecuteCall(RPCOLEMESSAGE *msg, IRpcStubBuffer *stub);
|
||||||
|
HRESULT RPC_RegisterInterface(REFIID riid);
|
||||||
|
void RPC_UnregisterInterface(REFIID riid);
|
||||||
|
void RPC_StartLocalServer(REFCLSID clsid, IStream *stream);
|
||||||
|
|
||||||
/* This function initialize the Running Object Table */
|
/* This function initialize the Running Object Table */
|
||||||
HRESULT WINAPI RunningObjectTableImpl_Initialize(void);
|
HRESULT WINAPI RunningObjectTableImpl_Initialize(void);
|
||||||
|
@ -153,6 +153,9 @@ HRESULT register_ifstub(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnkn
|
|||||||
stub_manager_ext_addref(manager, 1);
|
stub_manager_ext_addref(manager, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: check return value */
|
||||||
|
RPC_RegisterInterface(riid);
|
||||||
|
|
||||||
stdobjref->ipid = ifstub->ipid;
|
stdobjref->ipid = ifstub->ipid;
|
||||||
|
|
||||||
stub_manager_int_release(manager);
|
stub_manager_int_release(manager);
|
||||||
|
1053
dlls/ole32/rpc.c
1053
dlls/ole32/rpc.c
File diff suppressed because it is too large
Load Diff
@ -418,8 +418,10 @@ struct ifstub *stub_manager_new_ifstub(struct stub_manager *m, IRpcStubBuffer *s
|
|||||||
static void stub_manager_delete_ifstub(struct stub_manager *m, struct ifstub *ifstub)
|
static void stub_manager_delete_ifstub(struct stub_manager *m, struct ifstub *ifstub)
|
||||||
{
|
{
|
||||||
TRACE("m=%p, m->oid=%s, ipid=%s\n", m, wine_dbgstr_longlong(m->oid), debugstr_guid(&ifstub->ipid));
|
TRACE("m=%p, m->oid=%s, ipid=%s\n", m, wine_dbgstr_longlong(m->oid), debugstr_guid(&ifstub->ipid));
|
||||||
|
|
||||||
list_remove(&ifstub->entry);
|
list_remove(&ifstub->entry);
|
||||||
|
|
||||||
|
RPC_UnregisterInterface(&ifstub->iid);
|
||||||
|
|
||||||
IUnknown_Release(ifstub->stubbuffer);
|
IUnknown_Release(ifstub->stubbuffer);
|
||||||
IUnknown_Release(ifstub->iface);
|
IUnknown_Release(ifstub->iface);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user