[1/3] ole32: Return success from OleLockRunning when the object does not support IRunnableObject.

Hans Leidekker hans at codeweavers.com
Wed Nov 11 04:21:11 CST 2009


Fixes http://bugs.winehq.org/show_bug.cgi?id=19352
---
 dlls/ole32/ole2.c       |    4 ++--
 dlls/ole32/tests/ole2.c |   40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c
index 3b87aac..c612f33 100644
--- a/dlls/ole32/ole2.c
+++ b/dlls/ole32/ole2.c
@@ -1140,8 +1140,8 @@ HRESULT WINAPI OleLockRunning(LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCl
 
     return hres;
   }
-  else
-    return E_INVALIDARG;
+
+  return S_OK;
 }
 
 
diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c
index 214c17e..8d23df5 100644
--- a/dlls/ole32/tests/ole2.c
+++ b/dlls/ole32/tests/ole2.c
@@ -1556,6 +1556,45 @@ static void test_runnable(void)
     g_showRunnable = TRUE;
 }
 
+static HRESULT WINAPI Unknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
+{
+    *ppv = NULL;
+    if (IsEqualIID(riid, &IID_IUnknown)) *ppv = iface;
+    if (*ppv)
+    {
+        IUnknown_AddRef((IUnknown *)*ppv);
+        return S_OK;
+    }
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI Unknown_AddRef(IUnknown *iface)
+{
+    return 2;
+}
+
+static ULONG WINAPI Unknown_Release(IUnknown *iface)
+{
+    return 1;
+}
+
+static const IUnknownVtbl UnknownVtbl =
+{
+    Unknown_QueryInterface,
+    Unknown_AddRef,
+    Unknown_Release
+};
+
+static IUnknown Unknown = { &UnknownVtbl };
+
+static void test_OleLockRunning(void)
+{
+    HRESULT hr;
+
+    hr = OleLockRunning((LPUNKNOWN)&Unknown, TRUE, FALSE);
+    ok(hr == S_OK, "OleLockRunning failed 0x%08x\n", hr);
+}
+
 START_TEST(ole2)
 {
     DWORD dwRegister;
@@ -1587,6 +1626,7 @@ START_TEST(ole2)
     test_data_cache();
     test_default_handler();
     test_runnable();
+    test_OleLockRunning();
 
     CoUninitialize();
 }
-- 
1.6.3.3




More information about the wine-patches mailing list