prepare the rest of directdraw syscall using cache info, that will make our ddraw.dll work evently in reactos. left todo implemet the rest stub. Modified: trunk/reactos/subsys/win32k/ntddraw/ddraw.c _____
Modified: trunk/reactos/subsys/win32k/ntddraw/ddraw.c --- trunk/reactos/subsys/win32k/ntddraw/ddraw.c 2005-10-24 18:03:57 UTC (rev 18756) +++ trunk/reactos/subsys/win32k/ntddraw/ddraw.c 2005-10-24 18:47:33 UTC (rev 18757) @@ -442,16 +442,27 @@
) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW); if (pDirectDraw == NULL) return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */ + lgpl = puUnlockData->lpDD; + + /* use our cache version instead */ + puUnlockData->lpDD = &pDirectDraw->Global; + + /* make the call */ if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_UNLOCK)) ddRVal = DDHAL_DRIVER_NOTHANDLED; else ddRVal = pDirectDraw->Surf.Unlock(puUnlockData);
+ /* But back the orignal PDev */ + puUnlockData->lpDD = lgpl; + GDIOBJ_UnlockObjByPtr(pDirectDraw); return ddRVal; } @@ -463,16 +474,27 @@ ) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDest, GDI_OBJECT_TYPE_DIRECTDRAW); if (pDirectDraw == NULL) return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */ + lgpl = puBltData->lpDD; + + /* use our cache version instead */ + puBltData->lpDD = &pDirectDraw->Global; + + /* make the call */ if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_BLT)) ddRVal = DDHAL_DRIVER_NOTHANDLED; else ddRVal = pDirectDraw->Surf.Blt(puBltData);
+ /* But back the orignal PDev */ + puBltData->lpDD = lgpl; + GDIOBJ_UnlockObjByPtr(pDirectDraw); return ddRVal; } @@ -483,16 +505,27 @@ ) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW); if (pDirectDraw == NULL) return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */ + lgpl = puSetColorKeyData->lpDD; + + /* use our cache version instead */ + puSetColorKeyData->lpDD = &pDirectDraw->Global; + + /* make the call */ if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_SETCOLORKEY)) ddRVal = DDHAL_DRIVER_NOTHANDLED; else ddRVal = pDirectDraw->Surf.SetColorKey(puSetColorKeyData);
+ /* But back the orignal PDev */ + puSetColorKeyData->lpDD = lgpl; + GDIOBJ_UnlockObjByPtr(pDirectDraw); return ddRVal; } @@ -505,16 +538,27 @@ ) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceAttached, GDI_OBJECT_TYPE_DIRECTDRAW); if (pDirectDraw == NULL) return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */ + lgpl = puAddAttachedSurfaceData->lpDD; + + /* use our cache version instead */ + puAddAttachedSurfaceData->lpDD = &pDirectDraw->Global; + + /* make the call */ if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_ADDATTACHEDSURFACE)) ddRVal = DDHAL_DRIVER_NOTHANDLED; else ddRVal = pDirectDraw->Surf.AddAttachedSurface(puAddAttachedSurfaceData);
+ /* But back the orignal PDev */ + puAddAttachedSurfaceData->lpDD = lgpl; + GDIOBJ_UnlockObjByPtr(pDirectDraw); return ddRVal; } @@ -525,16 +569,27 @@ ) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW); if (pDirectDraw == NULL) return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */ + lgpl = puGetBltStatusData->lpDD; + + /* use our cache version instead */ + puGetBltStatusData->lpDD = &pDirectDraw->Global; + + /* make the call */ if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_GETBLTSTATUS)) ddRVal = DDHAL_DRIVER_NOTHANDLED; else ddRVal = pDirectDraw->Surf.GetBltStatus(puGetBltStatusData);
+ /* But back the orignal PDev */ + puGetBltStatusData->lpDD = lgpl; + GDIOBJ_UnlockObjByPtr(pDirectDraw); return ddRVal; } @@ -545,16 +600,27 @@ ) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW); if (pDirectDraw == NULL) return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */ + lgpl = puGetFlipStatusData->lpDD; + + /* use our cache version instead */ + puGetFlipStatusData->lpDD = &pDirectDraw->Global; + + /* make the call */ if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_GETFLIPSTATUS)) ddRVal = DDHAL_DRIVER_NOTHANDLED; else ddRVal = pDirectDraw->Surf.GetFlipStatus(puGetFlipStatusData);
+ /* But back the orignal PDev */ + puGetFlipStatusData->lpDD = lgpl; + GDIOBJ_UnlockObjByPtr(pDirectDraw); return ddRVal; } @@ -566,16 +632,27 @@ ) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDestination, GDI_OBJECT_TYPE_DIRECTDRAW); if (pDirectDraw == NULL) return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */ + lgpl = puUpdateOverlayData->lpDD; + + /* use our cache version instead */ + puUpdateOverlayData->lpDD = &pDirectDraw->Global; + + /* make the call */ if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY)) ddRVal = DDHAL_DRIVER_NOTHANDLED; else ddRVal = pDirectDraw->Surf.UpdateOverlay(puUpdateOverlayData);
+ /* But back the orignal PDev */ + puUpdateOverlayData->lpDD = lgpl; + GDIOBJ_UnlockObjByPtr(pDirectDraw); return ddRVal; } @@ -587,16 +664,27 @@ ) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDestination, GDI_OBJECT_TYPE_DIRECTDRAW); if (pDirectDraw == NULL) return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */ + lgpl = puSetOverlayPositionData->lpDD; + + /* use our cache version instead */ + puSetOverlayPositionData->lpDD = &pDirectDraw->Global; + + /* make the call */ if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_SETOVERLAYPOSITION)) ddRVal = DDHAL_DRIVER_NOTHANDLED; else ddRVal = pDirectDraw->Surf.SetOverlayPosition(puSetOverlayPositionData);
+ /* But back the orignal PDev */ + puSetOverlayPositionData->lpDD = lgpl; + GDIOBJ_UnlockObjByPtr(pDirectDraw); return ddRVal; } @@ -698,13 +786,25 @@ ) { DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+ /* backup the orignal PDev and info */ + lgpl = puGetAvailDriverMemoryData->lpDD; + + /* use our cache version instead */ + puGetAvailDriverMemoryData->lpDD = &pDirectDraw->Global; + + /* make the call */ // ddRVal = pDirectDraw->DdGetAvailDriverMemory(puGetAvailDriverMemoryData);
GDIOBJ_UnlockObjByPtr(pDirectDraw);
+ + /* But back the orignal PDev */ + puGetAvailDriverMemoryData->lpDD = lgpl; + return ddRVal; }
@@ -717,12 +817,23 @@ ) { DWORD ddRVal; + PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDraw, GDI_OBJECT_TYPE_DIRECTDRAW);
+ /* backup the orignal PDev and info */ + lgpl = puSetExclusiveModeData->lpDD; + + /* use our cache version instead */ + puSetExclusiveModeData->lpDD = &pDirectDraw->Global; + + /* make the call */ ddRVal = pDirectDraw->DdSetExclusiveMode(puSetExclusiveModeData);
GDIOBJ_UnlockObjByPtr(pDirectDraw); + + /* But back the orignal PDev */ + puSetExclusiveModeData->lpDD = lgpl;
return ddRVal; }