ddraw: Reject IDirectDraw3 QI in ddraw.dll.
authorStefan Dösinger <stefan@codeweavers.com>
Tue, 16 Dec 2008 19:56:41 +0000 (20:56 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Sat, 3 Jan 2009 14:14:51 +0000 (15:14 +0100)
dlls/ddraw/ddraw.c
dlls/ddraw/tests/ddrawmodes.c

index 7024a0f1f9174e0e0efe42a98ccd59024e28ea75..286e4b32f07bab6d79df90bf5e71d033c8a9ab5a 100644 (file)
@@ -121,8 +121,11 @@ IDirectDrawImpl_QueryInterface(IDirectDraw7 *iface,
     }
     else if ( IsEqualGUID( &IID_IDirectDraw3, refiid ) )
     {
-        *obj = ICOM_INTERFACE(This, IDirectDraw3);
-        TRACE("(%p) Returning IDirectDraw3 interface at %p\n", This, *obj);
+        /* This Interface exists in ddrawex.dll, it is implemented in a wrapper */
+        WARN("IDirectDraw3 is not valid in ddraw.dll\n");
+        *obj = NULL;
+        LeaveCriticalSection(&ddraw_cs);
+        return E_NOINTERFACE;
     }
     else if ( IsEqualGUID( &IID_IDirectDraw2, refiid ) )
     {
index d21c3b4f350d82a7d9c9dbd18d5c1e34d4f95435..67dd9d4cbf4b56bf24500a1c0794723b719c8d80 100644 (file)
@@ -385,6 +385,21 @@ static void testcooperativelevels_exclusive(void)
     /* All done */
 }
 
+static void testddraw3(void)
+{
+    const GUID My_IID_IDirectDraw3 = {
+        0x618f8ad4,
+        0x8b7a,
+        0x11d0,
+        { 0x8f,0xcc,0x0,0xc0,0x4f,0xd9,0x18,0x9d }
+    };
+    IDirectDraw3 *dd3;
+    HRESULT hr;
+    hr = IDirectDraw_QueryInterface(lpDD, &My_IID_IDirectDraw3, (void **) &dd3);
+    ok(hr == E_NOINTERFACE, "QueryInterface for IID_IDirectDraw3 returned 0x%08x, expected E_NOINTERFACE\n", hr);
+    if(SUCCEEDED(hr) && dd3) IDirectDraw3_Release(dd3);
+}
+
 START_TEST(ddrawmodes)
 {
     createwindow();
@@ -394,6 +409,7 @@ START_TEST(ddrawmodes)
     if (winetest_interactive)
         testdisplaymodes();
     flushdisplaymodes();
+    testddraw3();
     releasedirectdraw();
 
     createdirectdraw();