- Fix user-mode region attribute handling in IntGdiSetRegionOwner.

svn path=/trunk/; revision=64178
This commit is contained in:
Jérôme Gardou 2014-09-17 11:40:21 +00:00
parent 215e0d90a1
commit 00b90311f3

View file

@ -2323,23 +2323,22 @@ IntGdiSetRegionOwner(HRGN hRgn, DWORD OwnerMask)
PRGN_ATTR prgnattr; PRGN_ATTR prgnattr;
PPROCESSINFO ppi; PPROCESSINFO ppi;
prgn = REGION_LockRgn(hRgn); prgn = RGNOBJAPI_Lock(hRgn, &prgnattr);
if (!prgn) if (!prgn)
{ {
return FALSE; return FALSE;
} }
prgnattr = GDIOBJ_pvGetObjectAttr(&prgn->BaseObject); if (prgnattr != &prgn->rgnattr)
if (prgnattr)
{ {
GDIOBJ_vSetObjectAttr(&prgn->BaseObject, NULL); GDIOBJ_vSetObjectAttr(&prgn->BaseObject, NULL);
prgn->prgnattr = NULL; prgn->prgnattr = &prgn->rgnattr;
ppi = PsGetCurrentProcessWin32Process(); ppi = PsGetCurrentProcessWin32Process();
GdiPoolFree(ppi->pPoolRgnAttr, prgnattr); GdiPoolFree(ppi->pPoolRgnAttr, prgnattr);
} }
RGNOBJAPI_Unlock(prgn); RGNOBJAPI_Unlock(prgn);
return GreSetObjectOwner(hRgn, OwnerMask); return GreSetObjectOwner(hRgn, OwnerMask);
} }
INT INT