Am Sonntag, den 11.10.2009, 17:15 +0200 schrieb Stefan Dösinger:
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?
You are right.
- I'm working on 64 bit (gcc 4.3.3) - #pragma pack(push,4) / #pragma pack(pop) around DDDEVICEIDENTIFIER2 fixes the behaviour - a testcase fails without pragma:
ok(sizeof(DDDEVICEIDENTIFIER2)==0x42c, "DDDEVICEIDENTIFIER2 too large (misaligned)\n");
I'll send a patch