* if any of these flags are set in dwCallbackFlags (struct EDD_DIRECTDRAW_GLOBAL),
* it means that the respective callback member for it has been filled in by a graphic driver
*/
-#define EDDDGBL_MISCCALLBACKS 0x01 // ddMiscellanousCallbacks
-#define EDDDGBL_VIDEOPORTCALLBACKS 0x02 // ddVideoPortCallback
-#define EDDDGBL_MISC2CALLBACKS 0x80 // ddMiscellanous2Callbacks
+#define EDDDGBL_MISCCALLBACKS 0x001 // ddMiscellanousCallbacks
+#define EDDDGBL_VIDEOPORTCALLBACKS 0x002 // ddVideoPortCallback
+#define EDDDGBL_COLORCONTROLCALLBACKS 0x004 // ddColorControlCallbacks
+#define EDDDGBL_MOTIONCOMPCALLBACKS 0x040 // ddMotionCompCallbacks
+#define EDDDGBL_MISC2CALLBACKS 0x080 // ddMiscellanous2Callbacks
+#define EDDDGBL_DDMORECAPS 0x100 // ddMorecaps
+#define EDDDGBL_D3DCALLBACKS3 0x200 // d3dNtHalCallbacks3
+#define EDDDGBL_NTCALLBACKS 0x400 // ddNtCallbacks
+#define EDDDGBL_PRIVATEDRIVERCAPS 0x800 // ddNtPrivateDriverCaps
+
typedef struct _EDD_DIRECTDRAW_GLOBAL
{
/* 0x038 */ DWORD dwNumFourCC; // 0x038 <-- verified to match Windows XP, dwNumFourCC
/* 0x03C */ PDWORD pdwFourCC; // 0x03C <-- verified to match Windows XP, pdwFourCC
/* 0x040 */ DD_HALINFO ddHalInfo; // 0x040 <-- verified to match Windows XP, ddHalInfo
-/* 0x1E0 */ ULONG unk_1e0[46];
+/* 0x1E0 */ ULONG unk_1e0[17]; // DxApi interface (size 0x44)
+/* 0x224 */ ULONG unk_224; //
+/* 0x228 */ ULONG unk_228[14]; // AGP interface (size 0x38)
+/* 0x260 */ DDKERNELCAPS ddKernelCaps; // 0x260 <-- verified to match Windows Server 2003
+/* 0x26C */ DD_MORECAPS ddMoreCaps; // 0x26C <-- verified to match Windows Server 2003
+/* 0x290 */ DD_NTPRIVATEDRIVERCAPS ddNtPrivateDriverCaps; // 0x290 <-- verified to match Windows Server 2003
/* 0x298 */ DD_CALLBACKS ddCallbacks; // 0x298 <-- verified to match Windows XP, ddCallbacks
/* 0x2C4 */ DD_SURFACECALLBACKS ddSurfaceCallbacks; // 0x2C4 <-- verified to match Windows XP, ddSurfaceCallbacks
/* 0x304 */ DD_PALETTECALLBACKS ddPaletteCallbacks; // 0x304 <-- verified to match Windows XP, ddPaletteCallbacks
-/* 0x314 */ ULONG unk_314[46];
+/* 0x314 */ D3DNTHAL_GLOBALDRIVERDATA d3dNtGlobalDriverData;
/* 0x3D4 */ D3DNTHAL_CALLBACKS d3dNtHalCallbacks;
-/* 0x460 */ ULONG unk_460[9];
+/* 0x460 */ DD_D3DBUFCALLBACKS d3dBufCallbacks;
/* 0x47C */ D3DNTHAL_CALLBACKS2 d3dNtHalCallbacks2;
/* 0x498 */ DD_VIDEOPORTCALLBACKS ddVideoPortCallback; // 0x498 <-- verified to match Windows XP, ddVideoPortCallback
/* 0x4E0 */ DD_MISCELLANEOUSCALLBACKS ddMiscellanousCallbacks; // 0x4E0 <-- verified to match Windows XP, ddMiscellanousCallbacks
/* 0x4EC */ DD_MISCELLANEOUS2CALLBACKS ddMiscellanous2Callbacks; // 0x4EC <-- verified to match Windows XP, ddMiscellanous2Callbacks
-/* 0x504 */ ULONG unk_504[10];
-/* 0x534 */ D3DNTHAL_CALLBACKS3 d3dNtHalCallbacks3;
-/* 0x5A4 */ ULONG unk_544;
-/* 0x5A8 */ ULONG unk_548;
-/* 0x54C */ ULONG unk_54c[23];
+/* 0x504 */ DD_NTCALLBACKS ddNtCallbacks; // 0x504 <-- verified to match Windows Server 2003
+/* 0x518 */ DD_COLORCONTROLCALLBACKS ddColorControlCallbacks; // 0x518 <-- verified to match Windows Server 2003
+/* 0x524 */ DD_KERNELCALLBACKS ddKernelCallbacks; // 0x524 <-- verified to match Windows Server 2003
+/* 0x534 */ D3DNTHAL_CALLBACKS3 d3dNtHalCallbacks3; // 0x524 <-- verified to match Windows Server 2003
+/* 0x54C */ DD_MOTIONCOMPCALLBACKS ddMotionCompCallbacks; // 0x54C <-- verified to match Windows Server 2003
+/* 0x57C */ DDMORESURFACECAPS ddMoreSurfaceCaps; // 0x57C <-- verified to match Windows Server 2003
/* 0x5A8 */ EDD_DIRECTDRAW_LOCAL* peDirectDrawLocalList; // 0x5A8 <-- verified to match Windows XP, it is a current local struct, not a list, peDirectDrawLocalList Current
-/* 0x5ac */ EDD_SURFACE* peSurface_LockList;
+/* 0x5AC */ EDD_SURFACE* peSurface_LockList;
/* 0x5B0 */ FLONG fl;
/* 0x5B4 */ ULONG cSurfaceLocks;
/* 0x5B8 */ PKEVENT pAssertModeEvent;
-/* 0x5Bc */ EDD_SURFACE *peSurfaceCurrent;
+/* 0x5BC */ EDD_SURFACE *peSurfaceCurrent;
/* 0x5C0 */ EDD_SURFACE *peSurfacePrimary;
/* 0x5C4 */ BOOL bSuspended; // 0x5C4 <-- verified to match Windows XP, tells dxg to use driver's own api or return error code instead
/* 0x5C8 */ ULONG unk_5c8[12];
/* 0x5F8 */ RECTL rcbounds;
/* 0x608 */ ULONG unk_608;
-/* 0x60c */ HDEV hDev; // 0x60c <-- verified to match Windows XP, The real Pdev, hDev
+/* 0x60C */ HDEV hDev; // 0x60c <-- verified to match Windows XP, The real Pdev, hDev
/* Windows XP and higher */
/* 0x610 */ ULONG unk_610[63];