mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 20:04:06 +00:00
combase: Move remaining marshalling code.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
59a724d0cd
commit
11057c1370
|
@ -443,8 +443,6 @@ void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay)
|
|||
LeaveCriticalSection(&apt->cs);
|
||||
}
|
||||
|
||||
extern HRESULT WINAPI Internal_apartment_disconnectproxies(struct apartment *apt);
|
||||
|
||||
void WINAPI apartment_release(struct apartment *apt)
|
||||
{
|
||||
DWORD refcount;
|
||||
|
@ -499,7 +497,7 @@ void WINAPI apartment_release(struct apartment *apt)
|
|||
/* no locking is needed for this apartment, because no other thread
|
||||
* can access it at this point */
|
||||
|
||||
Internal_apartment_disconnectproxies(apt);
|
||||
apartment_disconnectproxies(apt);
|
||||
|
||||
if (apt->win) DestroyWindow(apt->win);
|
||||
if (apt->host_apt_tid) PostThreadMessageW(apt->host_apt_tid, WM_QUIT, 0, 0);
|
||||
|
@ -629,7 +627,7 @@ struct apartment * WINAPI apartment_get_current_or_mta(void)
|
|||
}
|
||||
|
||||
/* The given OXID must be local to this process */
|
||||
struct apartment * WINAPI apartment_findfromoxid(OXID oxid)
|
||||
struct apartment * apartment_findfromoxid(OXID oxid)
|
||||
{
|
||||
struct apartment *result = NULL;
|
||||
struct list *cursor;
|
||||
|
@ -1236,7 +1234,7 @@ static BOOL WINAPI register_class( INIT_ONCE *once, void *param, void **context
|
|||
|
||||
/* create a window for the apartment or return the current one if one has
|
||||
* already been created */
|
||||
HRESULT WINAPI apartment_createwindowifneeded(struct apartment *apt)
|
||||
HRESULT apartment_createwindowifneeded(struct apartment *apt)
|
||||
{
|
||||
static INIT_ONCE class_init_once = INIT_ONCE_STATIC_INIT;
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
@ stdcall CoGetObjectContext(ptr ptr)
|
||||
@ stdcall CoGetPSClsid(ptr ptr)
|
||||
@ stub CoGetProcessIdentifier
|
||||
@ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr) ole32.CoGetStandardMarshal
|
||||
@ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr)
|
||||
@ stub CoGetStdMarshalEx
|
||||
@ stub CoGetSystemSecurityPermissions
|
||||
@ stdcall CoGetTreatAsClass(ptr ptr)
|
||||
|
@ -246,7 +246,7 @@
|
|||
@ stub InternalCoIsSurrogateProcess
|
||||
@ stub InternalCoRegisterDisconnectCallback
|
||||
@ stub InternalCoRegisterSurrogatedObject
|
||||
@ stub InternalCoStdMarshalObject
|
||||
@ stdcall InternalCoStdMarshalObject(ptr long ptr ptr)
|
||||
@ stub InternalCoUnregisterDisconnectCallback
|
||||
@ stub InternalCompleteObjRef
|
||||
@ stub InternalCreateCAggId
|
||||
|
@ -355,18 +355,7 @@
|
|||
@ stdcall apartment_release(ptr)
|
||||
@ stdcall enter_apartment(ptr long)
|
||||
@ stdcall leave_apartment(ptr)
|
||||
@ stdcall apartment_findfromoxid(int64)
|
||||
@ stdcall apartment_getwindow(ptr)
|
||||
@ stdcall apartment_createwindowifneeded(ptr)
|
||||
@ stdcall stub_manager_int_release(ptr)
|
||||
@ stdcall get_stub_manager(ptr int64)
|
||||
@ stdcall stub_manager_is_table_marshaled(ptr ptr)
|
||||
@ stdcall stub_manager_notify_unmarshal(ptr ptr)
|
||||
@ stdcall stub_manager_ext_release(ptr long long long)
|
||||
@ stdcall stub_manager_release_marshal_data(ptr long ptr long)
|
||||
@ stdcall get_stub_manager_from_object(ptr ptr long)
|
||||
@ stdcall stub_manager_find_ifstub(ptr ptr long)
|
||||
@ stdcall stub_manager_ext_addref(ptr long long)
|
||||
@ stdcall stub_manager_new_ifstub(ptr ptr ptr long ptr long)
|
||||
@ stdcall ipid_get_dispatch_params(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall start_apartment_remote_unknown(ptr)
|
||||
|
|
|
@ -103,10 +103,11 @@ static inline struct apartment* com_get_current_apt(void)
|
|||
}
|
||||
|
||||
HWND WINAPI apartment_getwindow(const struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
HRESULT WINAPI apartment_createwindowifneeded(struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
HRESULT apartment_createwindowifneeded(struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
void apartment_freeunusedlibraries(struct apartment *apt, DWORD unload_delay) DECLSPEC_HIDDEN;
|
||||
void apartment_global_cleanup(void) DECLSPEC_HIDDEN;
|
||||
OXID apartment_getoxid(const struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
HRESULT apartment_disconnectproxies(struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
|
||||
/* RpcSs interface */
|
||||
HRESULT rpcss_get_next_seqid(DWORD *id) DECLSPEC_HIDDEN;
|
||||
|
@ -148,7 +149,7 @@ HRESULT apartment_get_local_server_stream(struct apartment *apt, IStream **ret)
|
|||
IUnknown *com_get_registered_class_object(const struct apartment *apartment, REFCLSID rclsid,
|
||||
DWORD clscontext) DECLSPEC_HIDDEN;
|
||||
void apartment_revoke_all_classes(const struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
struct apartment * WINAPI apartment_findfromoxid(OXID oxid);
|
||||
struct apartment * apartment_findfromoxid(OXID oxid) DECLSPEC_HIDDEN;
|
||||
struct apartment * apartment_findfromtid(DWORD tid) DECLSPEC_HIDDEN;
|
||||
|
||||
/* Stub Manager */
|
||||
|
@ -219,11 +220,14 @@ struct stub_manager
|
|||
};
|
||||
|
||||
ULONG WINAPI stub_manager_int_release(struct stub_manager *stub_manager) DECLSPEC_HIDDEN;
|
||||
struct stub_manager * WINAPI get_stub_manager_from_object(struct apartment *apt, IUnknown *object, BOOL alloc);
|
||||
struct stub_manager * get_stub_manager_from_object(struct apartment *apt, IUnknown *object, BOOL alloc) DECLSPEC_HIDDEN;
|
||||
void stub_manager_disconnect(struct stub_manager *m) DECLSPEC_HIDDEN;
|
||||
ULONG WINAPI stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL tableweak) DECLSPEC_HIDDEN;
|
||||
ULONG WINAPI stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tableweak, BOOL last_unlock_releases) DECLSPEC_HIDDEN;
|
||||
struct stub_manager * WINAPI get_stub_manager(struct apartment *apt, OID oid);
|
||||
void WINAPI stub_manager_release_marshal_data(struct stub_manager *m, ULONG refs, const IPID *ipid, BOOL tableweak);
|
||||
BOOL WINAPI stub_manager_is_table_marshaled(struct stub_manager *m, const IPID *ipid);
|
||||
BOOL WINAPI stub_manager_notify_unmarshal(struct stub_manager *m, const IPID *ipid);
|
||||
ULONG stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL tableweak) DECLSPEC_HIDDEN;
|
||||
ULONG stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tableweak, BOOL last_unlock_releases) DECLSPEC_HIDDEN;
|
||||
struct stub_manager * get_stub_manager(struct apartment *apt, OID oid) DECLSPEC_HIDDEN;
|
||||
void stub_manager_release_marshal_data(struct stub_manager *m, ULONG refs, const IPID *ipid, BOOL tableweak) DECLSPEC_HIDDEN;
|
||||
BOOL stub_manager_is_table_marshaled(struct stub_manager *m, const IPID *ipid) DECLSPEC_HIDDEN;
|
||||
BOOL stub_manager_notify_unmarshal(struct stub_manager *m, const IPID *ipid) DECLSPEC_HIDDEN;
|
||||
struct ifstub * stub_manager_find_ifstub(struct stub_manager *m, REFIID iid, MSHLFLAGS flags) DECLSPEC_HIDDEN;
|
||||
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;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -73,7 +73,7 @@ static inline HRESULT generate_ipid(struct stub_manager *m, IPID *ipid)
|
|||
}
|
||||
|
||||
/* registers a new interface stub COM object with the stub manager and returns registration record */
|
||||
struct ifstub * WINAPI stub_manager_new_ifstub(struct stub_manager *m, IRpcStubBuffer *sb, REFIID iid, DWORD dest_context,
|
||||
struct ifstub * stub_manager_new_ifstub(struct stub_manager *m, IRpcStubBuffer *sb, REFIID iid, DWORD dest_context,
|
||||
void *dest_context_data, MSHLFLAGS flags)
|
||||
{
|
||||
struct ifstub *stub;
|
||||
|
@ -161,7 +161,7 @@ static struct ifstub *stub_manager_ipid_to_ifstub(struct stub_manager *m, const
|
|||
return result;
|
||||
}
|
||||
|
||||
struct ifstub * WINAPI stub_manager_find_ifstub(struct stub_manager *m, REFIID iid, MSHLFLAGS flags)
|
||||
struct ifstub * stub_manager_find_ifstub(struct stub_manager *m, REFIID iid, MSHLFLAGS flags)
|
||||
{
|
||||
struct ifstub *result = NULL;
|
||||
struct ifstub *ifstub;
|
||||
|
@ -340,7 +340,7 @@ ULONG WINAPI stub_manager_int_release(struct stub_manager *m)
|
|||
/* gets the stub manager associated with an object - caller must have
|
||||
* a reference to the apartment while a reference to the stub manager is held.
|
||||
* it must also call release on the stub manager when it is no longer needed */
|
||||
struct stub_manager * WINAPI get_stub_manager_from_object(struct apartment *apt, IUnknown *obj, BOOL alloc)
|
||||
struct stub_manager * get_stub_manager_from_object(struct apartment *apt, IUnknown *obj, BOOL alloc)
|
||||
{
|
||||
struct stub_manager *result = NULL;
|
||||
struct list *cursor;
|
||||
|
@ -389,7 +389,7 @@ struct stub_manager * WINAPI get_stub_manager_from_object(struct apartment *apt,
|
|||
/* gets the stub manager associated with an object id - caller must have
|
||||
* a reference to the apartment while a reference to the stub manager is held.
|
||||
* it must also call release on the stub manager when it is no longer needed */
|
||||
struct stub_manager * WINAPI get_stub_manager(struct apartment *apt, OID oid)
|
||||
struct stub_manager * get_stub_manager(struct apartment *apt, OID oid)
|
||||
{
|
||||
struct stub_manager *result = NULL;
|
||||
struct list *cursor;
|
||||
|
@ -417,7 +417,7 @@ struct stub_manager * WINAPI get_stub_manager(struct apartment *apt, OID oid)
|
|||
}
|
||||
|
||||
/* add some external references (ie from a client that unmarshaled an ifptr) */
|
||||
ULONG WINAPI stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL tableweak)
|
||||
ULONG stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL tableweak)
|
||||
{
|
||||
BOOL first_extern_ref;
|
||||
ULONG rc;
|
||||
|
@ -448,7 +448,7 @@ ULONG WINAPI stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL ta
|
|||
}
|
||||
|
||||
/* remove some external references */
|
||||
ULONG WINAPI stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tableweak, BOOL last_unlock_releases)
|
||||
ULONG stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tableweak, BOOL last_unlock_releases)
|
||||
{
|
||||
BOOL last_extern_ref;
|
||||
ULONG rc;
|
||||
|
@ -571,7 +571,7 @@ HRESULT WINAPI ipid_get_dispatch_params(const IPID *ipid, struct apartment **stu
|
|||
}
|
||||
|
||||
/* returns TRUE if it is possible to unmarshal, FALSE otherwise. */
|
||||
BOOL WINAPI stub_manager_notify_unmarshal(struct stub_manager *m, const IPID *ipid)
|
||||
BOOL stub_manager_notify_unmarshal(struct stub_manager *m, const IPID *ipid)
|
||||
{
|
||||
BOOL ret = TRUE;
|
||||
struct ifstub *ifstub;
|
||||
|
@ -602,7 +602,7 @@ BOOL WINAPI stub_manager_notify_unmarshal(struct stub_manager *m, const IPID *ip
|
|||
}
|
||||
|
||||
/* handles refcounting for CoReleaseMarshalData */
|
||||
void WINAPI stub_manager_release_marshal_data(struct stub_manager *m, ULONG refs, const IPID *ipid, BOOL tableweak)
|
||||
void stub_manager_release_marshal_data(struct stub_manager *m, ULONG refs, const IPID *ipid, BOOL tableweak)
|
||||
{
|
||||
struct ifstub *ifstub;
|
||||
|
||||
|
@ -618,7 +618,7 @@ void WINAPI stub_manager_release_marshal_data(struct stub_manager *m, ULONG refs
|
|||
}
|
||||
|
||||
/* is an ifstub table marshaled? */
|
||||
BOOL WINAPI stub_manager_is_table_marshaled(struct stub_manager *m, const IPID *ipid)
|
||||
BOOL stub_manager_is_table_marshaled(struct stub_manager *m, const IPID *ipid)
|
||||
{
|
||||
struct ifstub *ifstub = stub_manager_ipid_to_ifstub(m, ipid);
|
||||
|
||||
|
|
|
@ -109,19 +109,6 @@ struct stub_manager
|
|||
BOOL disconnected; /* CoDisconnectObject has been called (CS lock) */
|
||||
};
|
||||
|
||||
/* imported interface proxy */
|
||||
struct ifproxy
|
||||
{
|
||||
struct list entry; /* entry in proxy_manager list (CS parent->cs) */
|
||||
struct proxy_manager *parent; /* owning proxy_manager (RO) */
|
||||
LPVOID iface; /* interface pointer (RO) */
|
||||
STDOBJREF stdobjref; /* marshal data that represents this object (RO) */
|
||||
IID iid; /* interface ID (RO) */
|
||||
LPRPCPROXYBUFFER proxy; /* interface proxy (RO) */
|
||||
ULONG refs; /* imported (public) references (LOCK) */
|
||||
IRpcChannelBuffer *chan; /* channel to object (CS parent->cs) */
|
||||
};
|
||||
|
||||
struct apartment
|
||||
{
|
||||
struct list entry;
|
||||
|
@ -195,35 +182,31 @@ HRESULT FTMarshalCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN;
|
|||
/* Stub Manager */
|
||||
|
||||
extern ULONG WINAPI stub_manager_int_release(struct stub_manager *This) DECLSPEC_HIDDEN;
|
||||
extern struct stub_manager * WINAPI get_stub_manager(struct apartment *apt, OID oid) DECLSPEC_HIDDEN;
|
||||
|
||||
/* RPC Backend */
|
||||
|
||||
struct dispatch_params;
|
||||
|
||||
void RPC_StartRemoting(struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
HRESULT RPC_CreateClientChannel(const OXID *oxid, const IPID *ipid,
|
||||
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) DECLSPEC_HIDDEN;
|
||||
HRESULT RPC_RegisterInterface(REFIID riid) DECLSPEC_HIDDEN;
|
||||
HRESULT WINAPI RPC_RegisterInterface(REFIID riid) DECLSPEC_HIDDEN;
|
||||
HRESULT RPC_RegisterChannelHook(REFGUID rguid, IChannelHook *hook) DECLSPEC_HIDDEN;
|
||||
void RPC_UnregisterAllChannelHooks(void) DECLSPEC_HIDDEN;
|
||||
HRESULT RPC_ResolveOxid(OXID oxid, OXID_INFO *oxid_info) DECLSPEC_HIDDEN;
|
||||
HRESULT WINAPI RPC_ResolveOxid(OXID oxid, OXID_INFO *oxid_info) DECLSPEC_HIDDEN;
|
||||
|
||||
/* Drag and drop */
|
||||
void OLEDD_UnInitialize(void) DECLSPEC_HIDDEN;
|
||||
|
||||
/* Apartment Functions */
|
||||
|
||||
extern struct apartment * WINAPI apartment_findfromoxid(OXID oxid) DECLSPEC_HIDDEN;
|
||||
extern void WINAPI apartment_release(struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
static inline HRESULT apartment_getoxid(const struct apartment *apt, OXID *oxid)
|
||||
{
|
||||
*oxid = apt->oxid;
|
||||
return S_OK;
|
||||
}
|
||||
extern HRESULT WINAPI apartment_createwindowifneeded(struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
extern HWND WINAPI apartment_getwindow(const struct apartment *apt) DECLSPEC_HIDDEN;
|
||||
extern HRESULT WINAPI enter_apartment(struct oletls *info, DWORD model) DECLSPEC_HIDDEN;
|
||||
void WINAPI leave_apartment(struct oletls *info) DECLSPEC_HIDDEN;
|
||||
|
|
1661
dlls/ole32/marshal.c
1661
dlls/ole32/marshal.c
File diff suppressed because it is too large
Load diff
|
@ -43,7 +43,7 @@
|
|||
@ stdcall CoGetObject(wstr ptr ptr ptr)
|
||||
@ stdcall CoGetObjectContext(ptr ptr) combase.CoGetObjectContext
|
||||
@ stdcall CoGetPSClsid(ptr ptr) combase.CoGetPSClsid
|
||||
@ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr)
|
||||
@ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr) combase.CoGetStandardMarshal
|
||||
@ stdcall CoGetState(ptr)
|
||||
@ stub CoGetTIDFromIPID
|
||||
@ stdcall CoGetTreatAsClass(ptr ptr) combase.CoGetTreatAsClass
|
||||
|
@ -299,9 +299,10 @@
|
|||
@ stub WriteOleStg
|
||||
@ stub WriteStringStream
|
||||
|
||||
@ stdcall Internal_apartment_disconnectproxies(ptr)
|
||||
@ stdcall Internal_RPC_ExecuteCall(ptr)
|
||||
@ stdcall marshal_object(ptr ptr ptr ptr long ptr long)
|
||||
@ stdcall unmarshal_object(ptr ptr long ptr ptr ptr ptr)
|
||||
@ stdcall RPC_CreateServerChannel(long ptr ptr)
|
||||
@ stdcall RPC_UnregisterInterface(ptr long)
|
||||
@ stdcall RPC_RegisterInterface(ptr)
|
||||
@ stdcall RPC_ResolveOxid(int64 ptr)
|
||||
@ stdcall RPC_StartRemoting(ptr)
|
||||
@ stdcall RPC_CreateClientChannel(ptr ptr ptr ptr long ptr ptr ptr)
|
||||
|
|
|
@ -1096,7 +1096,7 @@ static const IRpcChannelBufferVtbl ServerRpcChannelBufferVtbl =
|
|||
};
|
||||
|
||||
/* returns a channel buffer for proxies */
|
||||
HRESULT RPC_CreateClientChannel(const OXID *oxid, const IPID *ipid,
|
||||
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)
|
||||
|
@ -1531,7 +1531,7 @@ static void __RPC_STUB dispatch_rpc(RPC_MESSAGE *msg)
|
|||
}
|
||||
|
||||
/* stub registration */
|
||||
HRESULT RPC_RegisterInterface(REFIID riid)
|
||||
HRESULT WINAPI RPC_RegisterInterface(REFIID riid)
|
||||
{
|
||||
struct registered_if *rif;
|
||||
BOOL found = FALSE;
|
||||
|
@ -1610,7 +1610,7 @@ void WINAPI RPC_UnregisterInterface(REFIID riid, BOOL wait)
|
|||
|
||||
/* get the info for an OXID, including the IPID for the rem unknown interface
|
||||
* and the string binding */
|
||||
HRESULT RPC_ResolveOxid(OXID oxid, OXID_INFO *oxid_info)
|
||||
HRESULT WINAPI RPC_ResolveOxid(OXID oxid, OXID_INFO *oxid_info)
|
||||
{
|
||||
TRACE("%s\n", wine_dbgstr_longlong(oxid));
|
||||
|
||||
|
@ -1631,7 +1631,7 @@ HRESULT RPC_ResolveOxid(OXID oxid, OXID_INFO *oxid_info)
|
|||
|
||||
/* make the apartment reachable by other threads and processes and create the
|
||||
* IRemUnknown object */
|
||||
void RPC_StartRemoting(struct apartment *apt)
|
||||
void WINAPI RPC_StartRemoting(struct apartment *apt)
|
||||
{
|
||||
if (!InterlockedExchange(&apt->remoting_started, TRUE))
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue