4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
30 #if !defined(_NTHAL_) && !defined(_NTIFS_)
31 #define _NTDDK_INCLUDED_
38 #define _CTYPE_DISABLE_MACROS
50 #include <stdarg.h> // FIXME
51 #include <basetyps.h> // FIXME
63 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
65 #define KERNEL_STACK_SIZE 12288
66 #define KERNEL_LARGE_STACK_SIZE 61440
67 #define KERNEL_LARGE_STACK_COMMIT 12288
71 #define SIZE_OF_80387_REGISTERS 80
73 typedef struct _FLOATING_SAVE_AREA
{
81 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
83 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
86 typedef struct _CONTEXT
{
94 FLOATING_SAVE_AREA FloatSave
;
111 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
112 } CONTEXT
, *PCONTEXT
;
119 #if !defined(RC_INVOKED)
121 #define CONTEXT_AMD64 0x100000
123 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
124 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
125 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
126 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
127 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
129 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
130 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
132 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
134 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
135 #define CONTEXT_SERVICE_ACTIVE 0x10000000
136 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
137 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
141 typedef enum _INTERLOCKED_RESULT
{
142 ResultNegative
= RESULT_NEGATIVE
,
143 ResultZero
= RESULT_ZERO
,
144 ResultPositive
= RESULT_POSITIVE
145 } INTERLOCKED_RESULT
;
147 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
149 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
150 *CallersAddress = (PVOID)_ReturnAddress(); \
151 *CallersCaller = NULL;
154 #if (NTDDI_VERSION >= NTDDI_WIN2K)
158 RtlGetCallersAddress(
159 OUT PVOID
*CallersAddress
,
160 OUT PVOID
*CallersCaller
);
165 #if !defined(MIDL_PASS)
170 RtlConvertLongToLuid(
177 Luid
.LowPart
= Temp
.u
.LowPart
;
178 Luid
.HighPart
= Temp
.u
.HighPart
;
185 RtlConvertUlongToLuid(
197 #if (NTDDI_VERSION >= NTDDI_WIN2K)
202 RtlPrefixUnicodeString(
203 IN PCUNICODE_STRING String1
,
204 IN PCUNICODE_STRING String2
,
205 IN BOOLEAN CaseInSensitive
);
211 IN OUT PSTRING DestinationString
,
212 IN
const PSTRING SourceString
);
217 RtlUpcaseUnicodeString(
218 IN OUT PUNICODE_STRING DestinationString
,
219 IN PCUNICODE_STRING SourceString
,
220 IN BOOLEAN AllocateDestinationString
);
226 IN OUT PACCESS_MASK AccessMask
,
227 IN PGENERIC_MAPPING GenericMapping
);
232 RtlVolumeDeviceToDosName(
233 IN PVOID VolumeDeviceObject
,
234 OUT PUNICODE_STRING DosName
);
240 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
245 RtlVerifyVersionInfo(
246 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
248 IN ULONGLONG ConditionMask
);
254 IN
const PSTRING String1
,
255 IN
const PSTRING String2
,
256 BOOLEAN CaseInSensitive
);
262 OUT PSTRING DestinationString
,
263 IN
const PSTRING SourceString OPTIONAL
);
269 IN
const PSTRING String1
,
270 IN
const PSTRING String2
,
271 IN BOOLEAN CaseInSensitive
);
275 /* Executive Types */
277 #define PROTECTED_POOL 0x80000000
279 typedef struct _ZONE_SEGMENT_HEADER
{
280 SINGLE_LIST_ENTRY SegmentList
;
282 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
284 typedef struct _ZONE_HEADER
{
285 SINGLE_LIST_ENTRY FreeList
;
286 SINGLE_LIST_ENTRY SegmentList
;
288 ULONG TotalSegmentSize
;
289 } ZONE_HEADER
, *PZONE_HEADER
;
291 /* Executive Functions */
296 * IN PZONE_HEADER Zone)
298 #define ExIsFullZone(Zone) \
299 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
302 * ExIsObjectInFirstZoneSegment(
303 * IN PZONE_HEADER Zone,
306 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
307 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
308 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
309 (Zone)->TotalSegmentSize)) )
311 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
312 #define ExAcquireResourceShared ExAcquireResourceSharedLite
313 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
314 #define ExDeleteResource ExDeleteResourceLite
315 #define ExInitializeResource ExInitializeResourceLite
316 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
317 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
318 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
319 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
321 #if (NTDDI_VERSION >= NTDDI_WIN2K)
327 IN OUT PZONE_HEADER Zone
,
328 IN OUT PVOID Segment
,
329 IN ULONG SegmentSize
);
335 OUT PZONE_HEADER Zone
,
337 IN OUT PVOID InitialSegment
,
338 IN ULONG InitialSegmentSize
);
343 ExInterlockedExtendZone(
344 IN OUT PZONE_HEADER Zone
,
345 IN OUT PVOID Segment
,
346 IN ULONG SegmentSize
,
347 IN OUT PKSPIN_LOCK Lock
);
357 /* I/O Manager Functions */
359 #if (NTDDI_VERSION >= NTDDI_WIN2K)
361 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
365 IoAllocateAdapterChannel(
366 IN PADAPTER_OBJECT AdapterObject
,
367 IN PDEVICE_OBJECT DeviceObject
,
368 IN ULONG NumberOfMapRegisters
,
369 IN PDRIVER_CONTROL ExecutionRoutine
,
373 //DECLSPEC_DEPRECATED_DDK
378 IN PADAPTER_OBJECT AdapterObject
,
380 IN PVOID MapRegisterBase
,
382 IN OUT PULONG Length
,
383 IN BOOLEAN WriteToDevice
);
388 IoAllocateController(
389 IN PCONTROLLER_OBJECT ControllerObject
,
390 IN PDEVICE_OBJECT DeviceObject
,
391 IN PDRIVER_CONTROL ExecutionRoutine
,
392 IN PVOID Context OPTIONAL
);
404 IN PCONTROLLER_OBJECT ControllerObject
);
410 IN PCONTROLLER_OBJECT ControllerObject
);
413 PCONFIGURATION_INFORMATION
415 IoGetConfigurationInformation(
428 IN PDEVICE_OBJECT DeviceObject
,
429 IN PFILE_OBJECT FileObject
);
434 IoGetFileObjectGenericMapping(
447 IoQueryDeviceDescription(
448 IN PINTERFACE_TYPE BusType OPTIONAL
,
449 IN PULONG BusNumber OPTIONAL
,
450 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
451 IN PULONG ControllerNumber OPTIONAL
,
452 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
453 IN PULONG PeripheralNumber OPTIONAL
,
454 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
455 IN OUT PVOID Context OPTIONAL
);
462 IN PVPB Vpb OPTIONAL
,
463 IN PDEVICE_OBJECT RealDeviceObject
);
468 IoRaiseInformationalHardError(
469 IN NTSTATUS ErrorStatus
,
470 IN PUNICODE_STRING String OPTIONAL
,
471 IN PKTHREAD Thread OPTIONAL
);
476 IoRegisterBootDriverReinitialization(
477 IN PDRIVER_OBJECT DriverObject
,
478 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
479 IN PVOID Context OPTIONAL
);
484 IoRegisterDriverReinitialization(
485 IN PDRIVER_OBJECT DriverObject
,
486 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
487 IN PVOID Context OPTIONAL
);
492 IoAttachDeviceByPointer(
493 IN PDEVICE_OBJECT SourceDevice
,
494 IN PDEVICE_OBJECT TargetDevice
);
496 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
498 /* Memory Manager Functions */
500 #if (NTDDI_VERSION >= NTDDI_WIN2K)
503 PPHYSICAL_MEMORY_RANGE
505 MmGetPhysicalMemoryRanges(
511 MmGetPhysicalAddress(
512 IN PVOID BaseAddress
);
514 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
516 /* Windows Device Driver Kit */