2 * GDI object common header definition
8 #define GDI_OBJECT_STACK_LEVELS 20
10 /* The first 10 entries are never used in windows, they are empty */
11 static const unsigned RESERVE_ENTRIES_COUNT
= 10;
13 typedef struct _GDI_HANDLE_TABLE
15 /* The table must be located at the beginning of this structure so it can be
18 //////////////////////////////////////////////////////////////////////////////
19 GDI_TABLE_ENTRY Entries
[GDI_HANDLE_COUNT
];
20 DEVCAPS DevCaps
; // Device Capabilities.
21 FLONG flDeviceUniq
; // Device settings uniqueness.
22 PVOID pvLangPack
; // Language Pack.
23 CFONT cfPublic
[GDI_CFONT_MAX
]; // Public Fonts.
27 } GDI_HANDLE_TABLE
, *PGDI_HANDLE_TABLE
;
29 extern PGDI_HANDLE_TABLE GdiHandleTable
;
31 typedef PVOID PGDIOBJ
;
33 typedef VOID (NTAPI
*GDICLEANUPPROC
)(PVOID ObjectBody
);
34 typedef VOID (NTAPI
*GDIOBJDELETEPROC
)(PVOID ObjectBody
);
36 /* Every GDI Object must have this standard type of header.
37 * It's for thread locking. */
38 typedef struct _BASEOBJECT
42 ULONG ulShareCount
; /* For objects without a handle */
43 DWORD dwThreadId
; /* Exclusive lock owner */
45 USHORT cExclusiveLock
;
47 EX_PUSH_LOCK pushlock
;
48 #if DBG_ENABLE_GDIOBJ_BACKTRACES
49 PVOID apvBackTrace
[GDI_OBJECT_STACK_LEVELS
];
51 #if DBG_ENABLE_EVENT_LOGGING
58 BASEFLAG_LOOKASIDE
= 0x80,
60 /* ReactOS specific: */
61 BASEFLAG_READY_TO_DIE
= 0x1000
64 typedef struct _CLIENTOBJ
66 BASEOBJECT BaseObject
;
67 } CLIENTOBJ
, *PCLIENTOBJ
;
71 GDIOBJFLAG_DEFAULT
= 0x00,
72 GDIOBJFLAG_IGNOREPID
= 0x01,
73 GDIOBJFLAG_IGNORELOCK
= 0x02
79 InitGdiHandleTable(VOID
);
118 GDIOBJ_AllocateObject(
125 GDIOBJ_vDeleteObject(
130 GDIOBJ_ReferenceObjectByHandle(
136 GDIOBJ_vReferenceObjectByPointer(
141 GDIOBJ_vDereferenceObject(
152 GDIOBJ_TryLockObject(
158 GDIOBJ_vUnlockObject(
163 GDIOBJ_vSetObjectOwner(
169 GDIOBJ_bLockMultipleObjects(
177 GDIOBJ_hInsertObject(
188 GDIOBJ_vSetObjectAttr(
194 GDIOBJ_pvGetObjectAttr(
197 BOOL NTAPI
GDIOBJ_ConvertToStockObj(HGDIOBJ
*hObj
);
198 POBJ NTAPI
GDIOBJ_AllocObjWithHandle(ULONG ObjectType
, ULONG cjSize
);
199 PGDIOBJ NTAPI
GDIOBJ_ShareLockObj(HGDIOBJ hObj
, DWORD ObjectType
);
200 PVOID NTAPI
GDI_MapHandleTable(PEPROCESS Process
);