Bug fix DD_Cleanup thx w3seek, Implement second check for
DrvGetDrawInfo,
Modified: trunk/reactos/subsys/win32k/ntddraw/ddraw.c
_____
Modified: trunk/reactos/subsys/win32k/ntddraw/ddraw.c
--- trunk/reactos/subsys/win32k/ntddraw/ddraw.c 2005-12-10 00:15:17 UTC
(rev 20032)
+++ trunk/reactos/subsys/win32k/ntddraw/ddraw.c 2005-12-10 00:28:41 UTC
(rev 20033)
@@ -20,15 +20,16 @@
BOOL INTERNAL_CALL
DD_Cleanup(PVOID ObjectBody)
{
- PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(ObjectBody,
GDI_OBJECT_TYPE_DIRECTDRAW);
+ if (ObjectBody == NULL)
+ return FALSE;
+
+ PDD_DIRECTDRAW pDirectDraw = (PDD_DIRECTDRAW) ObjectBody;
DPRINT1("DD_Cleanup\n");
if (!pDirectDraw)
return FALSE;
pDirectDraw->DrvDisableDirectDraw(pDirectDraw->Global.dhpdev);
-
- GDIOBJ_UnlockObjByPtr(pDirectDraw);
return TRUE;
}
@@ -203,7 +204,7 @@
PDD_GETDRIVERINFODATA puGetDriverInfoData)
{
- DWORD ddRVal;
+ DWORD ddRVal = 0;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal,
GDI_OBJECT_TYPE_DIRECTDRAW);
DPRINT1("NtGdiDdGetDriverInfo\n");
@@ -214,9 +215,19 @@
return DDHAL_DRIVER_NOTHANDLED;
}
- if (!(pDirectDraw->Hal.dwFlags & DDHALINFO_GETDRIVERINFOSET))
+
+ /* it exsist two version of NtGdiDdGetDriverInfo we need check for
both flags */
+ if (!(pDirectDraw->Hal.dwFlags & DDHALINFO_GETDRIVERINFOSET))
+ ddRVal++;
+
+ if (!(pDirectDraw->Hal.dwFlags & DDHALINFO_GETDRIVERINFO2))
+ ddRVal++;
+
+
+ /* Now we are doing the call to drv DrvGetDriverInfo */
+ if (ddRVal == 2)
{
- DPRINT1("NtGdiDdGetDriverInfo DDHAL_DRIVER_NOTHANDLED\n");
+ DPRINT1("NtGdiDdGetDriverInfo DDHAL_DRIVER_NOTHANDLED");
ddRVal = DDHAL_DRIVER_NOTHANDLED;
}
else
@@ -249,8 +260,11 @@
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal,
GDI_OBJECT_TYPE_DIRECTDRAW);
if (pDirectDraw == NULL)
+ {
+ DPRINT1("Can not lock the DirectDraw handle\n");
return DDHAL_DRIVER_NOTHANDLED;
-
+ }
+
/* backup the orignal PDev and info */
lgpl = puCreateSurfaceData->lpDD;
@@ -259,7 +273,10 @@
/* make the call */
if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE))
+ {
+ DPRINT1("DirectDraw HAL does not support Create Surface");
ddRVal = DDHAL_DRIVER_NOTHANDLED;
+ }
else
{
ddRVal = pDirectDraw->DD.CreateSurface(puCreateSurfaceData);
@@ -802,7 +819,7 @@
/* FIXME add right GDI_OBJECT_TYPE_ for everthing for now
we are using same type */
/* return GDIOBJ_FreeObj(hSurface, GDI_OBJECT_TYPE_DD_SURFACE);
*/
- return GDIOBJ_FreeObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+ return GDIOBJ_FreeObj(hSurface, GDI_OBJECT_TYPE_DD_SURFACE);
}