2 * GDI object common header definition
8 /* The first 10 entries are never used in windows, they are empty */
9 static const unsigned RESERVE_ENTRIES_COUNT
= 10;
11 typedef struct _GDI_HANDLE_TABLE
13 /* The table must be located at the beginning of this structure so it can be
16 //////////////////////////////////////////////////////////////////////////////
17 GDI_TABLE_ENTRY Entries
[GDI_HANDLE_COUNT
];
18 DEVCAPS DevCaps
; // Device Capabilities.
19 FLONG flDeviceUniq
; // Device settings uniqueness.
20 PVOID pvLangPack
; // Language Pack.
21 CFONT cfPublic
[GDI_CFONT_MAX
]; // Public Fonts.
25 } GDI_HANDLE_TABLE
, *PGDI_HANDLE_TABLE
;
27 extern PGDI_HANDLE_TABLE GdiHandleTable
;
29 typedef PVOID PGDIOBJ
;
31 typedef BOOL (NTAPI
*GDICLEANUPPROC
)(PVOID ObjectBody
);
33 /* Every GDI Object must have this standard type of header.
34 * It's for thread locking. */
35 typedef struct _BASEOBJECT
39 ULONG ulShareCount
; /* For objects without a handle */
40 DWORD dwThreadId
; /* Exclusive lock owner */
42 USHORT cExclusiveLock
;
44 EX_PUSH_LOCK pushlock
;
45 #if DBG_ENABLE_EVENT_LOGGING
52 BASEFLAG_LOOKASIDE
= 0x80,
54 /* ReactOS specific: */
55 BASEFLAG_READY_TO_DIE
= 0x1000
58 typedef struct _CLIENTOBJ
60 BASEOBJECT BaseObject
;
61 } CLIENTOBJ
, *PCLIENTOBJ
;
65 GDIOBJFLAG_DEFAULT
= 0x00,
66 GDIOBJFLAG_IGNOREPID
= 0x01,
67 GDIOBJFLAG_IGNORELOCK
= 0x02
73 InitGdiHandleTable(VOID
);
112 GDIOBJ_AllocateObject(
119 GDIOBJ_vDeleteObject(
124 GDIOBJ_ReferenceObjectByHandle(
130 GDIOBJ_vReferenceObjectByPointer(
135 GDIOBJ_vDereferenceObject(
146 GDIOBJ_TryLockObject(
152 GDIOBJ_vUnlockObject(
157 GDIOBJ_vSetObjectOwner(
163 GDIOBJ_bLockMultipleObjects(
171 GDIOBJ_hInsertObject(
182 GDIOBJ_vSetObjectAttr(
188 GDIOBJ_pvGetObjectAttr(
191 BOOL NTAPI
GDIOBJ_ConvertToStockObj(HGDIOBJ
*hObj
);
192 POBJ NTAPI
GDIOBJ_AllocObjWithHandle(ULONG ObjectType
, ULONG cjSize
);
193 PGDIOBJ NTAPI
GDIOBJ_ShareLockObj(HGDIOBJ hObj
, DWORD ObjectType
);
194 PVOID NTAPI
GDI_MapHandleTable(PEPROCESS Process
);