Synchronize up to trunk's revision r57784.
[reactos.git] / include / xdk / mmfuncs.h
1 /******************************************************************************
2 * Memory manager Functions *
3 ******************************************************************************/
4 $if (_WDMDDK_)
5 /* Alignment Macros */
6 #define ALIGN_DOWN_BY(size, align) \
7 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
8
9 #define ALIGN_UP_BY(size, align) \
10 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
11
12 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
13 ((PVOID)ALIGN_DOWN_BY(ptr, align))
14
15 #define ALIGN_UP_POINTER_BY(ptr, align) \
16 ((PVOID)ALIGN_UP_BY(ptr, align))
17
18 #define ALIGN_DOWN(size, type) \
19 ALIGN_DOWN_BY(size, sizeof(type))
20
21 #define ALIGN_UP(size, type) \
22 ALIGN_UP_BY(size, sizeof(type))
23
24 #define ALIGN_DOWN_POINTER(ptr, type) \
25 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
26
27 #define ALIGN_UP_POINTER(ptr, type) \
28 ALIGN_UP_POINTER_BY(ptr, sizeof(type))
29
30 #ifndef FIELD_OFFSET
31 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
32 #endif
33
34 #ifndef FIELD_SIZE
35 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
36 #endif
37
38 #define POOL_TAGGING 1
39
40 #if DBG
41 #define IF_DEBUG if (TRUE)
42 #else
43 #define IF_DEBUG if (FALSE)
44 #endif /* DBG */
45
46 /* ULONG
47 * BYTE_OFFSET(
48 * IN PVOID Va)
49 */
50 #define BYTE_OFFSET(Va) \
51 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
52
53 /* ULONG
54 * BYTES_TO_PAGES(
55 * IN ULONG Size)
56 */
57 #define BYTES_TO_PAGES(Size) \
58 (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT)
59
60 /* PVOID
61 * PAGE_ALIGN(
62 * IN PVOID Va)
63 */
64 #define PAGE_ALIGN(Va) \
65 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
66
67 /* ULONG_PTR
68 * ROUND_TO_PAGES(
69 * IN ULONG_PTR Size)
70 */
71 #define ROUND_TO_PAGES(Size) \
72 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
73
74 /* ULONG
75 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
76 * IN PVOID Va,
77 * IN ULONG Size)
78 */
79 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
80 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
81 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
82
83 #define COMPUTE_PAGES_SPANNED(Va, Size) \
84 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
85
86 /*
87 * ULONG
88 * MmGetMdlByteCount(
89 * IN PMDL Mdl)
90 */
91 #define MmGetMdlByteCount(_Mdl) \
92 ((_Mdl)->ByteCount)
93
94 /*
95 * ULONG
96 * MmGetMdlByteOffset(
97 * IN PMDL Mdl)
98 */
99 #define MmGetMdlByteOffset(_Mdl) \
100 ((_Mdl)->ByteOffset)
101
102 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
103
104 /*
105 * PPFN_NUMBER
106 * MmGetMdlPfnArray(
107 * IN PMDL Mdl)
108 */
109 #define MmGetMdlPfnArray(_Mdl) \
110 ((PPFN_NUMBER) ((_Mdl) + 1))
111
112 /*
113 * PVOID
114 * MmGetMdlVirtualAddress(
115 * IN PMDL Mdl)
116 */
117 #define MmGetMdlVirtualAddress(_Mdl) \
118 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
119
120 #define MmGetProcedureAddress(Address) (Address)
121 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
122
123 /* PVOID MmGetSystemAddressForMdl(
124 * IN PMDL Mdl);
125 */
126 #define MmGetSystemAddressForMdl(Mdl) \
127 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
128 MDL_SOURCE_IS_NONPAGED_POOL)) ? \
129 ((Mdl)->MappedSystemVa) : \
130 (MmMapLockedPages((Mdl), KernelMode)))
131
132 /* PVOID
133 * MmGetSystemAddressForMdlSafe(
134 * IN PMDL Mdl,
135 * IN MM_PAGE_PRIORITY Priority)
136 */
137 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
138 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
139 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
140 (_Mdl)->MappedSystemVa : \
141 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
142 KernelMode, MmCached, NULL, FALSE, (_Priority)))
143
144 /*
145 * VOID
146 * MmInitializeMdl(
147 * IN PMDL MemoryDescriptorList,
148 * IN PVOID BaseVa,
149 * IN SIZE_T Length)
150 */
151 #define MmInitializeMdl(_MemoryDescriptorList, \
152 _BaseVa, \
153 _Length) \
154 { \
155 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
156 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
157 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
158 (_MemoryDescriptorList)->MdlFlags = 0; \
159 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
160 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
161 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
162 }
163
164 /*
165 * VOID
166 * MmPrepareMdlForReuse(
167 * IN PMDL Mdl)
168 */
169 #define MmPrepareMdlForReuse(_Mdl) \
170 { \
171 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
172 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
173 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
174 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
175 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
176 } \
177 }
178 $endif (_WDMDDK_)
179 $if (_NTIFS_)
180
181 FORCEINLINE
182 ULONG
183 HEAP_MAKE_TAG_FLAGS(
184 _In_ ULONG TagBase,
185 _In_ ULONG Tag)
186 {
187 //__assume_bound(TagBase); // FIXME
188 return ((ULONG)((TagBase) + ((Tag) << HEAP_TAG_SHIFT)));
189 }
190 $endif (_NTIFS_)
191
192 #if (NTDDI_VERSION >= NTDDI_WIN2K)
193 $if (_WDMDDK_)
194 _Must_inspect_result_
195 _IRQL_requires_max_(DISPATCH_LEVEL)
196 _When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes))
197 NTKERNELAPI
198 PVOID
199 NTAPI
200 MmAllocateContiguousMemory(
201 _In_ SIZE_T NumberOfBytes,
202 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress);
203
204 _Must_inspect_result_
205 _IRQL_requires_max_(DISPATCH_LEVEL)
206 _When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes))
207 NTKERNELAPI
208 PVOID
209 NTAPI
210 MmAllocateContiguousMemorySpecifyCache(
211 _In_ SIZE_T NumberOfBytes,
212 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress,
213 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress,
214 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple,
215 _In_ MEMORY_CACHING_TYPE CacheType);
216
217 _Must_inspect_result_
218 _IRQL_requires_max_(DISPATCH_LEVEL)
219 NTKERNELAPI
220 PMDL
221 NTAPI
222 MmAllocatePagesForMdl(
223 _In_ PHYSICAL_ADDRESS LowAddress,
224 _In_ PHYSICAL_ADDRESS HighAddress,
225 _In_ PHYSICAL_ADDRESS SkipBytes,
226 _In_ SIZE_T TotalBytes);
227
228 _IRQL_requires_max_(DISPATCH_LEVEL)
229 NTKERNELAPI
230 VOID
231 NTAPI
232 MmBuildMdlForNonPagedPool(
233 _Inout_ PMDLX MemoryDescriptorList);
234
235 //DECLSPEC_DEPRECATED_DDK
236 NTKERNELAPI
237 PMDL
238 NTAPI
239 MmCreateMdl(
240 _Out_writes_bytes_opt_ (sizeof (MDL) + (sizeof (PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES (Base, Length)))
241 PMDL MemoryDescriptorList,
242 _In_reads_bytes_opt_ (Length) PVOID Base,
243 _In_ SIZE_T Length);
244
245 _IRQL_requires_max_(DISPATCH_LEVEL)
246 NTKERNELAPI
247 VOID
248 NTAPI
249 MmFreeContiguousMemory(
250 _In_ PVOID BaseAddress);
251
252 _IRQL_requires_max_ (DISPATCH_LEVEL)
253 NTKERNELAPI
254 VOID
255 NTAPI
256 MmFreeContiguousMemorySpecifyCache(
257 _In_reads_bytes_ (NumberOfBytes) PVOID BaseAddress,
258 _In_ SIZE_T NumberOfBytes,
259 _In_ MEMORY_CACHING_TYPE CacheType);
260
261 _IRQL_requires_max_(DISPATCH_LEVEL)
262 NTKERNELAPI
263 VOID
264 NTAPI
265 MmFreePagesFromMdl(
266 _Inout_ PMDLX MemoryDescriptorList);
267
268 _IRQL_requires_max_(PASSIVE_LEVEL)
269 NTKERNELAPI
270 PVOID
271 NTAPI
272 MmGetSystemRoutineAddress(
273 _In_ PUNICODE_STRING SystemRoutineName);
274
275 NTKERNELAPI
276 LOGICAL
277 NTAPI
278 MmIsDriverVerifying(
279 _In_ struct _DRIVER_OBJECT *DriverObject);
280
281 _Must_inspect_result_
282 _IRQL_requires_max_(APC_LEVEL)
283 NTKERNELAPI
284 PVOID
285 NTAPI
286 MmLockPagableDataSection(
287 _In_ PVOID AddressWithinSection);
288
289 _Must_inspect_result_
290 _IRQL_requires_max_(DISPATCH_LEVEL)
291 _Out_writes_bytes_opt_ (NumberOfBytes)
292 NTKERNELAPI
293 PVOID
294 NTAPI
295 MmMapIoSpace(
296 _In_ PHYSICAL_ADDRESS PhysicalAddress,
297 _In_ SIZE_T NumberOfBytes,
298 _In_ MEMORY_CACHING_TYPE CacheType);
299
300 _Must_inspect_result_
301 _When_(AccessMode==KernelMode, _IRQL_requires_max_(DISPATCH_LEVEL))
302 _When_(AccessMode==UserMode, _Maybe_raises_SEH_exception_ _IRQL_requires_max_(APC_LEVEL))
303 NTKERNELAPI
304 PVOID
305 NTAPI
306 MmMapLockedPages(
307 _Inout_ PMDL MemoryDescriptorList,
308 _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst)
309 KPROCESSOR_MODE AccessMode);
310
311 _Post_writable_byte_size_(MemoryDescriptorList->ByteCount)
312 _When_(AccessMode==KernelMode, _IRQL_requires_max_(DISPATCH_LEVEL))
313 _When_(AccessMode==UserMode, _Maybe_raises_SEH_exception_ _IRQL_requires_max_(APC_LEVEL) _Post_notnull_)
314 _At_(MemoryDescriptorList->MappedSystemVa, _Post_writable_byte_size_(MemoryDescriptorList->ByteCount))
315 _Must_inspect_result_
316 _Success_(return != NULL)
317 NTKERNELAPI
318 PVOID
319 NTAPI
320 MmMapLockedPagesSpecifyCache(
321 _Inout_ PMDLX MemoryDescriptorList,
322 _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst)
323 KPROCESSOR_MODE AccessMode,
324 _In_ __drv_strictTypeMatch(__drv_typeCond) MEMORY_CACHING_TYPE CacheType,
325 _In_opt_ PVOID BaseAddress,
326 _In_ ULONG BugCheckOnFailure,
327 _In_ MM_PAGE_PRIORITY Priority);
328
329 _IRQL_requires_max_(APC_LEVEL)
330 NTKERNELAPI
331 PVOID
332 NTAPI
333 MmPageEntireDriver(
334 _In_ PVOID AddressWithinSection);
335
336 _IRQL_requires_max_(DISPATCH_LEVEL)
337 _At_(MemoryDescriptorList->StartVa + MemoryDescriptorList->ByteOffset,
338 _Field_size_bytes_opt_(MemoryDescriptorList->ByteCount))
339 NTKERNELAPI
340 VOID
341 NTAPI
342 MmProbeAndLockPages(
343 _Inout_ PMDLX MemoryDescriptorList,
344 _In_ KPROCESSOR_MODE AccessMode,
345 _In_ LOCK_OPERATION Operation);
346
347 NTKERNELAPI
348 MM_SYSTEMSIZE
349 NTAPI
350 MmQuerySystemSize(VOID);
351
352 _IRQL_requires_max_(APC_LEVEL)
353 NTKERNELAPI
354 VOID
355 NTAPI
356 MmResetDriverPaging(
357 _In_ PVOID AddressWithinSection);
358
359 NTKERNELAPI
360 SIZE_T
361 NTAPI
362 MmSizeOfMdl(
363 _In_reads_bytes_opt_ (Length) PVOID Base,
364 _In_ SIZE_T Length);
365
366 _IRQL_requires_max_(DISPATCH_LEVEL)
367 NTKERNELAPI
368 VOID
369 NTAPI
370 MmUnlockPagableImageSection(
371 _In_ PVOID ImageSectionHandle);
372
373 _IRQL_requires_max_(DISPATCH_LEVEL)
374 NTKERNELAPI
375 VOID
376 NTAPI
377 MmUnlockPages(
378 _Inout_ PMDLX MemoryDescriptorList);
379
380 _IRQL_requires_max_(DISPATCH_LEVEL)
381 NTKERNELAPI
382 VOID
383 NTAPI
384 MmUnmapIoSpace(
385 _In_reads_bytes_ (NumberOfBytes) PVOID BaseAddress,
386 _In_ SIZE_T NumberOfBytes);
387
388 _IRQL_requires_max_ (APC_LEVEL)
389 NTKERNELAPI
390 VOID
391 NTAPI
392 MmProbeAndLockProcessPages(
393 _Inout_ PMDL MemoryDescriptorList,
394 _In_ PEPROCESS Process,
395 _In_ KPROCESSOR_MODE AccessMode,
396 _In_ LOCK_OPERATION Operation);
397
398 _IRQL_requires_max_(DISPATCH_LEVEL)
399 NTKERNELAPI
400 VOID
401 NTAPI
402 MmUnmapLockedPages(
403 _In_ PVOID BaseAddress,
404 _Inout_ PMDL MemoryDescriptorList);
405
406 _Must_inspect_result_
407 _IRQL_requires_max_(DISPATCH_LEVEL)
408 _When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes))
409 NTKERNELAPI
410 PVOID
411 NTAPI
412 MmAllocateContiguousMemorySpecifyCacheNode(
413 _In_ SIZE_T NumberOfBytes,
414 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress,
415 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress,
416 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple,
417 _In_ MEMORY_CACHING_TYPE CacheType,
418 _In_ NODE_REQUIREMENT PreferredNode);
419 $endif (_WDMDDK_)
420 $if (_NTDDK_)
421
422 _IRQL_requires_max_ (PASSIVE_LEVEL)
423 NTKERNELAPI
424 PPHYSICAL_MEMORY_RANGE
425 NTAPI
426 MmGetPhysicalMemoryRanges(VOID);
427
428 NTKERNELAPI
429 PHYSICAL_ADDRESS
430 NTAPI
431 MmGetPhysicalAddress(
432 _In_ PVOID BaseAddress);
433
434 NTKERNELAPI
435 BOOLEAN
436 NTAPI
437 MmIsNonPagedSystemAddressValid(
438 _In_ PVOID VirtualAddress);
439
440 _Must_inspect_result_
441 _IRQL_requires_max_(APC_LEVEL)
442 _Out_writes_bytes_opt_(NumberOfBytes)
443 NTKERNELAPI
444 PVOID
445 NTAPI
446 MmAllocateNonCachedMemory(
447 _In_ SIZE_T NumberOfBytes);
448
449 _IRQL_requires_max_(APC_LEVEL)
450 NTKERNELAPI
451 VOID
452 NTAPI
453 MmFreeNonCachedMemory(
454 _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress,
455 _In_ SIZE_T NumberOfBytes);
456
457 NTKERNELAPI
458 PVOID
459 NTAPI
460 MmGetVirtualForPhysical(
461 _In_ PHYSICAL_ADDRESS PhysicalAddress);
462
463 _Must_inspect_result_
464 _IRQL_requires_max_(APC_LEVEL)
465 NTKERNELAPI
466 NTSTATUS
467 NTAPI
468 MmMapUserAddressesToPage(
469 _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress,
470 _In_ SIZE_T NumberOfBytes,
471 _In_ PVOID PageAddress);
472
473 _Must_inspect_result_
474 _IRQL_requires_max_(APC_LEVEL)
475 _Out_writes_bytes_opt_(NumberOfBytes)
476 NTKERNELAPI
477 PVOID
478 NTAPI
479 MmMapVideoDisplay(
480 _In_ PHYSICAL_ADDRESS PhysicalAddress,
481 _In_ SIZE_T NumberOfBytes,
482 _In_ MEMORY_CACHING_TYPE CacheType);
483
484 _Must_inspect_result_
485 _IRQL_requires_max_(APC_LEVEL)
486 NTKERNELAPI
487 NTSTATUS
488 NTAPI
489 MmMapViewInSessionSpace(
490 _In_ PVOID Section,
491 _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase,
492 _Inout_ PSIZE_T ViewSize);
493
494 _Must_inspect_result_
495 _IRQL_requires_max_(APC_LEVEL)
496 NTKERNELAPI
497 NTSTATUS
498 NTAPI
499 MmMapViewInSystemSpace(
500 _In_ PVOID Section,
501 _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase,
502 _Inout_ PSIZE_T ViewSize);
503
504 _IRQL_requires_max_(DISPATCH_LEVEL)
505 NTKERNELAPI
506 BOOLEAN
507 NTAPI
508 MmIsAddressValid(
509 _In_ PVOID VirtualAddress);
510
511 NTKERNELAPI
512 BOOLEAN
513 NTAPI
514 MmIsThisAnNtAsSystem(VOID);
515
516 _IRQL_requires_max_(APC_LEVEL)
517 NTKERNELAPI
518 VOID
519 NTAPI
520 MmLockPagableSectionByHandle(
521 _In_ PVOID ImageSectionHandle);
522
523 _IRQL_requires_max_(APC_LEVEL)
524 NTKERNELAPI
525 NTSTATUS
526 NTAPI
527 MmUnmapViewInSessionSpace(
528 _In_ PVOID MappedBase);
529
530 _IRQL_requires_max_(APC_LEVEL)
531 NTKERNELAPI
532 NTSTATUS
533 NTAPI
534 MmUnmapViewInSystemSpace(
535 _In_ PVOID MappedBase);
536
537 _IRQL_requires_max_(APC_LEVEL)
538 NTKERNELAPI
539 VOID
540 NTAPI
541 MmUnsecureVirtualMemory(
542 _In_ HANDLE SecureHandle);
543
544 _IRQL_requires_max_ (PASSIVE_LEVEL)
545 NTKERNELAPI
546 NTSTATUS
547 NTAPI
548 MmRemovePhysicalMemory(
549 _In_ PPHYSICAL_ADDRESS StartAddress,
550 _Inout_ PLARGE_INTEGER NumberOfBytes);
551
552 _Must_inspect_result_
553 _IRQL_requires_max_(APC_LEVEL)
554 NTKERNELAPI
555 HANDLE
556 NTAPI
557 MmSecureVirtualMemory(
558 __in_data_source(USER_MODE) _In_reads_bytes_ (Size) PVOID Address,
559 _In_ __in_data_source(USER_MODE) SIZE_T Size,
560 _In_ ULONG ProbeMode);
561
562 _IRQL_requires_max_(APC_LEVEL)
563 NTKERNELAPI
564 VOID
565 NTAPI
566 MmUnmapVideoDisplay(
567 _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress,
568 _In_ SIZE_T NumberOfBytes);
569
570 _IRQL_requires_max_ (PASSIVE_LEVEL)
571 NTKERNELAPI
572 NTSTATUS
573 NTAPI
574 MmAddPhysicalMemory(
575 _In_ PPHYSICAL_ADDRESS StartAddress,
576 _Inout_ PLARGE_INTEGER NumberOfBytes);
577 $endif (_NTDDK_)
578 $if (_NTIFS_)
579
580 NTKERNELAPI
581 BOOLEAN
582 NTAPI
583 MmIsRecursiveIoFault(VOID);
584
585 _IRQL_requires_max_ (APC_LEVEL)
586 NTKERNELAPI
587 BOOLEAN
588 NTAPI
589 MmForceSectionClosed(
590 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
591 _In_ BOOLEAN DelayClose);
592
593 _IRQL_requires_max_ (APC_LEVEL)
594 NTKERNELAPI
595 BOOLEAN
596 NTAPI
597 MmFlushImageSection(
598 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
599 _In_ MMFLUSH_TYPE FlushType);
600
601 _IRQL_requires_max_ (APC_LEVEL)
602 NTKERNELAPI
603 BOOLEAN
604 NTAPI
605 MmCanFileBeTruncated(
606 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
607 _In_opt_ PLARGE_INTEGER NewFileSize);
608
609 _IRQL_requires_max_ (APC_LEVEL)
610 NTKERNELAPI
611 BOOLEAN
612 NTAPI
613 MmSetAddressRangeModified(
614 _In_reads_bytes_ (Length) PVOID Address,
615 _In_ SIZE_T Length);
616 $endif (_NTIFS_)
617
618 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
619
620 $if (_WDMDDK_ || _NTIFS_)
621 #if (NTDDI_VERSION >= NTDDI_WINXP)
622 $endif (_WDMDDK_ || _NTIFS_)
623
624 $if (_WDMDDK_)
625 _IRQL_requires_max_(DISPATCH_LEVEL)
626 NTKERNELAPI
627 NTSTATUS
628 NTAPI
629 MmAdvanceMdl(
630 _Inout_ PMDLX Mdl,
631 _In_ ULONG NumberOfBytes);
632
633 _Must_inspect_result_
634 _IRQL_requires_max_(APC_LEVEL)
635 _When_ (return != NULL, _Out_writes_bytes_opt_ (NumberOfBytes))
636 NTKERNELAPI
637 PVOID
638 NTAPI
639 MmAllocateMappingAddress(
640 _In_ SIZE_T NumberOfBytes,
641 _In_ ULONG PoolTag);
642
643 _IRQL_requires_max_(APC_LEVEL)
644 NTKERNELAPI
645 VOID
646 NTAPI
647 MmFreeMappingAddress(
648 _In_ PVOID BaseAddress,
649 _In_ ULONG PoolTag);
650
651 _IRQL_requires_max_ (APC_LEVEL)
652 NTKERNELAPI
653 NTSTATUS
654 NTAPI
655 MmIsVerifierEnabled(
656 _Out_ PULONG VerifierFlags);
657
658 _Post_writable_byte_size_(MemoryDescriptorList->ByteCount)
659 _IRQL_requires_max_(DISPATCH_LEVEL)
660 _At_(MemoryDescriptorList->MappedSystemVa + MemoryDescriptorList->ByteOffset,
661 _Post_writable_byte_size_(MemoryDescriptorList->ByteCount))
662 _Must_inspect_result_
663 _Success_(return != NULL)
664 NTKERNELAPI
665 PVOID
666 NTAPI
667 MmMapLockedPagesWithReservedMapping(
668 _In_ PVOID MappingAddress,
669 _In_ ULONG PoolTag,
670 _Inout_ PMDLX MemoryDescriptorList,
671 _In_ __drv_strictTypeMatch(__drv_typeCond)
672 MEMORY_CACHING_TYPE CacheType);
673
674 _Must_inspect_result_
675 _IRQL_requires_max_(DISPATCH_LEVEL)
676 NTKERNELAPI
677 NTSTATUS
678 NTAPI
679 MmProtectMdlSystemAddress(
680 _In_ PMDLX MemoryDescriptorList,
681 _In_ ULONG NewProtect);
682
683 _IRQL_requires_max_(DISPATCH_LEVEL)
684 NTKERNELAPI
685 VOID
686 NTAPI
687 MmUnmapReservedMapping(
688 _In_ PVOID BaseAddress,
689 _In_ ULONG PoolTag,
690 _Inout_ PMDLX MemoryDescriptorList);
691
692 _IRQL_requires_max_ (APC_LEVEL)
693 NTKERNELAPI
694 NTSTATUS
695 NTAPI
696 MmAddVerifierThunks(
697 _In_reads_bytes_ (ThunkBufferSize) PVOID ThunkBuffer,
698 _In_ ULONG ThunkBufferSize);
699 $endif (_WDMDDK_)
700 $if (_NTIFS_)
701
702 _IRQL_requires_max_ (PASSIVE_LEVEL)
703 NTKERNELAPI
704 NTSTATUS
705 NTAPI
706 MmPrefetchPages(
707 _In_ ULONG NumberOfLists,
708 _In_reads_ (NumberOfLists) PREAD_LIST *ReadLists);
709 $endif (_NTIFS_)
710
711 $if (_WDMDDK_ || _NTIFS_)
712 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
713 $endif (_WDMDDK_ || _NTIFS_)
714 $if (_WDMDDK_ || _NTDDK_)
715 #if (NTDDI_VERSION >= NTDDI_WS03)
716 $endif (_WDMDDK_ || _NTDDK_)
717 $if (_WDMDDK_)
718 _IRQL_requires_max_ (DISPATCH_LEVEL)
719 NTKERNELAPI
720 LOGICAL
721 NTAPI
722 MmIsIoSpaceActive(
723 _In_ PHYSICAL_ADDRESS StartAddress,
724 _In_ SIZE_T NumberOfBytes);
725 $endif (_WDMDDK_)
726
727 $if (_NTDDK_)
728 _Must_inspect_result_
729 _IRQL_requires_max_(PASSIVE_LEVEL)
730 NTKERNELAPI
731 NTSTATUS
732 NTAPI
733 MmCreateMirror(VOID);
734 $endif (_NTDDK_)
735 $if (_WDMDDK_ || _NTDDK_)
736 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
737 $endif (_WDMDDK_ || _NTDDK_)
738 $if (_WDMDDK_)
739 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
740 _Must_inspect_result_
741 _IRQL_requires_max_ (DISPATCH_LEVEL)
742 NTKERNELAPI
743 PMDL
744 NTAPI
745 MmAllocatePagesForMdlEx(
746 _In_ PHYSICAL_ADDRESS LowAddress,
747 _In_ PHYSICAL_ADDRESS HighAddress,
748 _In_ PHYSICAL_ADDRESS SkipBytes,
749 _In_ SIZE_T TotalBytes,
750 _In_ MEMORY_CACHING_TYPE CacheType,
751 _In_ ULONG Flags);
752 #endif
753 $endif (_WDMDDK_)
754
755 #if (NTDDI_VERSION >= NTDDI_VISTA)
756 $if (_WDMDDK_)
757 _IRQL_requires_max_ (APC_LEVEL)
758 NTKERNELAPI
759 LOGICAL
760 NTAPI
761 MmIsDriverVerifyingByAddress(
762 _In_ PVOID AddressWithinSection);
763 $endif (_WDMDDK_)
764 $if (_NTDDK_)
765 _Must_inspect_result_
766 _IRQL_requires_max_(APC_LEVEL)
767 NTSTATUS
768 NTAPI
769 MmRotatePhysicalView(
770 _In_ PVOID VirtualAddress,
771 _Inout_ PSIZE_T NumberOfBytes,
772 _In_opt_ PMDLX NewMdl,
773 _In_ MM_ROTATE_DIRECTION Direction,
774 _In_ PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction,
775 _In_opt_ PVOID Context);
776 $endif (_NTDDK_)
777 $if (_NTIFS_)
778
779 _IRQL_requires_max_ (APC_LEVEL)
780 NTKERNELAPI
781 ULONG
782 NTAPI
783 MmDoesFileHaveUserWritableReferences(
784 _In_ PSECTION_OBJECT_POINTERS SectionPointer);
785 $endif (_NTIFS_)
786 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
787