Reactos
1$if (_WDMDDK_ || _NTDDK_)
2/******************************************************************************
3 * Executive Types *
4 ******************************************************************************/
5$endif (_WDMDDK_ || _NTDDK_)
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
11typedef 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
19typedef 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
39typedef 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 DECLSPEC_CACHEALIGN
55#endif
56
57typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
58
59_IRQL_requires_same_
60_Function_class_(ALLOCATE_FUNCTION)
61typedef PVOID
62(NTAPI *PALLOCATE_FUNCTION)(
63 _In_ POOL_TYPE PoolType,
64 _In_ SIZE_T NumberOfBytes,
65 _In_ ULONG Tag);
66
67_IRQL_requires_same_
68_Function_class_(ALLOCATE_FUNCTION_EX)
69typedef PVOID
70(NTAPI *PALLOCATE_FUNCTION_EX)(
71 _In_ POOL_TYPE PoolType,
72 _In_ SIZE_T NumberOfBytes,
73 _In_ ULONG Tag,
74 _Inout_ PLOOKASIDE_LIST_EX Lookaside);
75
76_IRQL_requires_same_
77_Function_class_(FREE_FUNCTION)
78typedef VOID
79(NTAPI *PFREE_FUNCTION)(
80 _In_ PVOID Buffer);
81
82_IRQL_requires_same_
83_Function_class_(FREE_FUNCTION_EX)
84typedef VOID
85(NTAPI *PFREE_FUNCTION_EX)(
86 _In_ PVOID Buffer,
87 _Inout_ PLOOKASIDE_LIST_EX Lookaside);
88
89_IRQL_requires_same_
90_Function_class_(CALLBACK_FUNCTION)
91typedef VOID
92(NTAPI CALLBACK_FUNCTION)(
93 _In_opt_ PVOID CallbackContext,
94 _In_opt_ PVOID Argument1,
95 _In_opt_ PVOID Argument2);
96typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
97
98#define GENERAL_LOOKASIDE_LAYOUT \
99 _ANONYMOUS_UNION union { \
100 SLIST_HEADER ListHead; \
101 SINGLE_LIST_ENTRY SingleListHead; \
102 } DUMMYUNIONNAME; \
103 USHORT Depth; \
104 USHORT MaximumDepth; \
105 ULONG TotalAllocates; \
106 _ANONYMOUS_UNION union { \
107 ULONG AllocateMisses; \
108 ULONG AllocateHits; \
109 } DUMMYUNIONNAME2; \
110 ULONG TotalFrees; \
111 _ANONYMOUS_UNION union { \
112 ULONG FreeMisses; \
113 ULONG FreeHits; \
114 } DUMMYUNIONNAME3; \
115 POOL_TYPE Type; \
116 ULONG Tag; \
117 ULONG Size; \
118 _ANONYMOUS_UNION union { \
119 PALLOCATE_FUNCTION_EX AllocateEx; \
120 PALLOCATE_FUNCTION Allocate; \
121 } DUMMYUNIONNAME4; \
122 _ANONYMOUS_UNION union { \
123 PFREE_FUNCTION_EX FreeEx; \
124 PFREE_FUNCTION Free; \
125 } DUMMYUNIONNAME5; \
126 LIST_ENTRY ListEntry; \
127 ULONG LastTotalAllocates; \
128 _ANONYMOUS_UNION union { \
129 ULONG LastAllocateMisses; \
130 ULONG LastAllocateHits; \
131 } DUMMYUNIONNAME6; \
132 ULONG Future[2];
133
134typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
135 GENERAL_LOOKASIDE_LAYOUT
136} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
137
138typedef struct _GENERAL_LOOKASIDE_POOL {
139 GENERAL_LOOKASIDE_LAYOUT
140} GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL;
141
142#define LOOKASIDE_CHECK(f) \
143 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
144
145LOOKASIDE_CHECK(TotalFrees);
146LOOKASIDE_CHECK(Tag);
147LOOKASIDE_CHECK(Future);
148
149typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST {
150 GENERAL_LOOKASIDE L;
151#if !defined(_AMD64_) && !defined(_IA64_)
152 FAST_MUTEX Lock__ObsoleteButDoNotDelete;
153#endif
154} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
155
156typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
157 GENERAL_LOOKASIDE L;
158#if !defined(_AMD64_) && !defined(_IA64_)
159 KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
160#endif
161} NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
162
163#define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
164
165typedef struct _LOOKASIDE_LIST_EX {
166 GENERAL_LOOKASIDE_POOL L;
167} LOOKASIDE_LIST_EX;
168
169#if (NTDDI_VERSION >= NTDDI_VISTA)
170
171#define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
172#define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
173
174#define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
175#define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
176
177#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
178
179typedef struct _EX_RUNDOWN_REF {
180 _ANONYMOUS_UNION union {
181 volatile ULONG_PTR Count;
182 volatile PVOID Ptr;
183 } DUMMYUNIONNAME;
184} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
185
186typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
187
188typedef enum _WORK_QUEUE_TYPE {
189 CriticalWorkQueue,
190 DelayedWorkQueue,
191 HyperCriticalWorkQueue,
192 MaximumWorkQueue
193} WORK_QUEUE_TYPE;
194
195_IRQL_requires_same_
196_Function_class_(WORKER_THREAD_ROUTINE)
197typedef VOID
198(NTAPI WORKER_THREAD_ROUTINE)(
199 _In_ PVOID Parameter);
200typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
201
202typedef struct _WORK_QUEUE_ITEM {
203 LIST_ENTRY List;
204 PWORKER_THREAD_ROUTINE WorkerRoutine;
205 volatile PVOID Parameter;
206} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
207
208typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
209
210typedef struct _OWNER_ENTRY {
211 ERESOURCE_THREAD OwnerThread;
212 _ANONYMOUS_UNION union {
213 _ANONYMOUS_STRUCT struct {
214 ULONG IoPriorityBoosted:1;
215 ULONG OwnerReferenced:1;
216 ULONG OwnerCount:30;
217 } DUMMYSTRUCTNAME;
218 ULONG TableSize;
219 } DUMMYUNIONNAME;
220} OWNER_ENTRY, *POWNER_ENTRY;
221
222typedef struct _ERESOURCE {
223 LIST_ENTRY SystemResourcesList;
224 POWNER_ENTRY OwnerTable;
225 SHORT ActiveCount;
226 USHORT Flag;
227 volatile PKSEMAPHORE SharedWaiters;
228 volatile PKEVENT ExclusiveWaiters;
229 OWNER_ENTRY OwnerEntry;
230 ULONG ActiveEntries;
231 ULONG ContentionCount;
232 ULONG NumberOfSharedWaiters;
233 ULONG NumberOfExclusiveWaiters;
234#if defined(_WIN64)
235 PVOID Reserved2;
236#endif
237 _ANONYMOUS_UNION union {
238 PVOID Address;
239 ULONG_PTR CreatorBackTraceIndex;
240 } DUMMYUNIONNAME;
241 KSPIN_LOCK SpinLock;
242} ERESOURCE, *PERESOURCE;
243
244/* ERESOURCE.Flag */
245#define ResourceNeverExclusive 0x0010
246#define ResourceReleaseByOtherThread 0x0020
247#define ResourceOwnedExclusive 0x0080
248
249#define RESOURCE_HASH_TABLE_SIZE 64
250
251typedef struct _RESOURCE_HASH_ENTRY {
252 LIST_ENTRY ListEntry;
253 PVOID Address;
254 ULONG ContentionCount;
255 ULONG Number;
256} RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
257
258typedef struct _RESOURCE_PERFORMANCE_DATA {
259 ULONG ActiveResourceCount;
260 ULONG TotalResourceCount;
261 ULONG ExclusiveAcquire;
262 ULONG SharedFirstLevel;
263 ULONG SharedSecondLevel;
264 ULONG StarveFirstLevel;
265 ULONG StarveSecondLevel;
266 ULONG WaitForExclusive;
267 ULONG OwnerTableExpands;
268 ULONG MaximumTableExpand;
269 LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
270} RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
271
272/* Global debug flag */
273#if DEVL
274extern NTKERNELAPI ULONG NtGlobalFlag;
275#define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
276#else
277#define IF_NTOS_DEBUG(FlagName) if(FALSE)
278#endif
279
280#if (NTDDI_VERSION >= NTDDI_WINBLUE)
281
282typedef struct _EXT_SET_PARAMETERS_V0
283{
284 ULONG Version;
285 ULONG Reserved;
286 LONGLONG NoWakeTolerance;
287} EXT_SET_PARAMETERS, *PEXT_SET_PARAMETERS;
288
289typedef EXT_SET_PARAMETERS KT2_SET_PARAMETERS, *PKT2_SET_PARAMETERS;
290
291typedef struct _EX_TIMER *PEX_TIMER;
292
293_Function_class_(EXT_CALLBACK)
294_IRQL_requires_(DISPATCH_LEVEL)
295_IRQL_requires_same_
296typedef
297VOID
298NTAPI
299EXT_CALLBACK(
300 _In_ PEX_TIMER Timer,
301 _In_opt_ PVOID Context);
302
303typedef EXT_CALLBACK *PEXT_CALLBACK;
304
305_Function_class_(EXT_DELETE_CALLBACK)
306_IRQL_requires_(DISPATCH_LEVEL)
307_IRQL_requires_same_
308typedef
309VOID
310NTAPI
311EXT_DELETE_CALLBACK(
312 _In_opt_ PVOID Context);
313
314typedef EXT_DELETE_CALLBACK *PEXT_DELETE_CALLBACK;
315typedef PVOID PEXT_CANCEL_PARAMETERS;
316typedef struct _EXT_DELETE_PARAMETERS
317{
318 ULONG Version;
319 ULONG Reserved;
320 PEXT_DELETE_CALLBACK DeleteCallback;
321 PVOID DeleteContext;
322} EXT_DELETE_PARAMETERS, *PEXT_DELETE_PARAMETERS;
323
324#endif // NTDDI_WINBLUE
325
326$endif (_WDMDDK_)
327$if (_NTDDK_)
328typedef struct _ZONE_SEGMENT_HEADER {
329 SINGLE_LIST_ENTRY SegmentList;
330 PVOID Reserved;
331} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
332
333typedef struct _ZONE_HEADER {
334 SINGLE_LIST_ENTRY FreeList;
335 SINGLE_LIST_ENTRY SegmentList;
336 ULONG BlockSize;
337 ULONG TotalSegmentSize;
338} ZONE_HEADER, *PZONE_HEADER;
339
340#define PROTECTED_POOL 0x80000000
341
342$endif (_NTDDK_)
343$if (_NTIFS_)
344#define INVALID_PROCESSOR_INDEX 0xffffffff
345
346#define EX_PUSH_LOCK ULONG_PTR
347#define PEX_PUSH_LOCK PULONG_PTR
348$endif (_NTIFS_)
349
350$if (_WINNT_ || _WDMDDK_)
351#if (NTDDI_VERSION >= NTDDI_VISTA)
352typedef enum _FIRMWARE_TYPE {
353 FirmwareTypeUnknown,
354 FirmwareTypeBios,
355 FirmwareTypeUefi,
356 FirmwareTypeMax
357} FIRMWARE_TYPE, *PFIRMWARE_TYPE;
358#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
359$endif (_WINNT_ || _WDMDDK_)