4 * Windows NT Device Driver Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
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.
28 #if !defined(_NTHAL_) && !defined(_NTIFS_)
29 #define _NTDDK_INCLUDED_
36 #define _CTYPE_DISABLE_MACROS
49 #include <stdarg.h> // FIXME
50 #include <basetyps.h> // FIXME
66 #endif /* _NTLSA_AUDIT_ */
67 #endif /* _NTLSA_IFS_ */
71 struct _LOADER_PARAMETER_BLOCK
;
73 struct _DRIVE_LAYOUT_INFORMATION_EX
;
74 struct _SET_PARTITION_INFORMATION_EX
;
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
;
81 typedef struct _PEB
*PPEB
;
85 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
86 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
89 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
91 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
94 #endif /* _NTIMAGE_ */
104 $
include (rtltypes
.h
)
110 #elif defined(_M_AMD64)
113 #elif defined(_M_IA64)
115 #elif defined(_M_PPC)
117 #elif defined(_M_MIPS)
119 #elif defined(_M_ARM)
122 #error Unknown Architecture
126 $
include (halfuncs
.h
)
132 $
include (rtlfuncs
.h
)
139 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
140 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
141 (TypeBitMask), (ComparisonType)))
143 #if (NTDDI_VERSION >= NTDDI_WIN2K)
148 IN ULONGLONG ConditionMask
,
153 typedef struct _KEY_NAME_INFORMATION
{
156 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
158 typedef struct _KEY_CACHED_INFORMATION
{
159 LARGE_INTEGER LastWriteTime
;
164 ULONG MaxValueNameLen
;
165 ULONG MaxValueDataLen
;
167 } KEY_CACHED_INFORMATION
, *PKEY_CACHED_INFORMATION
;
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;
176 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
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
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
;
193 typedef union _RATE_QUOTA_LIMIT
{
199 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
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
;
213 RATE_QUOTA_LIMIT CpuRateLimit
;
214 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
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
;
225 typedef struct _VM_COUNTERS
{
226 SIZE_T PeakVirtualSize
;
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
;
239 typedef struct _VM_COUNTERS_EX
{
240 SIZE_T PeakVirtualSize
;
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
;
252 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
254 #define MAX_HW_COUNTERS 16
255 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
257 typedef enum _HARDWARE_COUNTER_TYPE
{
259 MaxHardwareCounterType
260 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
262 typedef struct _HARDWARE_COUNTER
{
263 HARDWARE_COUNTER_TYPE Type
;
266 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
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
;
280 typedef struct _PROCESS_ACCESS_TOKEN
{
283 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
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))
288 typedef struct _PROCESS_EXCEPTION_PORT
{
289 IN HANDLE ExceptionPortHandle
;
290 IN OUT ULONG StateFlags
;
291 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
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
;
300 /* NtXxx Functions */
306 OUT PHANDLE ProcessHandle
,
307 IN ACCESS_MASK DesiredAccess
,
308 IN POBJECT_ATTRIBUTES ObjectAttributes
,
309 IN PCLIENT_ID ClientId OPTIONAL
);
314 NtQueryInformationProcess(
315 IN HANDLE ProcessHandle
,
316 IN PROCESSINFOCLASS ProcessInformationClass
,
317 OUT PVOID ProcessInformation OPTIONAL
,
318 IN ULONG ProcessInformationLength
,
319 OUT PULONG ReturnLength OPTIONAL
);
321 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
322 SystemFirmwareTable_Enumerate
,
323 SystemFirmwareTable_Get
324 } SYSTEM_FIRMWARE_TABLE_ACTION
;
326 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
327 ULONG ProviderSignature
;
328 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
330 ULONG TableBufferLength
;
331 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
332 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
336 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
338 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
339 ULONG ProviderSignature
;
341 PFNFTH FirmwareTableHandler
;
343 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
346 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
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
;
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
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
365 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
366 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
368 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
369 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
371 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
372 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
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)
378 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
379 #define SHARED_GLOBAL_FLAGS_SPARE \
380 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
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)
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)
390 #define EX_INIT_BITS(Flags, Bit) \
391 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
393 #define EX_TEST_SET_BIT(Flags, Bit) \
394 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
396 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
397 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
399 #define CmResourceTypeMaximum 8
401 typedef struct _CM_PCCARD_DEVICE_DATA
{
407 ULONG LegacyBaseAddress
;
409 } CM_PCCARD_DEVICE_DATA
, *PCM_PCCARD_DEVICE_DATA
;
411 #define PCCARD_MAP_ERROR 0x01
412 #define PCCARD_DEVICE_PCI 0x10
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
422 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
424 /* Filesystem runtime library routines */
426 #if (NTDDI_VERSION >= NTDDI_WIN2K)
430 FsRtlIsTotalDeviceFailure(
434 /* FIXME : These definitions below doesn't belong to NTDDK */