Am 11.10.2009 um 14:42 schrieb Markus Stockhausen:
Am Sonntag, den 11.10.2009, 13:18 +0200 schrieb Markus Stockhausen:
Then I'm somehow in trouble. How can one explain the following error: Application calls IDirectDraw GetDeviceIdentifier of DDRAW7 but only reserves memory with sizeof(DDEVICEIDENTIFIER) instead of sizeof(DDEVICEIDENTIFIER2) bytes. Wine returns the required structure but with the contents of dwWHQLLevel stack contents are overwritten.
Markus
Source of error was found. DDEVICEIDENTIFIER2 is aligned to 8 bytes and therefore 4 bytes too large (at least on my 64 bit Linux). Should a patch include a pragma pack handling in the ddraw.h file itself or is there any other location where one can fix that?
Does a pragma pack fix the issue? If yes, then that's probably the correct fix.
Its probably worth writing a test that allocates e.g. a char data[64], then passes this to GetDeviceIdentifier, fill it with non-zero data, and check how much is overwritten.
Otoh I find it strange that the struct is aligned to 8 bytes. Are you running wine in 64 bit? Or do you have some other compiler flags that make the compiler use 8 byte alignment?