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