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.

Robert Shearman rob at codeweavers.com
Thu Apr 5 11:33:36 CDT 2007


---
  dlls/ole32/compobj_private.h |    3 +++
  dlls/ole32/stubmanager.c     |    4 ++--
  dlls/ole32/tests/marshal.c   |    5 -----
  3 files changed, 5 insertions(+), 7 deletions(-)
-------------- next part --------------
diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h
index 0f358c2..c053782 100644
--- a/dlls/ole32/compobj_private.h
+++ b/dlls/ole32/compobj_private.h
@@ -45,6 +45,9 @@ DEFINE_OLEGUID( CLSID_DfMarshal, 0x00000
 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(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(v
         {
             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 8a9a34f..daedc0c 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-patches mailing list