Rob Shearman : ole32: Fix a hack which depended on the IID of the interface being marshaled

Alexandre Julliard julliard at wine.codeweavers.com
Fri Apr 6 06:07:48 CDT 2007


Module: wine
Branch: master
Commit: 1360357f92ac6bda3c1802870fbe9a45de2fe146
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1360357f92ac6bda3c1802870fbe9a45de2fe146

Author: Rob Shearman <rob at codeweavers.com>
Date:   Thu Apr  5 17:33:36 2007 +0100

ole32: Fix a hack which depended on the IID of the interface being marshaled

to determine whether we were marshaling the remote unknown for the
apartment or not.

---

 dlls/ole32/compobj_private.h |    3 +++
 dlls/ole32/stubmanager.c     |    4 ++--
 dlls/ole32/tests/marshal.c   |    5 -----
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h
index 401224a..e877cce 100644
--- a/dlls/ole32/compobj_private.h
+++ b/dlls/ole32/compobj_private.h
@@ -45,6 +45,9 @@ DEFINE_OLEGUID( CLSID_DfMarshal, 0x0000030b, 0, 0 );
 DEFINE_OLEGUID( CLSID_PSFactoryBuffer, 0x00000320, 0, 0 );
 DEFINE_OLEGUID( CLSID_InProcFreeMarshaler, 0x0000033a, 0, 0 );
 
+/* signal to stub manager that this is a rem unknown object */
+#define MSHLFLAGSP_REMUNKNOWN   0x80000000
+
 /* Thread-safety Annotation Legend:
  *
  * RO    - The value is read only. It never changes after creation, so no
diff --git a/dlls/ole32/stubmanager.c b/dlls/ole32/stubmanager.c
index b7d6ba7..76e07a2 100644
--- a/dlls/ole32/stubmanager.c
+++ b/dlls/ole32/stubmanager.c
@@ -471,7 +471,7 @@ struct ifstub *stub_manager_new_ifstub(struct stub_manager *m, IRpcStubBuffer *s
 
     /* FIXME: find a cleaner way of identifying that we are creating an ifstub
      * for the remunknown interface */
-    if (IsEqualIID(iid, &IID_IRemUnknown))
+    if (flags & MSHLFLAGSP_REMUNKNOWN)
         stub->ipid = m->oxid_info.ipidRemUnknown;
     else
         generate_ipid(m, &stub->ipid);
@@ -763,7 +763,7 @@ HRESULT start_apartment_remote_unknown(void)
         {
             STDOBJREF stdobjref; /* dummy - not used */
             /* register it with the stub manager */
-            hr = marshal_object(apt, &stdobjref, &IID_IRemUnknown, (IUnknown *)pRemUnknown, MSHLFLAGS_NORMAL);
+            hr = marshal_object(apt, &stdobjref, &IID_IRemUnknown, (IUnknown *)pRemUnknown, MSHLFLAGS_NORMAL|MSHLFLAGSP_REMUNKNOWN);
             /* release our reference to the object as the stub manager will manage the life cycle for us */
             IRemUnknown_Release(pRemUnknown);
             if (hr == S_OK)
diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c
index 41a2aec..7e3e82e 100644
--- a/dlls/ole32/tests/marshal.c
+++ b/dlls/ole32/tests/marshal.c
@@ -2199,12 +2199,7 @@ static void test_client_security(void)
     CoTaskMemFree(pServerPrincName);
 
     IClassFactory_Release(pProxy);
-#if 0
-    /* FIXME: fix stub manager to not depend on the IID of the interface to
-     * determine whether it is really the rem unknown for the object before
-     * re-enabling this line */
     IUnknown_Release(pProxy2);
-#endif
     IUnknown_Release(pUnknown1);
     IUnknown_Release(pUnknown2);
     IMarshal_Release(pMarshal);




More information about the wine-cvs mailing list