b6ca60ed5930c41ecf6f7d6578ee7d9b26500def
[reactos.git] / include / ddk / ntddk.h
1 /*
2 * ntddk.h
3 *
4 * Windows Device Driver Kit
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
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.
20 *
21 * DEFINES:
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
25 */
26
27 #ifndef _NTDDK_
28 #define _NTDDK_
29
30 #if !defined(_NTHAL_) && !defined(_NTIFS_)
31 #define _NTDDK_INCLUDED_
32 #define _DDK_DRIVER_
33 #endif
34
35 /* Dependencies */
36
37 #define NT_INCLUDED
38 #define _CTYPE_DISABLE_MACROS
39
40 #include <wdm.h>
41 #include <excpt.h>
42 #include <ntdef.h>
43 #include <ntstatus.h>
44
45 /* FIXME
46 #include <bugcodes.h>
47 #include <ntiologc.h>
48 */
49
50 #include <stdarg.h> // FIXME
51 #include <basetyps.h> // FIXME
52
53
54
55 //
56 // GUID and UUID
57 //
58 #ifndef GUID_DEFINED
59 #include <guiddef.h>
60 #endif
61 typedef GUID UUID;
62
63 typedef struct _BUS_HANDLER *PBUS_HANDLER;
64
65 #define KERNEL_STACK_SIZE 12288
66 #define KERNEL_LARGE_STACK_SIZE 61440
67 #define KERNEL_LARGE_STACK_COMMIT 12288
68
69 #ifdef _X86_
70
71 #define SIZE_OF_80387_REGISTERS 80
72
73 typedef struct _FLOATING_SAVE_AREA {
74 ULONG ControlWord;
75 ULONG StatusWord;
76 ULONG TagWord;
77 ULONG ErrorOffset;
78 ULONG ErrorSelector;
79 ULONG DataOffset;
80 ULONG DataSelector;
81 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
82 ULONG Cr0NpxState;
83 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
84
85 #include "pshpack4.h"
86 typedef struct _CONTEXT {
87 ULONG ContextFlags;
88 ULONG Dr0;
89 ULONG Dr1;
90 ULONG Dr2;
91 ULONG Dr3;
92 ULONG Dr6;
93 ULONG Dr7;
94 FLOATING_SAVE_AREA FloatSave;
95 ULONG SegGs;
96 ULONG SegFs;
97 ULONG SegEs;
98 ULONG SegDs;
99 ULONG Edi;
100 ULONG Esi;
101 ULONG Ebx;
102 ULONG Edx;
103 ULONG Ecx;
104 ULONG Eax;
105 ULONG Ebp;
106 ULONG Eip;
107 ULONG SegCs;
108 ULONG EFlags;
109 ULONG Esp;
110 ULONG SegSs;
111 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
112 } CONTEXT, *PCONTEXT;
113 #include "poppack.h"
114
115 #endif
116
117 #ifdef _AMD64_
118
119 #if !defined(RC_INVOKED)
120
121 #define CONTEXT_AMD64 0x100000
122
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)
128
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)
131
132 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
133
134 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
135 #define CONTEXT_SERVICE_ACTIVE 0x10000000
136 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
137 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
138
139 #endif
140
141 typedef enum _INTERLOCKED_RESULT {
142 ResultNegative = RESULT_NEGATIVE,
143 ResultZero = RESULT_ZERO,
144 ResultPositive = RESULT_POSITIVE
145 } INTERLOCKED_RESULT;
146
147 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
148
149 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
150 *CallersAddress = (PVOID)_ReturnAddress(); \
151 *CallersCaller = NULL;
152 #else
153
154 #if (NTDDI_VERSION >= NTDDI_WIN2K)
155 NTSYSAPI
156 VOID
157 NTAPI
158 RtlGetCallersAddress(
159 OUT PVOID *CallersAddress,
160 OUT PVOID *CallersCaller);
161 #endif
162
163 #endif
164
165 #if !defined(MIDL_PASS)
166
167 FORCEINLINE
168 LUID
169 NTAPI_INLINE
170 RtlConvertLongToLuid(
171 IN LONG Val)
172 {
173 LUID Luid;
174 LARGE_INTEGER Temp;
175
176 Temp.QuadPart = Val;
177 Luid.LowPart = Temp.u.LowPart;
178 Luid.HighPart = Temp.u.HighPart;
179 return Luid;
180 }
181
182 FORCEINLINE
183 LUID
184 NTAPI_INLINE
185 RtlConvertUlongToLuid(
186 IN ULONG Val)
187 {
188 LUID Luid;
189
190 Luid.LowPart = Val;
191 Luid.HighPart = 0;
192 return Luid;
193 }
194
195 #endif
196
197 #if (NTDDI_VERSION >= NTDDI_WIN2K)
198
199 NTSYSAPI
200 BOOLEAN
201 NTAPI
202 RtlPrefixUnicodeString(
203 IN PCUNICODE_STRING String1,
204 IN PCUNICODE_STRING String2,
205 IN BOOLEAN CaseInSensitive);
206
207 NTSYSAPI
208 VOID
209 NTAPI
210 RtlUpperString(
211 IN OUT PSTRING DestinationString,
212 IN const PSTRING SourceString);
213
214 NTSYSAPI
215 NTSTATUS
216 NTAPI
217 RtlUpcaseUnicodeString(
218 IN OUT PUNICODE_STRING DestinationString,
219 IN PCUNICODE_STRING SourceString,
220 IN BOOLEAN AllocateDestinationString);
221
222 NTSYSAPI
223 VOID
224 NTAPI
225 RtlMapGenericMask(
226 IN OUT PACCESS_MASK AccessMask,
227 IN PGENERIC_MAPPING GenericMapping);
228
229 NTSYSAPI
230 NTSTATUS
231 NTAPI
232 RtlVolumeDeviceToDosName(
233 IN PVOID VolumeDeviceObject,
234 OUT PUNICODE_STRING DosName);
235
236 NTSYSAPI
237 NTSTATUS
238 NTAPI
239 RtlGetVersion(
240 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
241
242 NTSYSAPI
243 NTSTATUS
244 NTAPI
245 RtlVerifyVersionInfo(
246 IN PRTL_OSVERSIONINFOEXW VersionInfo,
247 IN ULONG TypeMask,
248 IN ULONGLONG ConditionMask);
249
250 NTSYSAPI
251 LONG
252 NTAPI
253 RtlCompareString(
254 IN const PSTRING String1,
255 IN const PSTRING String2,
256 BOOLEAN CaseInSensitive);
257
258 NTSYSAPI
259 VOID
260 NTAPI
261 RtlCopyString(
262 OUT PSTRING DestinationString,
263 IN const PSTRING SourceString OPTIONAL);
264
265 NTSYSAPI
266 BOOLEAN
267 NTAPI
268 RtlEqualString(
269 IN const PSTRING String1,
270 IN const PSTRING String2,
271 IN BOOLEAN CaseInSensitive);
272
273 #endif
274
275 /* Executive Types */
276
277 #define PROTECTED_POOL 0x80000000
278
279 typedef struct _ZONE_SEGMENT_HEADER {
280 SINGLE_LIST_ENTRY SegmentList;
281 PVOID Reserved;
282 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
283
284 typedef struct _ZONE_HEADER {
285 SINGLE_LIST_ENTRY FreeList;
286 SINGLE_LIST_ENTRY SegmentList;
287 ULONG BlockSize;
288 ULONG TotalSegmentSize;
289 } ZONE_HEADER, *PZONE_HEADER;
290
291 /* Executive Functions */
292
293 /*
294 * BOOLEAN
295 * ExIsFullZone(
296 * IN PZONE_HEADER Zone)
297 */
298 #define ExIsFullZone(Zone) \
299 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
300
301 /* BOOLEAN
302 * ExIsObjectInFirstZoneSegment(
303 * IN PZONE_HEADER Zone,
304 * IN PVOID Object);
305 */
306 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
307 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
308 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
309 (Zone)->TotalSegmentSize)) )
310
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
320
321 #if (NTDDI_VERSION >= NTDDI_WIN2K)
322
323 NTKERNELAPI
324 NTSTATUS
325 NTAPI
326 ExExtendZone(
327 IN OUT PZONE_HEADER Zone,
328 IN OUT PVOID Segment,
329 IN ULONG SegmentSize);
330
331 NTKERNELAPI
332 NTSTATUS
333 NTAPI
334 ExInitializeZone(
335 OUT PZONE_HEADER Zone,
336 IN ULONG BlockSize,
337 IN OUT PVOID InitialSegment,
338 IN ULONG InitialSegmentSize);
339
340 NTKERNELAPI
341 NTSTATUS
342 NTAPI
343 ExInterlockedExtendZone(
344 IN OUT PZONE_HEADER Zone,
345 IN OUT PVOID Segment,
346 IN ULONG SegmentSize,
347 IN OUT PKSPIN_LOCK Lock);
348
349 NTKERNELAPI
350 NTSTATUS
351 NTAPI
352 ExUuidCreate(
353 OUT UUID *Uuid);
354
355 #endif
356
357 /* I/O Manager Functions */
358
359 #if (NTDDI_VERSION >= NTDDI_WIN2K)
360
361 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
362 NTKERNELAPI
363 NTSTATUS
364 NTAPI
365 IoAllocateAdapterChannel(
366 IN PADAPTER_OBJECT AdapterObject,
367 IN PDEVICE_OBJECT DeviceObject,
368 IN ULONG NumberOfMapRegisters,
369 IN PDRIVER_CONTROL ExecutionRoutine,
370 IN PVOID Context);
371 #endif
372
373 //DECLSPEC_DEPRECATED_DDK
374 NTHALAPI
375 PHYSICAL_ADDRESS
376 NTAPI
377 IoMapTransfer(
378 IN PADAPTER_OBJECT AdapterObject,
379 IN PMDL Mdl,
380 IN PVOID MapRegisterBase,
381 IN PVOID CurrentVa,
382 IN OUT PULONG Length,
383 IN BOOLEAN WriteToDevice);
384
385 NTKERNELAPI
386 VOID
387 NTAPI
388 IoAllocateController(
389 IN PCONTROLLER_OBJECT ControllerObject,
390 IN PDEVICE_OBJECT DeviceObject,
391 IN PDRIVER_CONTROL ExecutionRoutine,
392 IN PVOID Context OPTIONAL);
393
394 NTKERNELAPI
395 PCONTROLLER_OBJECT
396 NTAPI
397 IoCreateController(
398 IN ULONG Size);
399
400 NTKERNELAPI
401 VOID
402 NTAPI
403 IoDeleteController(
404 IN PCONTROLLER_OBJECT ControllerObject);
405
406 NTKERNELAPI
407 VOID
408 NTAPI
409 IoFreeController(
410 IN PCONTROLLER_OBJECT ControllerObject);
411
412 NTKERNELAPI
413 PCONFIGURATION_INFORMATION
414 NTAPI
415 IoGetConfigurationInformation(
416 VOID);
417
418 NTKERNELAPI
419 PDEVICE_OBJECT
420 NTAPI
421 IoGetDeviceToVerify(
422 IN PETHREAD Thread);
423
424 NTKERNELAPI
425 VOID
426 NTAPI
427 IoCancelFileOpen(
428 IN PDEVICE_OBJECT DeviceObject,
429 IN PFILE_OBJECT FileObject);
430
431 NTKERNELAPI
432 PGENERIC_MAPPING
433 NTAPI
434 IoGetFileObjectGenericMapping(
435 VOID);
436
437 NTKERNELAPI
438 PIRP
439 NTAPI
440 IoMakeAssociatedIrp(
441 IN PIRP Irp,
442 IN CCHAR StackSize);
443
444 NTKERNELAPI
445 NTSTATUS
446 NTAPI
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);
456
457 NTKERNELAPI
458 VOID
459 NTAPI
460 IoRaiseHardError(
461 IN PIRP Irp,
462 IN PVPB Vpb OPTIONAL,
463 IN PDEVICE_OBJECT RealDeviceObject);
464
465 NTKERNELAPI
466 BOOLEAN
467 NTAPI
468 IoRaiseInformationalHardError(
469 IN NTSTATUS ErrorStatus,
470 IN PUNICODE_STRING String OPTIONAL,
471 IN PKTHREAD Thread OPTIONAL);
472
473 NTKERNELAPI
474 VOID
475 NTAPI
476 IoRegisterBootDriverReinitialization(
477 IN PDRIVER_OBJECT DriverObject,
478 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
479 IN PVOID Context OPTIONAL);
480
481 NTKERNELAPI
482 VOID
483 NTAPI
484 IoRegisterDriverReinitialization(
485 IN PDRIVER_OBJECT DriverObject,
486 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
487 IN PVOID Context OPTIONAL);
488
489 NTKERNELAPI
490 NTSTATUS
491 NTAPI
492 IoAttachDeviceByPointer(
493 IN PDEVICE_OBJECT SourceDevice,
494 IN PDEVICE_OBJECT TargetDevice);
495
496 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
497
498 /* Memory Manager Functions */
499
500 #if (NTDDI_VERSION >= NTDDI_WIN2K)
501
502 NTKERNELAPI
503 PPHYSICAL_MEMORY_RANGE
504 NTAPI
505 MmGetPhysicalMemoryRanges(
506 VOID);
507
508 NTKERNELAPI
509 PHYSICAL_ADDRESS
510 NTAPI
511 MmGetPhysicalAddress(
512 IN PVOID BaseAddress);
513
514 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
515
516 /* Windows Device Driver Kit */
517 #include "winddk.h"
518
519
520 #endif /* _NTDDK_ */