[DDK]
[reactos.git] / include / xdk / extypes.h
1 $if (_WDMDDK_ || _NTDDK_)
2 /******************************************************************************
3 * Executive Types *
4 ******************************************************************************/
5 $endif
6 $if (_WDMDDK_)
7 #define EX_RUNDOWN_ACTIVE 0x1
8 #define EX_RUNDOWN_COUNT_SHIFT 0x1
9 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
10
11 typedef struct _FAST_MUTEX {
12 volatile LONG Count;
13 PKTHREAD Owner;
14 ULONG Contention;
15 KEVENT Event;
16 ULONG OldIrql;
17 } FAST_MUTEX, *PFAST_MUTEX;
18
19 typedef enum _SUITE_TYPE {
20 SmallBusiness,
21 Enterprise,
22 BackOffice,
23 CommunicationServer,
24 TerminalServer,
25 SmallBusinessRestricted,
26 EmbeddedNT,
27 DataCenter,
28 SingleUserTS,
29 Personal,
30 Blade,
31 EmbeddedRestricted,
32 SecurityAppliance,
33 StorageServer,
34 ComputeServer,
35 WHServer,
36 MaxSuiteType
37 } SUITE_TYPE;
38
39 typedef enum _EX_POOL_PRIORITY {
40 LowPoolPriority,
41 LowPoolPrioritySpecialPoolOverrun = 8,
42 LowPoolPrioritySpecialPoolUnderrun = 9,
43 NormalPoolPriority = 16,
44 NormalPoolPrioritySpecialPoolOverrun = 24,
45 NormalPoolPrioritySpecialPoolUnderrun = 25,
46 HighPoolPriority = 32,
47 HighPoolPrioritySpecialPoolOverrun = 40,
48 HighPoolPrioritySpecialPoolUnderrun = 41
49 } EX_POOL_PRIORITY;
50
51 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
52 #define LOOKASIDE_ALIGN
53 #else
54 #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
55 #endif
56
57 typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
58
59 typedef PVOID
60 (NTAPI *PALLOCATE_FUNCTION)(
61 IN POOL_TYPE PoolType,
62 IN SIZE_T NumberOfBytes,
63 IN ULONG Tag);
64
65 typedef PVOID
66 (NTAPI *PALLOCATE_FUNCTION_EX)(
67 IN POOL_TYPE PoolType,
68 IN SIZE_T NumberOfBytes,
69 IN ULONG Tag,
70 IN OUT PLOOKASIDE_LIST_EX Lookaside);
71
72 typedef VOID
73 (NTAPI *PFREE_FUNCTION)(
74 IN PVOID Buffer);
75
76 typedef VOID
77 (NTAPI *PFREE_FUNCTION_EX)(
78 IN PVOID Buffer,
79 IN OUT PLOOKASIDE_LIST_EX Lookaside);
80
81 typedef VOID
82 (NTAPI CALLBACK_FUNCTION)(
83 IN PVOID CallbackContext OPTIONAL,
84 IN PVOID Argument1 OPTIONAL,
85 IN PVOID Argument2 OPTIONAL);
86 typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
87
88 #define GENERAL_LOOKASIDE_LAYOUT \
89 union { \
90 SLIST_HEADER ListHead; \
91 SINGLE_LIST_ENTRY SingleListHead; \
92 } DUMMYUNIONNAME; \
93 USHORT Depth; \
94 USHORT MaximumDepth; \
95 ULONG TotalAllocates; \
96 union { \
97 ULONG AllocateMisses; \
98 ULONG AllocateHits; \
99 } DUMMYUNIONNAME2; \
100 \
101 ULONG TotalFrees; \
102 union { \
103 ULONG FreeMisses; \
104 ULONG FreeHits; \
105 } DUMMYUNIONNAME3; \
106 \
107 POOL_TYPE Type; \
108 ULONG Tag; \
109 ULONG Size; \
110 union { \
111 PALLOCATE_FUNCTION_EX AllocateEx; \
112 PALLOCATE_FUNCTION Allocate; \
113 } DUMMYUNIONNAME4; \
114 \
115 union { \
116 PFREE_FUNCTION_EX FreeEx; \
117 PFREE_FUNCTION Free; \
118 } DUMMYUNIONNAME5; \
119 \
120 LIST_ENTRY ListEntry; \
121 ULONG LastTotalAllocates; \
122 union { \
123 ULONG LastAllocateMisses; \
124 ULONG LastAllocateHits; \
125 } DUMMYUNIONNAME6; \
126 ULONG Future[2];
127
128 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
129 GENERAL_LOOKASIDE_LAYOUT
130 } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
131
132 typedef struct _GENERAL_LOOKASIDE_POOL {
133 GENERAL_LOOKASIDE_LAYOUT
134 } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL;
135
136 #define LOOKASIDE_CHECK(f) \
137 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
138
139 LOOKASIDE_CHECK(TotalFrees);
140 LOOKASIDE_CHECK(Tag);
141 LOOKASIDE_CHECK(Future);
142
143 typedef struct _PAGED_LOOKASIDE_LIST {
144 GENERAL_LOOKASIDE L;
145 #if !defined(_AMD64_) && !defined(_IA64_)
146 FAST_MUTEX Lock__ObsoleteButDoNotDelete;
147 #endif
148 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
149
150 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
151 GENERAL_LOOKASIDE L;
152 #if !defined(_AMD64_) && !defined(_IA64_)
153 KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
154 #endif
155 } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
156
157 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
158
159 typedef struct _LOOKASIDE_LIST_EX {
160 GENERAL_LOOKASIDE_POOL L;
161 } LOOKASIDE_LIST_EX;
162
163 #if (NTDDI_VERSION >= NTDDI_VISTA)
164
165 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
166 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
167
168 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
169 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
170
171 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
172
173 typedef struct _EX_RUNDOWN_REF {
174 __GNU_EXTENSION union {
175 volatile ULONG_PTR Count;
176 volatile PVOID Ptr;
177 };
178 } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
179
180 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
181
182 typedef enum _WORK_QUEUE_TYPE {
183 CriticalWorkQueue,
184 DelayedWorkQueue,
185 HyperCriticalWorkQueue,
186 MaximumWorkQueue
187 } WORK_QUEUE_TYPE;
188
189 typedef VOID
190 (NTAPI WORKER_THREAD_ROUTINE)(
191 IN PVOID Parameter);
192 typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
193
194 typedef struct _WORK_QUEUE_ITEM {
195 LIST_ENTRY List;
196 PWORKER_THREAD_ROUTINE WorkerRoutine;
197 volatile PVOID Parameter;
198 } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
199
200 typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
201
202 typedef struct _OWNER_ENTRY {
203 ERESOURCE_THREAD OwnerThread;
204 union {
205 struct {
206 ULONG IoPriorityBoosted:1;
207 ULONG OwnerReferenced:1;
208 ULONG OwnerCount:30;
209 };
210 ULONG TableSize;
211 };
212 } OWNER_ENTRY, *POWNER_ENTRY;
213
214 typedef struct _ERESOURCE {
215 LIST_ENTRY SystemResourcesList;
216 POWNER_ENTRY OwnerTable;
217 SHORT ActiveCount;
218 USHORT Flag;
219 volatile PKSEMAPHORE SharedWaiters;
220 volatile PKEVENT ExclusiveWaiters;
221 OWNER_ENTRY OwnerEntry;
222 ULONG ActiveEntries;
223 ULONG ContentionCount;
224 ULONG NumberOfSharedWaiters;
225 ULONG NumberOfExclusiveWaiters;
226 #if defined(_WIN64)
227 PVOID Reserved2;
228 #endif
229 __GNU_EXTENSION union {
230 PVOID Address;
231 ULONG_PTR CreatorBackTraceIndex;
232 };
233 KSPIN_LOCK SpinLock;
234 } ERESOURCE, *PERESOURCE;
235
236 /* ERESOURCE.Flag */
237 #define ResourceNeverExclusive 0x0010
238 #define ResourceReleaseByOtherThread 0x0020
239 #define ResourceOwnedExclusive 0x0080
240
241 #define RESOURCE_HASH_TABLE_SIZE 64
242
243 typedef struct _RESOURCE_HASH_ENTRY {
244 LIST_ENTRY ListEntry;
245 PVOID Address;
246 ULONG ContentionCount;
247 ULONG Number;
248 } RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
249
250 typedef struct _RESOURCE_PERFORMANCE_DATA {
251 ULONG ActiveResourceCount;
252 ULONG TotalResourceCount;
253 ULONG ExclusiveAcquire;
254 ULONG SharedFirstLevel;
255 ULONG SharedSecondLevel;
256 ULONG StarveFirstLevel;
257 ULONG StarveSecondLevel;
258 ULONG WaitForExclusive;
259 ULONG OwnerTableExpands;
260 ULONG MaximumTableExpand;
261 LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
262 } RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
263
264 /* Global debug flag */
265 #if DEVL
266 extern ULONG NtGlobalFlag;
267 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
268 #else
269 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
270 #endif
271
272 $endif (_WDMDDK_)
273 $if (_NTDDK_)
274 typedef struct _ZONE_SEGMENT_HEADER {
275 SINGLE_LIST_ENTRY SegmentList;
276 PVOID Reserved;
277 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
278
279 typedef struct _ZONE_HEADER {
280 SINGLE_LIST_ENTRY FreeList;
281 SINGLE_LIST_ENTRY SegmentList;
282 ULONG BlockSize;
283 ULONG TotalSegmentSize;
284 } ZONE_HEADER, *PZONE_HEADER;
285
286 #define PROTECTED_POOL 0x80000000
287
288 $endif (_NTDDK_)
289 $if (_NTIFS_)
290 #define INVALID_PROCESSOR_INDEX 0xffffffff
291
292 #define EX_PUSH_LOCK ULONG_PTR
293 #define PEX_PUSH_LOCK PULONG_PTR
294 $endif (_NTIFS_)