[XDK]
[reactos.git] / include / xdk / ntddk.template.h
1 /*
2 * ntddk.h
3 *
4 * Windows NT Device Driver Kit
5 *
6 * This file is part of the ReactOS DDK package.
7 *
8 * Contributors:
9 * Amine Khaldi
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
11 *
12 * THIS SOFTWARE IS NOT COPYRIGHTED
13 *
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
16 *
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 *
22 */
23
24 #pragma once
25
26 #define _NTDDK_
27
28 #if !defined(_NTHAL_) && !defined(_NTIFS_)
29 #define _NTDDK_INCLUDED_
30 #define _DDK_DRIVER_
31 #endif
32
33 /* Dependencies */
34
35 #define NT_INCLUDED
36 #define _CTYPE_DISABLE_MACROS
37
38 #include <wdm.h>
39 #include <excpt.h>
40 #include <ntdef.h>
41 #include <ntstatus.h>
42 #include <mce.h>
43
44 /* FIXME
45 #include <bugcodes.h>
46 #include <ntiologc.h>
47 */
48
49 #include <stdarg.h> // FIXME
50 #include <basetyps.h> // FIXME
51
52
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56
57 /* GUID and UUID */
58 #ifndef _NTLSA_IFS_
59 #ifndef _NTLSA_AUDIT_
60 #define _NTLSA_AUDIT_
61
62 #ifndef GUID_DEFINED
63 #include <guiddef.h>
64 #endif
65
66 #endif /* _NTLSA_AUDIT_ */
67 #endif /* _NTLSA_IFS_ */
68
69 typedef GUID UUID;
70
71 struct _LOADER_PARAMETER_BLOCK;
72 struct _CREATE_DISK;
73 struct _DRIVE_LAYOUT_INFORMATION_EX;
74 struct _SET_PARTITION_INFORMATION_EX;
75
76 typedef struct _BUS_HANDLER *PBUS_HANDLER;
77 typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
78 #if defined(_NTHAL_INCLUDED_)
79 typedef struct _KAFFINITY_EX *PKAFFINITY_EX;
80 #endif
81 typedef struct _PEB *PPEB;
82
83 #ifndef _NTIMAGE_
84
85 typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32;
86 typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64;
87
88 #ifdef _WIN64
89 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
90 #else
91 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
92 #endif
93
94 #endif /* _NTIMAGE_ */
95
96 $define (_NTDDK_)
97 $include (extypes.h)
98 $include (iotypes.h)
99 $include (haltypes.h)
100 $include (ketypes.h)
101 $include (kdtypes.h)
102 $include (mmtypes.h)
103 $include (pstypes.h)
104 $include (rtltypes.h)
105 $include (setypes.h)
106
107 #if defined(_M_IX86)
108 $include(x86/ke.h)
109 $include(x86/mm.h)
110 #elif defined(_M_AMD64)
111 $include(amd64/ke.h)
112 $include(amd64/mm.h)
113 #elif defined(_M_IA64)
114 $include(ia64/ke.h)
115 #elif defined(_M_PPC)
116 $include(ppc/ke.h)
117 #elif defined(_M_MIPS)
118 $include(mips/ke.h)
119 #elif defined(_M_ARM)
120 $include(arm/ke.h)
121 #else
122 #error Unknown Architecture
123 #endif
124
125 $include (exfuncs.h)
126 $include (halfuncs.h)
127 $include (iofuncs.h)
128 $include (kdfuncs.h)
129 $include (kefuncs.h)
130 $include (mmfuncs.h)
131 $include (psfuncs.h)
132 $include (rtlfuncs.h)
133 $include (sefuncs.h)
134 $include (zwfuncs.h)
135
136
137 /* UNSORTED */
138
139 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
140 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
141 (TypeBitMask), (ComparisonType)))
142
143 #if (NTDDI_VERSION >= NTDDI_WIN2K)
144 NTSYSAPI
145 ULONGLONG
146 NTAPI
147 VerSetConditionMask(
148 IN ULONGLONG ConditionMask,
149 IN ULONG TypeMask,
150 IN UCHAR Condition);
151 #endif
152
153 typedef struct _KEY_NAME_INFORMATION {
154 ULONG NameLength;
155 WCHAR Name[1];
156 } KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
157
158 typedef struct _KEY_CACHED_INFORMATION {
159 LARGE_INTEGER LastWriteTime;
160 ULONG TitleIndex;
161 ULONG SubKeys;
162 ULONG MaxNameLen;
163 ULONG Values;
164 ULONG MaxValueNameLen;
165 ULONG MaxValueDataLen;
166 ULONG NameLength;
167 } KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION;
168
169 typedef struct _KEY_VIRTUALIZATION_INFORMATION {
170 ULONG VirtualizationCandidate:1;
171 ULONG VirtualizationEnabled:1;
172 ULONG VirtualTarget:1;
173 ULONG VirtualStore:1;
174 ULONG VirtualSource:1;
175 ULONG Reserved:27;
176 } KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION;
177
178 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
179 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
180 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
181 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
182 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
183
184 typedef struct _QUOTA_LIMITS {
185 SIZE_T PagedPoolLimit;
186 SIZE_T NonPagedPoolLimit;
187 SIZE_T MinimumWorkingSetSize;
188 SIZE_T MaximumWorkingSetSize;
189 SIZE_T PagefileLimit;
190 LARGE_INTEGER TimeLimit;
191 } QUOTA_LIMITS, *PQUOTA_LIMITS;
192
193 typedef union _RATE_QUOTA_LIMIT {
194 ULONG RateData;
195 struct {
196 ULONG RatePercent:7;
197 ULONG Reserved0:25;
198 } DUMMYSTRUCTNAME;
199 } RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
200
201 typedef struct _QUOTA_LIMITS_EX {
202 SIZE_T PagedPoolLimit;
203 SIZE_T NonPagedPoolLimit;
204 SIZE_T MinimumWorkingSetSize;
205 SIZE_T MaximumWorkingSetSize;
206 SIZE_T PagefileLimit;
207 LARGE_INTEGER TimeLimit;
208 SIZE_T WorkingSetLimit;
209 SIZE_T Reserved2;
210 SIZE_T Reserved3;
211 SIZE_T Reserved4;
212 ULONG Flags;
213 RATE_QUOTA_LIMIT CpuRateLimit;
214 } QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
215
216 typedef struct _IO_COUNTERS {
217 ULONGLONG ReadOperationCount;
218 ULONGLONG WriteOperationCount;
219 ULONGLONG OtherOperationCount;
220 ULONGLONG ReadTransferCount;
221 ULONGLONG WriteTransferCount;
222 ULONGLONG OtherTransferCount;
223 } IO_COUNTERS, *PIO_COUNTERS;
224
225 typedef struct _VM_COUNTERS {
226 SIZE_T PeakVirtualSize;
227 SIZE_T VirtualSize;
228 ULONG PageFaultCount;
229 SIZE_T PeakWorkingSetSize;
230 SIZE_T WorkingSetSize;
231 SIZE_T QuotaPeakPagedPoolUsage;
232 SIZE_T QuotaPagedPoolUsage;
233 SIZE_T QuotaPeakNonPagedPoolUsage;
234 SIZE_T QuotaNonPagedPoolUsage;
235 SIZE_T PagefileUsage;
236 SIZE_T PeakPagefileUsage;
237 } VM_COUNTERS, *PVM_COUNTERS;
238
239 typedef struct _VM_COUNTERS_EX {
240 SIZE_T PeakVirtualSize;
241 SIZE_T VirtualSize;
242 ULONG PageFaultCount;
243 SIZE_T PeakWorkingSetSize;
244 SIZE_T WorkingSetSize;
245 SIZE_T QuotaPeakPagedPoolUsage;
246 SIZE_T QuotaPagedPoolUsage;
247 SIZE_T QuotaPeakNonPagedPoolUsage;
248 SIZE_T QuotaNonPagedPoolUsage;
249 SIZE_T PagefileUsage;
250 SIZE_T PeakPagefileUsage;
251 SIZE_T PrivateUsage;
252 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
253
254 #define MAX_HW_COUNTERS 16
255 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
256
257 typedef enum _HARDWARE_COUNTER_TYPE {
258 PMCCounter,
259 MaxHardwareCounterType
260 } HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
261
262 typedef struct _HARDWARE_COUNTER {
263 HARDWARE_COUNTER_TYPE Type;
264 ULONG Reserved;
265 ULONG64 Index;
266 } HARDWARE_COUNTER, *PHARDWARE_COUNTER;
267
268 typedef struct _POOLED_USAGE_AND_LIMITS {
269 SIZE_T PeakPagedPoolUsage;
270 SIZE_T PagedPoolUsage;
271 SIZE_T PagedPoolLimit;
272 SIZE_T PeakNonPagedPoolUsage;
273 SIZE_T NonPagedPoolUsage;
274 SIZE_T NonPagedPoolLimit;
275 SIZE_T PeakPagefileUsage;
276 SIZE_T PagefileUsage;
277 SIZE_T PagefileLimit;
278 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
279
280 typedef struct _PROCESS_ACCESS_TOKEN {
281 HANDLE Token;
282 HANDLE Thread;
283 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
284
285 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
286 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
287
288 typedef struct _PROCESS_EXCEPTION_PORT {
289 IN HANDLE ExceptionPortHandle;
290 IN OUT ULONG StateFlags;
291 } PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT;
292
293 typedef struct _KERNEL_USER_TIMES {
294 LARGE_INTEGER CreateTime;
295 LARGE_INTEGER ExitTime;
296 LARGE_INTEGER KernelTime;
297 LARGE_INTEGER UserTime;
298 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
299
300 /* NtXxx Functions */
301
302 NTSYSCALLAPI
303 NTSTATUS
304 NTAPI
305 NtOpenProcess(
306 OUT PHANDLE ProcessHandle,
307 IN ACCESS_MASK DesiredAccess,
308 IN POBJECT_ATTRIBUTES ObjectAttributes,
309 IN PCLIENT_ID ClientId OPTIONAL);
310
311 NTSYSCALLAPI
312 NTSTATUS
313 NTAPI
314 NtQueryInformationProcess(
315 IN HANDLE ProcessHandle,
316 IN PROCESSINFOCLASS ProcessInformationClass,
317 OUT PVOID ProcessInformation OPTIONAL,
318 IN ULONG ProcessInformationLength,
319 OUT PULONG ReturnLength OPTIONAL);
320
321 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION {
322 SystemFirmwareTable_Enumerate,
323 SystemFirmwareTable_Get
324 } SYSTEM_FIRMWARE_TABLE_ACTION;
325
326 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION {
327 ULONG ProviderSignature;
328 SYSTEM_FIRMWARE_TABLE_ACTION Action;
329 ULONG TableID;
330 ULONG TableBufferLength;
331 UCHAR TableBuffer[ANYSIZE_ARRAY];
332 } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
333
334 typedef NTSTATUS
335 (__cdecl *PFNFTH)(
336 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo);
337
338 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER {
339 ULONG ProviderSignature;
340 BOOLEAN Register;
341 PFNFTH FirmwareTableHandler;
342 PVOID DriverObject;
343 } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
344
345 typedef ULONG_PTR
346 (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
347 IN PVOID Context);
348
349 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
350 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
351 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
352 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
353
354 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
355 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
356 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
357 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
358 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
359
360 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
361 #define NX_SUPPORT_POLICY_ALWAYSON 1
362 #define NX_SUPPORT_POLICY_OPTIN 2
363 #define NX_SUPPORT_POLICY_OPTOUT 3
364
365 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
366 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
367
368 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
369 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
370
371 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
372 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
373
374 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
375 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
376 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
377
378 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
379 #define SHARED_GLOBAL_FLAGS_SPARE \
380 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
381
382 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
383 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
384 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
385
386 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
387 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
388 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
389
390 #define EX_INIT_BITS(Flags, Bit) \
391 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
392
393 #define EX_TEST_SET_BIT(Flags, Bit) \
394 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
395
396 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
397 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
398
399 #define CmResourceTypeMaximum 8
400
401 typedef struct _CM_PCCARD_DEVICE_DATA {
402 UCHAR Flags;
403 UCHAR ErrorCode;
404 USHORT Reserved;
405 ULONG BusData;
406 ULONG DeviceId;
407 ULONG LegacyBaseAddress;
408 UCHAR IRQMap[16];
409 } CM_PCCARD_DEVICE_DATA, *PCM_PCCARD_DEVICE_DATA;
410
411 #define PCCARD_MAP_ERROR 0x01
412 #define PCCARD_DEVICE_PCI 0x10
413
414 #define PCCARD_SCAN_DISABLED 0x01
415 #define PCCARD_MAP_ZERO 0x02
416 #define PCCARD_NO_TIMER 0x03
417 #define PCCARD_NO_PIC 0x04
418 #define PCCARD_NO_LEGACY_BASE 0x05
419 #define PCCARD_DUP_LEGACY_BASE 0x06
420 #define PCCARD_NO_CONTROLLERS 0x07
421
422 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
423
424 /* Filesystem runtime library routines */
425
426 #if (NTDDI_VERSION >= NTDDI_WIN2K)
427 NTKERNELAPI
428 BOOLEAN
429 NTAPI
430 FsRtlIsTotalDeviceFailure(
431 IN NTSTATUS Status);
432 #endif
433
434 /* FIXME : These definitions below doesn't belong to NTDDK */
435
436 #ifdef __cplusplus
437 }
438 #endif