#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
int main()
{
printf("size: %d\n", (int)sizeof(JOBOBJECT_BASIC_LIMIT_INFORMATION));
return 0;
}
cl test.cpp && test.exesize: 44 (wrong)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
int main()
{
printf("size: %d\n", (int)sizeof(JOBOBJECT_BASIC_LIMIT_INFORMATION));
return 0;
}
cl test.cpp && test.exesize: 48 (right)
I have just spent a few hours trying to figure out why SetInformationJobObject() kept failing in one of my projects.
And when it's because Microsoft can't decide if LARGE_INTEGER should be aligned to 4 or 8 bytes, I can't help but cursing their name.
The problem apears to be that winsock2.h does a "pragma pack(4)" before including windows.h, this will mess up some of the types defined in windows.h, including JOBOBJECT_BASIC_LIMIT_INFORMATION.
This was tested with VC2010 and the v7.0A sdk.