[XDK]
[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 _ANONYMOUS_UNION union { \
90 SLIST_HEADER ListHead; \
91 SINGLE_LIST_ENTRY SingleListHead; \
92 } DUMMYUNIONNAME; \
93 USHORT Depth; \
94 USHORT MaximumDepth; \
95 ULONG TotalAllocates; \
96 _ANONYMOUS_UNION union { \
97 ULONG AllocateMisses; \
98 ULONG AllocateHits; \
99 } DUMMYUNIONNAME2; \
100 ULONG TotalFrees; \
101 _ANONYMOUS_UNION union { \
102 ULONG FreeMisses; \
103 ULONG FreeHits; \
104 } DUMMYUNIONNAME3; \
105 POOL_TYPE Type; \
106 ULONG Tag; \
107 ULONG Size; \
108 _ANONYMOUS_UNION union { \
109 PALLOCATE_FUNCTION_EX AllocateEx; \
110 PALLOCATE_FUNCTION Allocate; \
111 } DUMMYUNIONNAME4; \
112 _ANONYMOUS_UNION union { \
113 PFREE_FUNCTION_EX FreeEx; \
114 PFREE_FUNCTION Free; \
115 } DUMMYUNIONNAME5; \
116 LIST_ENTRY ListEntry; \
117 ULONG LastTotalAllocates; \
118 _ANONYMOUS_UNION union { \
119 ULONG LastAllocateMisses; \
120 ULONG LastAllocateHits; \
121 } DUMMYUNIONNAME6; \
122 ULONG Future[2];
123
124 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
125 GENERAL_LOOKASIDE_LAYOUT
126 } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
127
128 typedef struct _GENERAL_LOOKASIDE_POOL {
129 GENERAL_LOOKASIDE_LAYOUT
130 } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL;
131
132 #define LOOKASIDE_CHECK(f) \
133 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
134
135 LOOKASIDE_CHECK(TotalFrees);
136 LOOKASIDE_CHECK(Tag);
137 LOOKASIDE_CHECK(Future);
138
139 typedef struct _PAGED_LOOKASIDE_LIST {
140 GENERAL_LOOKASIDE L;
141 #if !defined(_AMD64_) && !defined(_IA64_)
142 FAST_MUTEX Lock__ObsoleteButDoNotDelete;
143 #endif
144 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
145
146 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
147 GENERAL_LOOKASIDE L;
148 #if !defined(_AMD64_) && !defined(_IA64_)
149 KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
150 #endif
151 } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
152
153 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
154
155 typedef struct _LOOKASIDE_LIST_EX {
156 GENERAL_LOOKASIDE_POOL L;
157 } LOOKASIDE_LIST_EX;
158
159 #if (NTDDI_VERSION >= NTDDI_VISTA)
160
161 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
162 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
163
164 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
165 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
166
167 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
168
169 typedef struct _EX_RUNDOWN_REF {
170 _ANONYMOUS_UNION union {
171 volatile ULONG_PTR Count;
172 volatile PVOID Ptr;
173 } DUMMYUNIONNAME;
174 } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
175
176 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
177
178 typedef enum _WORK_QUEUE_TYPE {
179 CriticalWorkQueue,
180 DelayedWorkQueue,
181 HyperCriticalWorkQueue,
182 MaximumWorkQueue
183 } WORK_QUEUE_TYPE;
184
185 typedef VOID
186 (NTAPI WORKER_THREAD_ROUTINE)(
187 IN PVOID Parameter);
188 typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
189
190 typedef struct _WORK_QUEUE_ITEM {
191 LIST_ENTRY List;
192 PWORKER_THREAD_ROUTINE WorkerRoutine;
193 volatile PVOID Parameter;
194 } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
195
196 typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
197
198 typedef struct _OWNER_ENTRY {
199 ERESOURCE_THREAD OwnerThread;
200 _ANONYMOUS_UNION union {
201 _ANONYMOUS_STRUCT struct {
202 ULONG IoPriorityBoosted:1;
203 ULONG OwnerReferenced:1;
204 ULONG OwnerCount:30;
205 } DUMMYSTRUCTNAME;
206 ULONG TableSize;
207 } DUMMYUNIONNAME;
208 } OWNER_ENTRY, *POWNER_ENTRY;
209
210 typedef struct _ERESOURCE {
211 LIST_ENTRY SystemResourcesList;
212 POWNER_ENTRY OwnerTable;
213 SHORT ActiveCount;
214 USHORT Flag;
215 volatile PKSEMAPHORE SharedWaiters;
216 volatile PKEVENT ExclusiveWaiters;
217 OWNER_ENTRY OwnerEntry;
218 ULONG ActiveEntries;
219 ULONG ContentionCount;
220 ULONG NumberOfSharedWaiters;
221 ULONG NumberOfExclusiveWaiters;
222 #if defined(_WIN64)
223 PVOID Reserved2;
224 #endif
225 _ANONYMOUS_UNION union {
226 PVOID Address;
227 ULONG_PTR CreatorBackTraceIndex;
228 } DUMMYUNIONNAME;
229 KSPIN_LOCK SpinLock;
230 } ERESOURCE, *PERESOURCE;
231
232 /* ERESOURCE.Flag */
233 #define ResourceNeverExclusive 0x0010
234 #define ResourceReleaseByOtherThread 0x0020
235 #define ResourceOwnedExclusive 0x0080
236
237 #define RESOURCE_HASH_TABLE_SIZE 64
238
239 typedef struct _RESOURCE_HASH_ENTRY {
240 LIST_ENTRY ListEntry;
241 PVOID Address;
242 ULONG ContentionCount;
243 ULONG Number;
244 } RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
245
246 typedef struct _RESOURCE_PERFORMANCE_DATA {
247 ULONG ActiveResourceCount;
248 ULONG TotalResourceCount;
249 ULONG ExclusiveAcquire;
250 ULONG SharedFirstLevel;
251 ULONG SharedSecondLevel;
252 ULONG StarveFirstLevel;
253 ULONG StarveSecondLevel;
254 ULONG WaitForExclusive;
255 ULONG OwnerTableExpands;
256 ULONG MaximumTableExpand;
257 LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
258 } RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
259
260 /* Global debug flag */
261 #if DEVL
262 extern ULONG NtGlobalFlag;
263 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
264 #else
265 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
266 #endif
267
268 $endif (_WDMDDK_)
269 $if (_NTDDK_)
270 typedef struct _ZONE_SEGMENT_HEADER {
271 SINGLE_LIST_ENTRY SegmentList;
272 PVOID Reserved;
273 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
274
275 typedef struct _ZONE_HEADER {
276 SINGLE_LIST_ENTRY FreeList;
277 SINGLE_LIST_ENTRY SegmentList;
278 ULONG BlockSize;
279 ULONG TotalSegmentSize;
280 } ZONE_HEADER, *PZONE_HEADER;
281
282 #define PROTECTED_POOL 0x80000000
283
284 $endif (_NTDDK_)
285 $if (_NTIFS_)
286 #define INVALID_PROCESSOR_INDEX 0xffffffff
287
288 #define EX_PUSH_LOCK ULONG_PTR
289 #define PEX_PUSH_LOCK PULONG_PTR
290 $endif (_NTIFS_)