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