2010-02-26 11:43:19 +00:00
|
|
|
#pragma once
|
2006-11-08 11:47:44 +00:00
|
|
|
|
|
|
|
/* Internal interface */
|
|
|
|
|
2015-02-11 21:33:24 +00:00
|
|
|
typedef BRUSH PEN, *PPEN;
|
2008-05-13 05:13:25 +00:00
|
|
|
|
2015-02-11 21:33:24 +00:00
|
|
|
PPEN
|
|
|
|
NTAPI
|
|
|
|
PEN_AllocPenWithHandle(
|
|
|
|
VOID);
|
2008-05-13 05:13:25 +00:00
|
|
|
|
2015-02-11 21:33:24 +00:00
|
|
|
PPEN
|
|
|
|
NTAPI
|
|
|
|
PEN_AllocExtPenWithHandle(
|
|
|
|
VOID);
|
2008-05-13 05:13:25 +00:00
|
|
|
|
[WIN32K]
Rewrite of the GDI handle manager
- The old handle manager used a completely retarded spinlock in combination with KeDelayExecutionThread() for both exclusive
and shared locks. This is probably the most uneffective algorithm possible. It was also duplicating code everywhere and it was a overall mess It
is now replaced with a lock-free reference counter for shared locks and a pushlock for exclusive locks. -> Better performance and scalability.
- Allocate user mode object attributes from the new gdi pool. This way, we don't need any caching, since the pool serves as a cache. Its also
much faster and uses much less memory.
- Allow object allocations of different size, instead of fixed size from a table. This way a single allocation can take care of actual needs.
- Allow allcoating objects without a handle and insert them into the handle table later
- Properly synchronize the process GDIHandleCount. Now gdiview and taskmanager show the correct number of gdi handles.
- Implement a new event tracking system, that is capable of tracking all reverences and locks of objects and pool allocations to help track
possible leaks
- Make sure that all objects of a process are deleted in cleanup
- Make sure all usermode memory allocations are freed, when cleaning up the process pool.
- Make sure that each object type is using the correct type of lock (either shared or exclusive, not a mixture)
- Fix some object / reference leaks
- Lots of inferface improvements
- Use global variables for certain things instead of members in the mapped gdi handle table
- Make IntSysCreateRectpRgn create a region without a handle
- Fix detection od source and mask use in GreStretchBltMask
- Use GDIOBJ_bLockMultipleObjects in NtGdiCombineRegion to avoid possible deadlocks
- Fix NtGdiAbortPath to reset DCPATH_ACTIVE flag in the dc and only bail out on error, instead of always
- Replace DC_AllocateDcAttr and DC_AllocDcAttr with DC_bAllocDcAttr using the new user mode pool
- Remove DCU_SyncDcAttrtoUser and DCU_SynchDcAttrtoUser. Those functions were unused and didn't do anything useful anyway,
- Replace IntGdiSetDCOwnerEx and DC_SetOwnership with GreSetDCOwner, remove unused NoSetBrush parameter
- Replace GDIOBJ_bValidateHandle and IsObjectDead with GreIsHandleValid
- Chage GDIOBJ_bLockMultipleObjects: pass object type, return a BOOL, whether all objects could be locked, cleanup on failure
svn path=/trunk/; revision=51470
2011-04-28 08:26:46 +00:00
|
|
|
#define PEN_UnlockPen(pPenObj) GDIOBJ_vUnlockObject((POBJ)pPenObj)
|
2015-02-11 21:33:24 +00:00
|
|
|
#define PEN_ShareUnlockPen(ppen) GDIOBJ_vDereferenceObject((POBJ)ppen)
|
|
|
|
|
|
|
|
PPEN
|
|
|
|
FASTCALL
|
|
|
|
PEN_ShareLockPen(HPEN hpen);
|
|
|
|
|
|
|
|
INT
|
|
|
|
NTAPI
|
|
|
|
PEN_GetObject(
|
|
|
|
_In_ PPEN pPen,
|
|
|
|
_In_ INT Count,
|
|
|
|
_Out_ PLOGPEN Buffer);
|
2016-12-22 17:34:58 +00:00
|
|
|
|
|
|
|
VOID FASTCALL AddPenLinesBounds(PDC,int,POINT *);
|