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

@ -132,25 +132,41 @@ DWORD STDCALL NtGdiDdCanCreateSurface(
) )
{ {
DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED; DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED;
PDD_DIRECTDRAW_GLOBAL lgpl; DD_CANCREATESURFACEDATA CanCreateSurfaceData;
DDSURFACEDESC desc;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(DdHandleTable, hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW); NTSTATUS Status = FALSE;
PDD_DIRECTDRAW pDirectDraw = NULL;
DPRINT1("NtGdiDdCanCreateSurface\n"); DPRINT1("NtGdiDdCanCreateSurface\n");
_SEH_TRY
{
ProbeForRead(puCanCreateSurfaceData, sizeof(DD_CANCREATESURFACEDATA), 1);
RtlCopyMemory(&CanCreateSurfaceData,puCanCreateSurfaceData, sizeof(DD_CANCREATESURFACEDATA));
/* 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(NT_SUCCESS(Status))
{
pDirectDraw = GDIOBJ_LockObj(DdHandleTable, hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
if (pDirectDraw != NULL) if (pDirectDraw != NULL)
{ {
if (pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE) if (pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE)
{ {
lgpl = puCanCreateSurfaceData->lpDD; CanCreateSurfaceData.ddRVal = DDERR_GENERIC;
puCanCreateSurfaceData->lpDD = &pDirectDraw->Global; CanCreateSurfaceData.lpDD = &pDirectDraw->Global;
CanCreateSurfaceData.lpDDSurfaceDesc = &desc;
ddRVal = pDirectDraw->DD.CanCreateSurface(puCanCreateSurfaceData); ddRVal = pDirectDraw->DD.CanCreateSurface(&CanCreateSurfaceData);
}
puCanCreateSurfaceData->lpDD = lgpl;
} }
GDIOBJ_UnlockObjByPtr(DdHandleTable, pDirectDraw); GDIOBJ_UnlockObjByPtr(DdHandleTable, pDirectDraw);
} }