xref: /reactos/win32ss/gdi/ntgdi/gdiobj.h (revision fc3ccb39)
1 /*
2  *  GDI object common header definition
3  *
4  */
5 
6 #pragma once
7 
8 #define GDI_OBJECT_STACK_LEVELS 20
9 
10 /* The first 10 entries are never used in windows, they are empty */
11 static const unsigned RESERVE_ENTRIES_COUNT = 10;
12 
13 typedef struct _GDI_HANDLE_TABLE
14 {
15 /* The table must be located at the beginning of this structure so it can be
16  * properly mapped!
17  */
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.
24   DWORD           dwCFCount;
25 
26 
27 } GDI_HANDLE_TABLE, *PGDI_HANDLE_TABLE;
28 
29 extern PGDI_HANDLE_TABLE GdiHandleTable;
30 
31 typedef PVOID PGDIOBJ;
32 
33 typedef VOID (NTAPI *GDICLEANUPPROC)(PVOID ObjectBody);
34 typedef VOID (NTAPI *GDIOBJDELETEPROC)(PVOID ObjectBody);
35 
36 /* Every GDI Object must have this standard type of header.
37  * It's for thread locking. */
38 typedef struct _BASEOBJECT
39 {
40     HGDIOBJ hHmgr;
41     union {
42         ULONG ulShareCount; /* For objects without a handle */
43         DWORD dwThreadId;   /* Exclusive lock owner */
44     };
45     USHORT cExclusiveLock;
46     USHORT BaseFlags;
47     EX_PUSH_LOCK pushlock;
48 #if DBG_ENABLE_GDIOBJ_BACKTRACES
49     PVOID apvBackTrace[GDI_OBJECT_STACK_LEVELS];
50 #endif
51 #if DBG_ENABLE_EVENT_LOGGING
52     SLIST_HEADER slhLog;
53 #endif
54 } BASEOBJECT, *POBJ;
55 
56 enum BASEFLAGS
57 {
58     BASEFLAG_LOOKASIDE = 0x80,
59 
60     /* ReactOS specific: */
61     BASEFLAG_READY_TO_DIE = 0x1000
62 };
63 
64 typedef struct _CLIENTOBJ
65 {
66     BASEOBJECT BaseObject;
67 } CLIENTOBJ, *PCLIENTOBJ;
68 
69 enum _GDIOBJLAGS
70 {
71     GDIOBJFLAG_DEFAULT    = 0x00,
72     GDIOBJFLAG_IGNOREPID  = 0x01,
73     GDIOBJFLAG_IGNORELOCK = 0x02
74 };
75 
76 NTSTATUS
77 NTAPI
78 InitGdiHandleTable(VOID);
79 
80 BOOL
81 NTAPI
82 GreIsHandleValid(
83     HGDIOBJ hobj);
84 
85 BOOL
86 NTAPI
87 GreDeleteObject(
88     HGDIOBJ hObject);
89 
90 ULONG
91 NTAPI
92 GreGetObjectOwner(
93     HGDIOBJ hobj);
94 
95 BOOL
96 NTAPI
97 GreSetObjectOwner(
98     HGDIOBJ hobj,
99     ULONG ulOwner);
100 
101 BOOL
102 NTAPI
103 GreSetObjectOwnerEx(
104     HGDIOBJ hobj,
105     ULONG ulOwner,
106     ULONG Flags);
107 
108 INT
109 NTAPI
110 GreGetObject(
111     IN HGDIOBJ hobj,
112     IN INT cbCount,
113     OUT PVOID pvBuffer);
114 
115 POBJ
116 NTAPI
117 GDIOBJ_AllocateObject(
118     UCHAR objt,
119     ULONG cjSize,
120     FLONG fl);
121 
122 VOID
123 NTAPI
124 GDIOBJ_vDeleteObject(
125     POBJ pobj);
126 
127 POBJ
128 NTAPI
129 GDIOBJ_ReferenceObjectByHandle(
130     HGDIOBJ hobj,
131     UCHAR objt);
132 
133 VOID
134 NTAPI
135 GDIOBJ_vReferenceObjectByPointer(
136     POBJ pobj);
137 
138 VOID
139 NTAPI
140 GDIOBJ_vDereferenceObject(
141     POBJ pobj);
142 
143 PGDIOBJ
144 NTAPI
145 GDIOBJ_LockObject(
146     HGDIOBJ hobj,
147     UCHAR objt);
148 
149 PGDIOBJ
150 NTAPI
151 GDIOBJ_TryLockObject(
152     HGDIOBJ hobj,
153     UCHAR objt);
154 
155 VOID
156 NTAPI
157 GDIOBJ_vUnlockObject(
158     POBJ pobj);
159 
160 VOID
161 NTAPI
162 GDIOBJ_vSetObjectOwner(
163     POBJ pobj,
164     ULONG ulOwner);
165 
166 BOOL
167 NTAPI
168 GDIOBJ_bLockMultipleObjects(
169     ULONG ulCount,
170     HGDIOBJ* ahObj,
171     PGDIOBJ* apObj,
172     UCHAR objt);
173 
174 HGDIOBJ
175 NTAPI
176 GDIOBJ_hInsertObject(
177     POBJ pobj,
178     ULONG ulOwner);
179 
180 VOID
181 NTAPI
182 GDIOBJ_vFreeObject(
183     POBJ pobj);
184 
185 VOID
186 NTAPI
187 GDIOBJ_vSetObjectAttr(
188     POBJ pobj,
189     PVOID pvObjAttr);
190 
191 PVOID
192 NTAPI
193 GDIOBJ_pvGetObjectAttr(
194     POBJ pobj);
195 
196 BOOL    NTAPI GDIOBJ_ConvertToStockObj(HGDIOBJ *hObj);
197 POBJ    NTAPI GDIOBJ_AllocObjWithHandle(ULONG ObjectType, ULONG cjSize);
198 PGDIOBJ NTAPI GDIOBJ_ShareLockObj(HGDIOBJ hObj, DWORD ObjectType);
199 PVOID   NTAPI GDI_MapHandleTable(PEPROCESS Process);
200