- Implement IntGdiSetBrushOwner for bug 5124. 

svn path=/trunk/; revision=45170
This commit is contained in:
James Tabor 2010-01-21 01:39:19 +00:00
parent 2899820ed5
commit d0d7c7c47f
4 changed files with 37 additions and 7 deletions

View file

@ -132,4 +132,6 @@ PVOID FASTCALL AllocateObjectAttr(VOID);
VOID FASTCALL FreeObjectAttr(PVOID);
BOOL FASTCALL IntGdiSetBrushOwner(PBRUSH,DWORD);
#endif

View file

@ -85,6 +85,7 @@ PVOID INTERNAL_CALL GDI_MapHandleTable(PSECTION_OBJECT SectionObject, PEPROCES
BOOL FASTCALL GreDeleteObject(HGDIOBJ hObject);
BOOL FASTCALL IsObjectDead(HGDIOBJ);
BOOL FASTCALL IntGdiSetDCOwnerEx( HDC, DWORD, BOOL);
BOOL FASTCALL IntGdiSetRegeionOwner(HRGN,DWORD);
/*!
* Release GDI object. Every object locked by GDIOBJ_LockObj() must be unlocked.

View file

@ -195,8 +195,7 @@ IntAttachMonitor(IN PDEVOBJ *pGdiDevice,
Monitor->rcMonitor.right,
Monitor->rcMonitor.bottom );
// Replace with IntGdiSetRegeionOwner(Monitor->hrgnMonitor, GDI_OBJ_HMGR_PUBLIC);
GDIOBJ_SetOwnership(Monitor->hrgnMonitor, NULL);
IntGdiSetRegeionOwner(Monitor->hrgnMonitor, GDI_OBJ_HMGR_PUBLIC);
if (gMonitorList == NULL)
{

View file

@ -1560,6 +1560,36 @@ GDI_MapHandleTable(PSECTION_OBJECT SectionObject, PEPROCESS Process)
/** PUBLIC FUNCTIONS **********************************************************/
BOOL
FASTCALL
IntGdiSetRegeionOwner(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!
KeEnterCriticalRegion();
Index = GDI_HANDLE_GET_INDEX(hRgn);
Entry = &GdiHandleTable->Entries[Index];
if (Entry->UserData) FreeObjectAttr(Entry->UserData);
Entry->UserData = NULL;
KeLeaveCriticalRegion();
//
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)
@ -1609,7 +1639,6 @@ IntGdiSetBrushOwner(PBRUSH pbr, DWORD OwnerMask)
return TRUE;
}
BOOL
FASTCALL
IntGdiSetDCOwnerEx( HDC hDC, DWORD OwnerMask, BOOL NoSetBrush)
@ -1673,7 +1702,6 @@ GreGetObjectOwner(HGDIOBJ Handle, GDIOBJTYPE ObjType)
return Ret;
}
W32KAPI
HANDLE
APIENTRY