- Move IntGdiSetBrushOwner to brush.c
- Move IntGdiSetDCOwnerEx to dclife.c
- Move IntGdiSetRegionOwner to region.c

svn path=/trunk/; revision=51191
This commit is contained in:
Timo Kreuzer 2011-03-29 10:25:10 +00:00
parent e78589d99a
commit d7e597d60e
4 changed files with 120 additions and 121 deletions

View file

@ -573,4 +573,53 @@ NtGdiSetBrushOrg(HDC hDC, INT XOrg, INT YOrg, LPPOINT Point)
return TRUE;
}
BOOL
FASTCALL
IntGdiSetBrushOwner(PBRUSH pbr, DWORD OwnerMask)
{
HBRUSH hBR;
PEPROCESS Owner = NULL;
PGDI_TABLE_ENTRY pEntry = NULL;
if (!pbr) return FALSE;
hBR = pbr->BaseObject.hHmgr;
if (!hBR || (GDI_HANDLE_GET_TYPE(hBR) != GDI_OBJECT_TYPE_BRUSH))
return FALSE;
else
{
INT Index = GDI_HANDLE_GET_INDEX((HGDIOBJ)hBR);
pEntry = &GdiHandleTable->Entries[Index];
}
if (pbr->flAttrs & GDIBRUSH_IS_GLOBAL)
{
GDIOBJ_ShareUnlockObjByPtr((POBJ)pbr);
return TRUE;
}
if ((OwnerMask == GDI_OBJ_HMGR_PUBLIC) || OwnerMask == GDI_OBJ_HMGR_NONE)
{
// Set this Brush to inaccessible mode and to an Owner of NONE.
// if (OwnerMask == GDI_OBJ_HMGR_NONE) Owner = OwnerMask;
if (!GDIOBJ_SetOwnership((HGDIOBJ) hBR, Owner))
return FALSE;
// Deny user access to User Data.
pEntry->UserData = NULL; // This hBR is inaccessible!
}
if (OwnerMask == GDI_OBJ_HMGR_POWNED)
{
if (!GDIOBJ_SetOwnership((HGDIOBJ) hBR, PsGetCurrentProcess() ))
return FALSE;
// Allow user access to User Data.
pEntry->UserData = pbr->pBrushAttr;
}
return TRUE;
}
/* EOF */

View file

@ -836,7 +836,7 @@ IntGdiDeleteDC(HDC hDC, BOOL Force)
{
DPRINT1("Attempted to Delete 0x%x currently being destroyed!!!\n", hDC);
}
return TRUE;
}
@ -973,3 +973,45 @@ IntGdiCreateDisplayDC(HDEV hDev, ULONG DcType, BOOL EmptyDC)
return hDC;
}
BOOL
FASTCALL
IntGdiSetDCOwnerEx( HDC hDC, DWORD OwnerMask, BOOL NoSetBrush)
{
PDC pDC;
BOOL Ret = FALSE;
if (!hDC || (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC)) return FALSE;
if ((OwnerMask == GDI_OBJ_HMGR_PUBLIC) || OwnerMask == GDI_OBJ_HMGR_NONE)
{
pDC = DC_LockDc ( hDC );
MmCopyFromCaller(&pDC->dcattr, pDC->pdcattr, sizeof(DC_ATTR));
DC_vFreeDcAttr(pDC);
DC_UnlockDc( pDC );
if (!DC_SetOwnership( hDC, NULL )) // This hDC is inaccessible!
return Ret;
}
if (OwnerMask == GDI_OBJ_HMGR_POWNED)
{
pDC = DC_LockDc ( hDC );
ASSERT(pDC->pdcattr == &pDC->dcattr);
DC_UnlockDc( pDC );
if (!DC_SetOwnership( hDC, PsGetCurrentProcess() )) return Ret;
DC_AllocateDcAttr( hDC ); // Allocate new dcattr
DCU_SynchDcAttrtoUser( hDC ); // Copy data from dc to dcattr
}
if ((OwnerMask != GDI_OBJ_HMGR_NONE) && !NoSetBrush)
{
pDC = DC_LockDc ( hDC );
if (IntGdiSetBrushOwner((PBRUSH)pDC->dclevel.pbrFill, OwnerMask))
IntGdiSetBrushOwner((PBRUSH)pDC->dclevel.pbrLine, OwnerMask);
DC_UnlockDc( pDC );
}
return TRUE;
}

View file

@ -1726,126 +1726,6 @@ GDIOBJ_LockMultipleObjs(ULONG ulCount,
/** PUBLIC FUNCTIONS **********************************************************/
BOOL
FASTCALL
IntGdiSetRegionOwner(HRGN hRgn, DWORD OwnerMask)
{
INT Index;
PGDI_TABLE_ENTRY Entry;
/*
System Regions:
These regions do not use attribute sections and when allocated, use gdiobj
level functions.
*/
// FIXME! HAX!!! Remove this once we get everything right!
Index = GDI_HANDLE_GET_INDEX(hRgn);
Entry = &GdiHandleTable->Entries[Index];
if (Entry->UserData) FreeObjectAttr(Entry->UserData);
Entry->UserData = NULL;
//
if ((OwnerMask == GDI_OBJ_HMGR_PUBLIC) || OwnerMask == GDI_OBJ_HMGR_NONE)
{
return GDIOBJ_SetOwnership(hRgn, NULL);
}
if (OwnerMask == GDI_OBJ_HMGR_POWNED)
{
return GDIOBJ_SetOwnership((HGDIOBJ) hRgn, PsGetCurrentProcess() );
}
return FALSE;
}
BOOL
FASTCALL
IntGdiSetBrushOwner(PBRUSH pbr, DWORD OwnerMask)
{
HBRUSH hBR;
PEPROCESS Owner = NULL;
PGDI_TABLE_ENTRY pEntry = NULL;
if (!pbr) return FALSE;
hBR = pbr->BaseObject.hHmgr;
if (!hBR || (GDI_HANDLE_GET_TYPE(hBR) != GDI_OBJECT_TYPE_BRUSH))
return FALSE;
else
{
INT Index = GDI_HANDLE_GET_INDEX((HGDIOBJ)hBR);
pEntry = &GdiHandleTable->Entries[Index];
}
if (pbr->flAttrs & GDIBRUSH_IS_GLOBAL)
{
GDIOBJ_ShareUnlockObjByPtr((POBJ)pbr);
return TRUE;
}
if ((OwnerMask == GDI_OBJ_HMGR_PUBLIC) || OwnerMask == GDI_OBJ_HMGR_NONE)
{
// Set this Brush to inaccessible mode and to an Owner of NONE.
// if (OwnerMask == GDI_OBJ_HMGR_NONE) Owner = OwnerMask;
if (!GDIOBJ_SetOwnership((HGDIOBJ) hBR, Owner))
return FALSE;
// Deny user access to User Data.
pEntry->UserData = NULL; // This hBR is inaccessible!
}
if (OwnerMask == GDI_OBJ_HMGR_POWNED)
{
if (!GDIOBJ_SetOwnership((HGDIOBJ) hBR, PsGetCurrentProcess() ))
return FALSE;
// Allow user access to User Data.
pEntry->UserData = pbr->pBrushAttr;
}
return TRUE;
}
BOOL
FASTCALL
IntGdiSetDCOwnerEx( HDC hDC, DWORD OwnerMask, BOOL NoSetBrush)
{
PDC pDC;
BOOL Ret = FALSE;
if (!hDC || (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC)) return FALSE;
if ((OwnerMask == GDI_OBJ_HMGR_PUBLIC) || OwnerMask == GDI_OBJ_HMGR_NONE)
{
pDC = DC_LockDc ( hDC );
MmCopyFromCaller(&pDC->dcattr, pDC->pdcattr, sizeof(DC_ATTR));
DC_vFreeDcAttr(pDC);
DC_UnlockDc( pDC );
if (!DC_SetOwnership( hDC, NULL )) // This hDC is inaccessible!
return Ret;
}
if (OwnerMask == GDI_OBJ_HMGR_POWNED)
{
pDC = DC_LockDc ( hDC );
ASSERT(pDC->pdcattr == &pDC->dcattr);
DC_UnlockDc( pDC );
if (!DC_SetOwnership( hDC, PsGetCurrentProcess() )) return Ret;
DC_AllocateDcAttr( hDC ); // Allocate new dcattr
DCU_SynchDcAttrtoUser( hDC ); // Copy data from dc to dcattr
}
if ((OwnerMask != GDI_OBJ_HMGR_NONE) && !NoSetBrush)
{
pDC = DC_LockDc ( hDC );
if (IntGdiSetBrushOwner((PBRUSH)pDC->dclevel.pbrFill, OwnerMask))
IntGdiSetBrushOwner((PBRUSH)pDC->dclevel.pbrLine, OwnerMask);
DC_UnlockDc( pDC );
}
return TRUE;
}
INT
FASTCALL
GreGetObjectOwner(HGDIOBJ Handle, GDIOBJTYPE ObjType)

View file

@ -3942,4 +3942,32 @@ NtGdiGetRegionData(
return size + sizeof(RGNDATAHEADER);
}
BOOL
FASTCALL
IntGdiSetRegionOwner(HRGN hRgn, DWORD OwnerMask)
{
INT Index;
PGDI_TABLE_ENTRY Entry;
/*
System Regions:
These regions do not use attribute sections and when allocated, use gdiobj
level functions.
*/
// FIXME! HAX!!! Remove this once we get everything right!
Index = GDI_HANDLE_GET_INDEX(hRgn);
Entry = &GdiHandleTable->Entries[Index];
if (Entry->UserData) FreeObjectAttr(Entry->UserData);
Entry->UserData = NULL;
//
if ((OwnerMask == GDI_OBJ_HMGR_PUBLIC) || OwnerMask == GDI_OBJ_HMGR_NONE)
{
return GDIOBJ_SetOwnership(hRgn, NULL);
}
if (OwnerMask == GDI_OBJ_HMGR_POWNED)
{
return GDIOBJ_SetOwnership((HGDIOBJ) hRgn, PsGetCurrentProcess() );
}
return FALSE;
}
/* EOF */