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