Add extern "C"
[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 #ifdef __cplusplus
55 extern "C" {
56 #endif
57
58 //
59 // GUID and UUID
60 //
61 #ifndef GUID_DEFINED
62 #include <guiddef.h>
63 #endif
64 typedef GUID UUID;
65
66 typedef struct _BUS_HANDLER *PBUS_HANDLER;
67
68 #define KERNEL_STACK_SIZE 12288
69 #define KERNEL_LARGE_STACK_SIZE 61440
70 #define KERNEL_LARGE_STACK_COMMIT 12288
71
72 #ifdef _X86_
73
74 #define SIZE_OF_80387_REGISTERS 80
75
76 typedef struct _FLOATING_SAVE_AREA {
77 ULONG ControlWord;
78 ULONG StatusWord;
79 ULONG TagWord;
80 ULONG ErrorOffset;
81 ULONG ErrorSelector;
82 ULONG DataOffset;
83 ULONG DataSelector;
84 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
85 ULONG Cr0NpxState;
86 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
87
88 #include "pshpack4.h"
89 typedef struct _CONTEXT {
90 ULONG ContextFlags;
91 ULONG Dr0;
92 ULONG Dr1;
93 ULONG Dr2;
94 ULONG Dr3;
95 ULONG Dr6;
96 ULONG Dr7;
97 FLOATING_SAVE_AREA FloatSave;
98 ULONG SegGs;
99 ULONG SegFs;
100 ULONG SegEs;
101 ULONG SegDs;
102 ULONG Edi;
103 ULONG Esi;
104 ULONG Ebx;
105 ULONG Edx;
106 ULONG Ecx;
107 ULONG Eax;
108 ULONG Ebp;
109 ULONG Eip;
110 ULONG SegCs;
111 ULONG EFlags;
112 ULONG Esp;
113 ULONG SegSs;
114 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
115 } CONTEXT;
116 #include "poppack.h"
117
118 #endif /* _X86_ */
119
120 #ifdef _AMD64_
121
122 #if !defined(RC_INVOKED)
123
124 #define CONTEXT_AMD64 0x100000
125
126 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
127 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
128 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
129 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
130 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
131
132 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
133 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
134
135 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
136
137 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
138 #define CONTEXT_SERVICE_ACTIVE 0x10000000
139 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
140 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
141
142 #endif /* RC_INVOKED */
143
144 #endif /* _AMD64_ */
145
146 typedef enum _INTERLOCKED_RESULT {
147 ResultNegative = RESULT_NEGATIVE,
148 ResultZero = RESULT_ZERO,
149 ResultPositive = RESULT_POSITIVE
150 } INTERLOCKED_RESULT;
151
152 typedef struct _OSVERSIONINFOA {
153 ULONG dwOSVersionInfoSize;
154 ULONG dwMajorVersion;
155 ULONG dwMinorVersion;
156 ULONG dwBuildNumber;
157 ULONG dwPlatformId;
158 CHAR szCSDVersion[128];
159 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
160
161 typedef struct _OSVERSIONINFOW {
162 ULONG dwOSVersionInfoSize;
163 ULONG dwMajorVersion;
164 ULONG dwMinorVersion;
165 ULONG dwBuildNumber;
166 ULONG dwPlatformId;
167 WCHAR szCSDVersion[128];
168 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
169
170 typedef struct _OSVERSIONINFOEXA {
171 ULONG dwOSVersionInfoSize;
172 ULONG dwMajorVersion;
173 ULONG dwMinorVersion;
174 ULONG dwBuildNumber;
175 ULONG dwPlatformId;
176 CHAR szCSDVersion[128];
177 USHORT wServicePackMajor;
178 USHORT wServicePackMinor;
179 USHORT wSuiteMask;
180 UCHAR wProductType;
181 UCHAR wReserved;
182 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
183
184 typedef struct _OSVERSIONINFOEXW {
185 ULONG dwOSVersionInfoSize;
186 ULONG dwMajorVersion;
187 ULONG dwMinorVersion;
188 ULONG dwBuildNumber;
189 ULONG dwPlatformId;
190 WCHAR szCSDVersion[128];
191 USHORT wServicePackMajor;
192 USHORT wServicePackMinor;
193 USHORT wSuiteMask;
194 UCHAR wProductType;
195 UCHAR wReserved;
196 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
197
198 #ifdef UNICODE
199 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
200 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
201 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
202 typedef OSVERSIONINFOW OSVERSIONINFO;
203 typedef POSVERSIONINFOW POSVERSIONINFO;
204 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
205 #else
206 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
207 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
208 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
209 typedef OSVERSIONINFOA OSVERSIONINFO;
210 typedef POSVERSIONINFOA POSVERSIONINFO;
211 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
212 #endif /* UNICODE */
213
214 typedef struct _RTL_SPLAY_LINKS {
215 struct _RTL_SPLAY_LINKS *Parent;
216 struct _RTL_SPLAY_LINKS *LeftChild;
217 struct _RTL_SPLAY_LINKS *RightChild;
218 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
219
220 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
221
222 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
223 *CallersAddress = (PVOID)_ReturnAddress(); \
224 *CallersCaller = NULL;
225 #else
226
227 #if (NTDDI_VERSION >= NTDDI_WIN2K)
228 NTSYSAPI
229 VOID
230 NTAPI
231 RtlGetCallersAddress(
232 OUT PVOID *CallersAddress,
233 OUT PVOID *CallersCaller);
234 #endif
235
236 #endif
237
238 #if !defined(MIDL_PASS)
239
240 FORCEINLINE
241 LUID
242 NTAPI_INLINE
243 RtlConvertLongToLuid(
244 IN LONG Val)
245 {
246 LUID Luid;
247 LARGE_INTEGER Temp;
248
249 Temp.QuadPart = Val;
250 Luid.LowPart = Temp.u.LowPart;
251 Luid.HighPart = Temp.u.HighPart;
252 return Luid;
253 }
254
255 FORCEINLINE
256 LUID
257 NTAPI_INLINE
258 RtlConvertUlongToLuid(
259 IN ULONG Val)
260 {
261 LUID Luid;
262
263 Luid.LowPart = Val;
264 Luid.HighPart = 0;
265 return Luid;
266 }
267
268 #endif
269
270 #if (NTDDI_VERSION >= NTDDI_WIN2K)
271
272 NTSYSAPI
273 BOOLEAN
274 NTAPI
275 RtlPrefixUnicodeString(
276 IN PCUNICODE_STRING String1,
277 IN PCUNICODE_STRING String2,
278 IN BOOLEAN CaseInSensitive);
279
280 NTSYSAPI
281 VOID
282 NTAPI
283 RtlUpperString(
284 IN OUT PSTRING DestinationString,
285 IN const PSTRING SourceString);
286
287 NTSYSAPI
288 NTSTATUS
289 NTAPI
290 RtlUpcaseUnicodeString(
291 IN OUT PUNICODE_STRING DestinationString,
292 IN PCUNICODE_STRING SourceString,
293 IN BOOLEAN AllocateDestinationString);
294
295 NTSYSAPI
296 VOID
297 NTAPI
298 RtlMapGenericMask(
299 IN OUT PACCESS_MASK AccessMask,
300 IN PGENERIC_MAPPING GenericMapping);
301
302 NTSYSAPI
303 NTSTATUS
304 NTAPI
305 RtlVolumeDeviceToDosName(
306 IN PVOID VolumeDeviceObject,
307 OUT PUNICODE_STRING DosName);
308
309 NTSYSAPI
310 NTSTATUS
311 NTAPI
312 RtlGetVersion(
313 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
314
315 NTSYSAPI
316 NTSTATUS
317 NTAPI
318 RtlVerifyVersionInfo(
319 IN PRTL_OSVERSIONINFOEXW VersionInfo,
320 IN ULONG TypeMask,
321 IN ULONGLONG ConditionMask);
322
323 NTSYSAPI
324 LONG
325 NTAPI
326 RtlCompareString(
327 IN const PSTRING String1,
328 IN const PSTRING String2,
329 BOOLEAN CaseInSensitive);
330
331 NTSYSAPI
332 VOID
333 NTAPI
334 RtlCopyString(
335 OUT PSTRING DestinationString,
336 IN const PSTRING SourceString OPTIONAL);
337
338 NTSYSAPI
339 BOOLEAN
340 NTAPI
341 RtlEqualString(
342 IN const PSTRING String1,
343 IN const PSTRING String2,
344 IN BOOLEAN CaseInSensitive);
345
346 #endif
347
348 /* Executive Types */
349
350 #define PROTECTED_POOL 0x80000000
351
352 typedef struct _ZONE_SEGMENT_HEADER {
353 SINGLE_LIST_ENTRY SegmentList;
354 PVOID Reserved;
355 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
356
357 typedef struct _ZONE_HEADER {
358 SINGLE_LIST_ENTRY FreeList;
359 SINGLE_LIST_ENTRY SegmentList;
360 ULONG BlockSize;
361 ULONG TotalSegmentSize;
362 } ZONE_HEADER, *PZONE_HEADER;
363
364 /* Executive Functions */
365
366 /*
367 * BOOLEAN
368 * ExIsFullZone(
369 * IN PZONE_HEADER Zone)
370 */
371 #define ExIsFullZone(Zone) \
372 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
373
374 /* BOOLEAN
375 * ExIsObjectInFirstZoneSegment(
376 * IN PZONE_HEADER Zone,
377 * IN PVOID Object);
378 */
379 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
380 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
381 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
382 (Zone)->TotalSegmentSize)) )
383
384 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
385 #define ExAcquireResourceShared ExAcquireResourceSharedLite
386 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
387 #define ExDeleteResource ExDeleteResourceLite
388 #define ExInitializeResource ExInitializeResourceLite
389 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
390 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
391 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
392 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
393
394 #if (NTDDI_VERSION >= NTDDI_WIN2K)
395
396 NTKERNELAPI
397 NTSTATUS
398 NTAPI
399 ExExtendZone(
400 IN OUT PZONE_HEADER Zone,
401 IN OUT PVOID Segment,
402 IN ULONG SegmentSize);
403
404 NTKERNELAPI
405 NTSTATUS
406 NTAPI
407 ExInitializeZone(
408 OUT PZONE_HEADER Zone,
409 IN ULONG BlockSize,
410 IN OUT PVOID InitialSegment,
411 IN ULONG InitialSegmentSize);
412
413 NTKERNELAPI
414 NTSTATUS
415 NTAPI
416 ExInterlockedExtendZone(
417 IN OUT PZONE_HEADER Zone,
418 IN OUT PVOID Segment,
419 IN ULONG SegmentSize,
420 IN OUT PKSPIN_LOCK Lock);
421
422 NTKERNELAPI
423 NTSTATUS
424 NTAPI
425 ExUuidCreate(
426 OUT UUID *Uuid);
427
428 #endif
429
430 #ifndef _ARC_DDK_
431 #define _ARC_DDK_
432 typedef enum _CONFIGURATION_TYPE {
433 ArcSystem,
434 CentralProcessor,
435 FloatingPointProcessor,
436 PrimaryIcache,
437 PrimaryDcache,
438 SecondaryIcache,
439 SecondaryDcache,
440 SecondaryCache,
441 EisaAdapter,
442 TcAdapter,
443 ScsiAdapter,
444 DtiAdapter,
445 MultiFunctionAdapter,
446 DiskController,
447 TapeController,
448 CdromController,
449 WormController,
450 SerialController,
451 NetworkController,
452 DisplayController,
453 ParallelController,
454 PointerController,
455 KeyboardController,
456 AudioController,
457 OtherController,
458 DiskPeripheral,
459 FloppyDiskPeripheral,
460 TapePeripheral,
461 ModemPeripheral,
462 MonitorPeripheral,
463 PrinterPeripheral,
464 PointerPeripheral,
465 KeyboardPeripheral,
466 TerminalPeripheral,
467 OtherPeripheral,
468 LinePeripheral,
469 NetworkPeripheral,
470 SystemMemory,
471 DockingInformation,
472 RealModeIrqRoutingTable,
473 RealModePCIEnumeration,
474 MaximumType
475 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
476 #endif /* !_ARC_DDK_ */
477
478 typedef struct _CONTROLLER_OBJECT {
479 CSHORT Type;
480 CSHORT Size;
481 PVOID ControllerExtension;
482 KDEVICE_QUEUE DeviceWaitQueue;
483 ULONG Spare1;
484 LARGE_INTEGER Spare2;
485 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
486
487 typedef struct _CONFIGURATION_INFORMATION {
488 ULONG DiskCount;
489 ULONG FloppyCount;
490 ULONG CdRomCount;
491 ULONG TapeCount;
492 ULONG ScsiPortCount;
493 ULONG SerialCount;
494 ULONG ParallelCount;
495 BOOLEAN AtDiskPrimaryAddressClaimed;
496 BOOLEAN AtDiskSecondaryAddressClaimed;
497 ULONG Version;
498 ULONG MediumChangerCount;
499 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
500
501 typedef
502 NTSTATUS
503 (DDKAPI *PIO_QUERY_DEVICE_ROUTINE)(
504 IN PVOID Context,
505 IN PUNICODE_STRING PathName,
506 IN INTERFACE_TYPE BusType,
507 IN ULONG BusNumber,
508 IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
509 IN CONFIGURATION_TYPE ControllerType,
510 IN ULONG ControllerNumber,
511 IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
512 IN CONFIGURATION_TYPE PeripheralType,
513 IN ULONG PeripheralNumber,
514 IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
515
516 typedef
517 VOID
518 (DDKAPI DRIVER_REINITIALIZE)(
519 IN struct _DRIVER_OBJECT *DriverObject,
520 IN PVOID Context,
521 IN ULONG Count);
522
523 typedef DRIVER_REINITIALIZE *PDRIVER_REINITIALIZE;
524
525 /* I/O Manager Functions */
526
527 #if (NTDDI_VERSION >= NTDDI_WIN2K)
528
529 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
530 NTKERNELAPI
531 NTSTATUS
532 NTAPI
533 IoAllocateAdapterChannel(
534 IN PADAPTER_OBJECT AdapterObject,
535 IN PDEVICE_OBJECT DeviceObject,
536 IN ULONG NumberOfMapRegisters,
537 IN PDRIVER_CONTROL ExecutionRoutine,
538 IN PVOID Context);
539 #endif
540
541 //DECLSPEC_DEPRECATED_DDK
542 NTHALAPI
543 PHYSICAL_ADDRESS
544 NTAPI
545 IoMapTransfer(
546 IN PADAPTER_OBJECT AdapterObject,
547 IN PMDL Mdl,
548 IN PVOID MapRegisterBase,
549 IN PVOID CurrentVa,
550 IN OUT PULONG Length,
551 IN BOOLEAN WriteToDevice);
552
553 NTKERNELAPI
554 VOID
555 NTAPI
556 IoAllocateController(
557 IN PCONTROLLER_OBJECT ControllerObject,
558 IN PDEVICE_OBJECT DeviceObject,
559 IN PDRIVER_CONTROL ExecutionRoutine,
560 IN PVOID Context OPTIONAL);
561
562 NTKERNELAPI
563 PCONTROLLER_OBJECT
564 NTAPI
565 IoCreateController(
566 IN ULONG Size);
567
568 NTKERNELAPI
569 VOID
570 NTAPI
571 IoDeleteController(
572 IN PCONTROLLER_OBJECT ControllerObject);
573
574 NTKERNELAPI
575 VOID
576 NTAPI
577 IoFreeController(
578 IN PCONTROLLER_OBJECT ControllerObject);
579
580 NTKERNELAPI
581 PCONFIGURATION_INFORMATION
582 NTAPI
583 IoGetConfigurationInformation(
584 VOID);
585
586 NTKERNELAPI
587 PDEVICE_OBJECT
588 NTAPI
589 IoGetDeviceToVerify(
590 IN PETHREAD Thread);
591
592 NTKERNELAPI
593 VOID
594 NTAPI
595 IoCancelFileOpen(
596 IN PDEVICE_OBJECT DeviceObject,
597 IN PFILE_OBJECT FileObject);
598
599 NTKERNELAPI
600 PGENERIC_MAPPING
601 NTAPI
602 IoGetFileObjectGenericMapping(
603 VOID);
604
605 NTKERNELAPI
606 PIRP
607 NTAPI
608 IoMakeAssociatedIrp(
609 IN PIRP Irp,
610 IN CCHAR StackSize);
611
612 NTKERNELAPI
613 NTSTATUS
614 NTAPI
615 IoQueryDeviceDescription(
616 IN PINTERFACE_TYPE BusType OPTIONAL,
617 IN PULONG BusNumber OPTIONAL,
618 IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
619 IN PULONG ControllerNumber OPTIONAL,
620 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
621 IN PULONG PeripheralNumber OPTIONAL,
622 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
623 IN OUT PVOID Context OPTIONAL);
624
625 NTKERNELAPI
626 VOID
627 NTAPI
628 IoRaiseHardError(
629 IN PIRP Irp,
630 IN PVPB Vpb OPTIONAL,
631 IN PDEVICE_OBJECT RealDeviceObject);
632
633 NTKERNELAPI
634 BOOLEAN
635 NTAPI
636 IoRaiseInformationalHardError(
637 IN NTSTATUS ErrorStatus,
638 IN PUNICODE_STRING String OPTIONAL,
639 IN PKTHREAD Thread OPTIONAL);
640
641 NTKERNELAPI
642 VOID
643 NTAPI
644 IoRegisterBootDriverReinitialization(
645 IN PDRIVER_OBJECT DriverObject,
646 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
647 IN PVOID Context OPTIONAL);
648
649 NTKERNELAPI
650 VOID
651 NTAPI
652 IoRegisterDriverReinitialization(
653 IN PDRIVER_OBJECT DriverObject,
654 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
655 IN PVOID Context OPTIONAL);
656
657 NTKERNELAPI
658 NTSTATUS
659 NTAPI
660 IoAttachDeviceByPointer(
661 IN PDEVICE_OBJECT SourceDevice,
662 IN PDEVICE_OBJECT TargetDevice);
663
664 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
665
666
667 /* Memory Manager Types */
668
669 typedef struct _PHYSICAL_MEMORY_RANGE {
670 PHYSICAL_ADDRESS BaseAddress;
671 LARGE_INTEGER NumberOfBytes;
672 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
673
674 /* Memory Manager Functions */
675
676 #if (NTDDI_VERSION >= NTDDI_WIN2K)
677
678 NTKERNELAPI
679 PPHYSICAL_MEMORY_RANGE
680 NTAPI
681 MmGetPhysicalMemoryRanges(
682 VOID);
683
684 NTKERNELAPI
685 PHYSICAL_ADDRESS
686 NTAPI
687 MmGetPhysicalAddress(
688 IN PVOID BaseAddress);
689
690 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
691
692 /* Windows Device Driver Kit */
693 #include "winddk.h"
694
695 #ifdef __cplusplus
696 }
697 #endif
698
699
700 #endif /* _NTDDK_ */