fixing smaller bug in NtGdiDdCanCreateSurface

svn path=/trunk/; revision=26063
This commit is contained in:
Magnus Olsen 2007-03-11 15:18:12 +00:00
parent b860835afa
commit 537190e037

View file

@ -131,28 +131,44 @@ DWORD STDCALL NtGdiDdCanCreateSurface(
PDD_CANCREATESURFACEDATA puCanCreateSurfaceData PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
) )
{ {
DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED; DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED;
PDD_DIRECTDRAW_GLOBAL lgpl; DD_CANCREATESURFACEDATA CanCreateSurfaceData;
DDSURFACEDESC desc;
NTSTATUS Status = FALSE;
PDD_DIRECTDRAW pDirectDraw = NULL;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(DdHandleTable, hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW); DPRINT1("NtGdiDdCanCreateSurface\n");
DPRINT1("NtGdiDdCanCreateSurface\n"); _SEH_TRY
{
ProbeForRead(puCanCreateSurfaceData, sizeof(DD_CANCREATESURFACEDATA), 1);
RtlCopyMemory(&CanCreateSurfaceData,puCanCreateSurfaceData, sizeof(DD_CANCREATESURFACEDATA));
if (pDirectDraw != NULL) /* FIXME can be version 2 of DDSURFACEDESC */
{ ProbeForRead(&CanCreateSurfaceData.lpDDSurfaceDesc, sizeof(DDSURFACEDESC), 1);
RtlCopyMemory(&desc,&CanCreateSurfaceData.lpDDSurfaceDesc, sizeof(DD_CANCREATESURFACEDATA));
}
_SEH_HANDLE
{
Status = _SEH_GetExceptionCode();
}
_SEH_END;
if (pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE) if(NT_SUCCESS(Status))
{ {
lgpl = puCanCreateSurfaceData->lpDD; pDirectDraw = GDIOBJ_LockObj(DdHandleTable, hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
puCanCreateSurfaceData->lpDD = &pDirectDraw->Global; if (pDirectDraw != NULL)
{
ddRVal = pDirectDraw->DD.CanCreateSurface(puCanCreateSurfaceData); if (pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE)
{
puCanCreateSurfaceData->lpDD = lgpl; CanCreateSurfaceData.ddRVal = DDERR_GENERIC;
} CanCreateSurfaceData.lpDD = &pDirectDraw->Global;
CanCreateSurfaceData.lpDDSurfaceDesc = &desc;
GDIOBJ_UnlockObjByPtr(DdHandleTable, pDirectDraw); ddRVal = pDirectDraw->DD.CanCreateSurface(&CanCreateSurfaceData);
} }
}
GDIOBJ_UnlockObjByPtr(DdHandleTable, pDirectDraw);
}
return ddRVal; return ddRVal;
} }