[CMAKE]
[reactos.git] / subsystems / win32 / win32k / pch.h
1 #ifndef __W32K_H
2 #define __W32K_H
3 /*
4 * COPYRIGHT: See COPYING in the top level directory
5 * PROJECT: ReactOS Graphics Subsystem
6 * FILE: subsys/win32k/w32k.h
7 * PURPOSE: Main Win32K Header
8 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
9 */
10
11 /* INCLUDES ******************************************************************/
12
13 #define _NO_COM
14
15 /* DDK/NDK/SDK Headers */
16 #include <ntddk.h>
17 #include <ntddmou.h>
18 #include <ntifs.h>
19 #include <tvout.h>
20 #include <ntndk.h>
21 #include <ntstrsafe.h>
22
23 /* Win32 Headers */
24 /* FIXME: Defines in winbase.h that we need... */
25 typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
26 #define WINBASEAPI
27 #define STARTF_USESIZE 2
28 #define STARTF_USEPOSITION 4
29 #include <stdarg.h>
30 #include <windef.h>
31
32 /* Avoid type casting, by defining RECT to RECTL */
33 #define RECT RECTL
34 #define PRECT PRECTL
35 #define LPRECT LPRECTL
36 #define LPCRECT LPCRECTL
37 #define POINT POINTL
38 #define LPPOINT PPOINTL
39 #define PPOINT PPOINTL
40
41 #include <winerror.h>
42 #include <wingdi.h>
43 #define NT_BUILD_ENVIRONMENT
44 #include <winddi.h>
45 #include <winuser.h>
46 #include <prntfont.h>
47 #include <dde.h>
48 #include <wincon.h>
49 #define _NOCSECT_TYPE
50 #include <ddrawi.h>
51
52 /* SEH Support with PSEH */
53 #include <pseh/pseh2.h>
54
55 /* CSRSS Header */
56 #include <csrss/csrss.h>
57
58 /* Public Win32K Headers */
59 #include <win32k/callback.h>
60 #include <win32k/ntusrtyp.h>
61 #include <win32k/ntuser.h>
62 #include <win32k/ntgdityp.h>
63 #include <win32k/ntgdibad.h>
64 #include <ntgdi.h>
65
66 /* Undocumented user definitions */
67 #include <undocuser.h>
68
69 /* Internal Win32K Header */
70 #include "include/win32kp.h"
71
72 /* Undocumented stuff */
73 typedef DRIVEROBJ *PDRIVEROBJ;
74
75 /* User heap */
76 extern HANDLE GlobalUserHeap;
77
78 PWIN32HEAP
79 UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
80 IN OUT PVOID *SystemBase,
81 IN SIZE_T HeapSize);
82
83 static __inline PVOID
84 UserHeapAlloc(SIZE_T Bytes)
85 {
86 return RtlAllocateHeap(GlobalUserHeap,
87 HEAP_NO_SERIALIZE,
88 Bytes);
89 }
90
91 static __inline BOOL
92 UserHeapFree(PVOID lpMem)
93 {
94 return RtlFreeHeap(GlobalUserHeap,
95 HEAP_NO_SERIALIZE,
96 lpMem);
97 }
98
99 static __inline PVOID
100 UserHeapReAlloc(PVOID lpMem,
101 SIZE_T Bytes)
102 {
103 #if 0
104 /* NOTE: ntoskrnl doesn't export RtlReAllocateHeap... */
105 return RtlReAllocateHeap(GlobalUserHeap,
106 HEAP_NO_SERIALIZE,
107 lpMem,
108 Bytes);
109 #else
110 SIZE_T PrevSize;
111 PVOID pNew;
112
113 PrevSize = RtlSizeHeap(GlobalUserHeap,
114 HEAP_NO_SERIALIZE,
115 lpMem);
116
117 if (PrevSize == Bytes)
118 return lpMem;
119
120 pNew = RtlAllocateHeap(GlobalUserHeap,
121 HEAP_NO_SERIALIZE,
122 Bytes);
123 if (pNew != NULL)
124 {
125 if (PrevSize < Bytes)
126 Bytes = PrevSize;
127
128 RtlCopyMemory(pNew,
129 lpMem,
130 Bytes);
131
132 RtlFreeHeap(GlobalUserHeap,
133 HEAP_NO_SERIALIZE,
134 lpMem);
135 }
136
137 return pNew;
138 #endif
139 }
140
141 static __inline PVOID
142 UserHeapAddressToUser(PVOID lpMem)
143 {
144 PPROCESSINFO W32Process = PsGetCurrentProcessWin32Process();
145 return (PVOID)(((ULONG_PTR)lpMem - (ULONG_PTR)GlobalUserHeap) +
146 (ULONG_PTR)W32Process->HeapMappings.UserMapping);
147 }
148
149 #define ROUND_DOWN(n, align) \
150 (((ULONG)n) & ~((align) - 1l))
151
152 #define ROUND_UP(n, align) \
153 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
154
155 #define LIST_FOR_EACH(elem, list, type, field) \
156 for ((elem) = CONTAINING_RECORD((list)->Flink, type, field); \
157 &(elem)->field != (list) && ((&((elem)->field)) != NULL); \
158 (elem) = CONTAINING_RECORD((elem)->field.Flink, type, field))
159
160 #define LIST_FOR_EACH_SAFE(cursor, cursor2, list, type, field) \
161 for ((cursor) = CONTAINING_RECORD((list)->Flink, type, field), \
162 (cursor2) = CONTAINING_RECORD((cursor)->field.Flink, type, field); \
163 &(cursor)->field != (list) && ((&((cursor)->field)) != NULL); \
164 (cursor) = (cursor2), \
165 (cursor2) = CONTAINING_RECORD((cursor)->field.Flink, type, field))
166
167 #endif /* __W32K_H */