According to Stefans suggestion I have implemented a test for the string
copies into the identifier structure. Test is designed to fail to give
me a hint what is going on. Hopefully someone can post the results of a
test run in native environment.
Thank you
diff --git a/dlls/ddraw/tests/ddrawmodes.c b/dlls/ddraw/tests/ddrawmodes.c
index bd8bec7..b52a903 100644
--- a/dlls/ddraw/tests/ddrawmodes.c
+++ b/dlls/ddraw/tests/ddrawmodes.c
@@ -645,6 +645,38 @@ static void testddraw3(void)
if(SUCCEEDED(hr) && dd3) IDirectDraw3_Release(dd3);
}
+static void testddraw7(void)
+{
+ IDirectDraw7 *dd7;
+ HRESULT hr;
+ DWORD dddi2[0x110];
+ DDDEVICEIDENTIFIER2 *pdddi2;
+
+ hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw7, (void **) &dd7);
+ ok(hr==DD_OK, "IDirectDraw7_QueryInterface returned %08x\n", hr);
+
+ if (hr==DD_OK)
+ {
+ pdddi2 = (DDDEVICEIDENTIFIER2 *)dddi2;
+ dddi2[0x7f] = 0xdeadbeef;
+ dddi2[0xff] = 0xdeadbeef;
+ dddi2[0x10b] = 0xdeadbeef;
+ hr = IDirectDraw7_GetDeviceIdentifier(dd7, pdddi2, 0);
+ ok(hr==DD_OK, "get device identifier failed with %08x\n", hr);
+
+ if (hr==DD_OK)
+ {
+ /* check how strings are copied to the structure */
+ ok(1==0, "last bytes of szDriver string are %08x\n", dddi2[0x7f]);
+ ok(1==0, "last bytes of szDescription string are %08x\n", dddi2[0xff]);
+ /* verify that 8 byte structure size alignment will not overwrite memory */
+ ok(dddi2[0x10b]==0xdeadbeef, "memory beyond DDDEVICEIDENTIFIER2 overwritten\n");
+ }
+
+ IDirectDraw_Release(dd7);
+ }
+}
+
START_TEST(ddrawmodes)
{
init_function_pointers();
@@ -663,6 +695,7 @@ START_TEST(ddrawmodes)
testdisplaymodes();
flushdisplaymodes();
testddraw3();
+ testddraw7();
releasedirectdraw();
createdirectdraw();