[CONSRV]
[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 #include <bugcodes.h>
44 #include <ntiologc.h>
45
46 #include <stdarg.h> // FIXME
47 #include <basetyps.h> // FIXME
48
49
50 #ifdef __cplusplus
51 extern "C" {
52 #endif
53
54 /* GUID and UUID */
55 #ifndef _NTLSA_IFS_
56 #ifndef _NTLSA_AUDIT_
57 #define _NTLSA_AUDIT_
58
59 #ifndef GUID_DEFINED
60 #include <guiddef.h>
61 #endif
62
63 #endif /* _NTLSA_AUDIT_ */
64 #endif /* _NTLSA_IFS_ */
65
66 typedef GUID UUID;
67
68 struct _LOADER_PARAMETER_BLOCK;
69 struct _CREATE_DISK;
70 struct _DRIVE_LAYOUT_INFORMATION_EX;
71 struct _SET_PARTITION_INFORMATION_EX;
72 struct _DISK_GEOMETRY_EX;
73
74 typedef struct _BUS_HANDLER *PBUS_HANDLER;
75 typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
76 #if defined(_NTHAL_INCLUDED_)
77 typedef struct _KAFFINITY_EX *PKAFFINITY_EX;
78 #endif
79 typedef struct _PEB *PPEB;
80
81 #ifndef _NTIMAGE_
82
83 typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32;
84 typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64;
85
86 #ifdef _WIN64
87 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
88 #else
89 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
90 #endif
91
92 #endif /* _NTIMAGE_ */
93
94 $define (_NTDDK_)
95 $include (extypes.h)
96 $include (iotypes.h)
97 $include (haltypes.h)
98 $include (ketypes.h)
99 $include (kdtypes.h)
100 $include (mmtypes.h)
101 $include (pstypes.h)
102 $include (rtltypes.h)
103 $include (setypes.h)
104
105 #if defined(_M_IX86)
106 $include(x86/ke.h)
107 $include(x86/mm.h)
108 #elif defined(_M_AMD64)
109 $include(amd64/ke.h)
110 $include(amd64/mm.h)
111 #elif defined(_M_IA64)
112 $include(ia64/ke.h)
113 #elif defined(_M_PPC)
114 $include(ppc/ke.h)
115 #elif defined(_M_MIPS)
116 $include(mips/ke.h)
117 #elif defined(_M_ARM)
118 $include(arm/ke.h)
119 #else
120 #error Unknown Architecture
121 #endif
122
123 $include (exfuncs.h)
124 $include (halfuncs.h)
125 $include (iofuncs.h)
126 $include (kdfuncs.h)
127 $include (kefuncs.h)
128 $include (mmfuncs.h)
129 $include (psfuncs.h)
130 $include (rtlfuncs.h)
131 $include (sefuncs.h)
132 $include (zwfuncs.h)
133
134
135 /* UNSORTED */
136
137 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
138 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
139 (TypeBitMask), (ComparisonType)))
140
141 #if (NTDDI_VERSION >= NTDDI_WIN2K)
142 NTSYSAPI
143 ULONGLONG
144 NTAPI
145 VerSetConditionMask(
146 IN ULONGLONG ConditionMask,
147 IN ULONG TypeMask,
148 IN UCHAR Condition);
149 #endif
150
151 typedef struct _KERNEL_USER_TIMES {
152 LARGE_INTEGER CreateTime;
153 LARGE_INTEGER ExitTime;
154 LARGE_INTEGER KernelTime;
155 LARGE_INTEGER UserTime;
156 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
157
158 /* NtXxx Functions */
159
160 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION {
161 SystemFirmwareTable_Enumerate,
162 SystemFirmwareTable_Get
163 } SYSTEM_FIRMWARE_TABLE_ACTION;
164
165 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION {
166 ULONG ProviderSignature;
167 SYSTEM_FIRMWARE_TABLE_ACTION Action;
168 ULONG TableID;
169 ULONG TableBufferLength;
170 UCHAR TableBuffer[ANYSIZE_ARRAY];
171 } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
172
173 typedef NTSTATUS
174 (__cdecl *PFNFTH)(
175 _Inout_ PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo);
176
177 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER {
178 ULONG ProviderSignature;
179 BOOLEAN Register;
180 PFNFTH FirmwareTableHandler;
181 PVOID DriverObject;
182 } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
183
184 typedef ULONG_PTR
185 (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
186 _In_ PVOID Context);
187
188 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
189 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
190 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
191 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
192
193 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
194 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
195 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
196 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
197 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
198
199 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
200 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
201
202 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
203 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
204
205 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
206 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
207
208 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
209 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
210 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
211
212 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
213 #define SHARED_GLOBAL_FLAGS_SPARE \
214 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
215
216 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
217 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
218 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
219
220 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
221 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
222 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
223
224 #define EX_INIT_BITS(Flags, Bit) \
225 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
226
227 #define EX_TEST_SET_BIT(Flags, Bit) \
228 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
229
230 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
231 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
232
233 #define PCCARD_MAP_ERROR 0x01
234 #define PCCARD_DEVICE_PCI 0x10
235
236 #define PCCARD_SCAN_DISABLED 0x01
237 #define PCCARD_MAP_ZERO 0x02
238 #define PCCARD_NO_TIMER 0x03
239 #define PCCARD_NO_PIC 0x04
240 #define PCCARD_NO_LEGACY_BASE 0x05
241 #define PCCARD_DUP_LEGACY_BASE 0x06
242 #define PCCARD_NO_CONTROLLERS 0x07
243
244 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
245
246 /* Filesystem runtime library routines */
247
248 #if (NTDDI_VERSION >= NTDDI_WIN2K)
249 _Must_inspect_result_
250 NTKERNELAPI
251 BOOLEAN
252 NTAPI
253 FsRtlIsTotalDeviceFailure(
254 _In_ NTSTATUS Status);
255 #endif
256
257 #ifdef __cplusplus
258 }
259 #endif