The test doesn't pass here under XP:
I've also tested it under (a fully patched) XP. However it might be a differance in compilers - in your output the pointers to DefWindowProc[AW] looks like pointing to the EXE image. What compiler did you use? I've used Visual C++ 7.1 and get pointer pointing to user32. Could you do:
printf("%p, %p, %p\n", DefWindowProcA, GetModuleHandle(NULL), GetModuleHandle("user32"));
I get: 77D4D4EE, 00400000, 77D40000
Mikołaj Zalewski