[NDK]
[reactos.git] / reactos / 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 NTKERNELAPI
195 PVOID
196 NTAPI
197 MmAllocateContiguousMemory(
198 IN SIZE_T NumberOfBytes,
199 IN PHYSICAL_ADDRESS HighestAcceptableAddress);
200
201 NTKERNELAPI
202 PVOID
203 NTAPI
204 MmAllocateContiguousMemorySpecifyCache(
205 IN SIZE_T NumberOfBytes,
206 IN PHYSICAL_ADDRESS LowestAcceptableAddress,
207 IN PHYSICAL_ADDRESS HighestAcceptableAddress,
208 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
209 IN MEMORY_CACHING_TYPE CacheType);
210
211 NTKERNELAPI
212 PMDL
213 NTAPI
214 MmAllocatePagesForMdl(
215 IN PHYSICAL_ADDRESS LowAddress,
216 IN PHYSICAL_ADDRESS HighAddress,
217 IN PHYSICAL_ADDRESS SkipBytes,
218 IN SIZE_T TotalBytes);
219
220 NTKERNELAPI
221 VOID
222 NTAPI
223 MmBuildMdlForNonPagedPool(
224 IN OUT PMDLX MemoryDescriptorList);
225
226 //DECLSPEC_DEPRECATED_DDK
227 NTKERNELAPI
228 PMDL
229 NTAPI
230 MmCreateMdl(
231 IN PMDL MemoryDescriptorList OPTIONAL,
232 IN PVOID Base,
233 IN SIZE_T Length);
234
235 NTKERNELAPI
236 VOID
237 NTAPI
238 MmFreeContiguousMemory(
239 IN PVOID BaseAddress);
240
241 NTKERNELAPI
242 VOID
243 NTAPI
244 MmFreeContiguousMemorySpecifyCache(
245 IN PVOID BaseAddress,
246 IN SIZE_T NumberOfBytes,
247 IN MEMORY_CACHING_TYPE CacheType);
248
249 NTKERNELAPI
250 VOID
251 NTAPI
252 MmFreePagesFromMdl(
253 IN PMDLX MemoryDescriptorList);
254
255 NTKERNELAPI
256 PVOID
257 NTAPI
258 MmGetSystemRoutineAddress(
259 IN PUNICODE_STRING SystemRoutineName);
260
261 NTKERNELAPI
262 LOGICAL
263 NTAPI
264 MmIsDriverVerifying(
265 IN struct _DRIVER_OBJECT *DriverObject);
266
267 NTKERNELAPI
268 PVOID
269 NTAPI
270 MmLockPagableDataSection(
271 IN PVOID AddressWithinSection);
272
273 NTKERNELAPI
274 PVOID
275 NTAPI
276 MmMapIoSpace(
277 IN PHYSICAL_ADDRESS PhysicalAddress,
278 IN SIZE_T NumberOfBytes,
279 IN MEMORY_CACHING_TYPE CacheEnable);
280
281 NTKERNELAPI
282 PVOID
283 NTAPI
284 MmMapLockedPages(
285 IN PMDL MemoryDescriptorList,
286 IN KPROCESSOR_MODE AccessMode);
287
288 NTKERNELAPI
289 PVOID
290 NTAPI
291 MmMapLockedPagesSpecifyCache(
292 IN PMDLX MemoryDescriptorList,
293 IN KPROCESSOR_MODE AccessMode,
294 IN MEMORY_CACHING_TYPE CacheType,
295 IN PVOID BaseAddress OPTIONAL,
296 IN ULONG BugCheckOnFailure,
297 IN MM_PAGE_PRIORITY Priority);
298
299 NTKERNELAPI
300 PVOID
301 NTAPI
302 MmPageEntireDriver(
303 IN PVOID AddressWithinSection);
304
305 NTKERNELAPI
306 VOID
307 NTAPI
308 MmProbeAndLockPages(
309 IN OUT PMDL MemoryDescriptorList,
310 IN KPROCESSOR_MODE AccessMode,
311 IN LOCK_OPERATION Operation);
312
313 NTKERNELAPI
314 MM_SYSTEMSIZE
315 NTAPI
316 MmQuerySystemSize(VOID);
317
318 NTKERNELAPI
319 VOID
320 NTAPI
321 MmResetDriverPaging(
322 IN PVOID AddressWithinSection);
323
324 NTKERNELAPI
325 SIZE_T
326 NTAPI
327 MmSizeOfMdl(
328 IN PVOID Base,
329 IN SIZE_T Length);
330
331 NTKERNELAPI
332 VOID
333 NTAPI
334 MmUnlockPagableImageSection(
335 IN PVOID ImageSectionHandle);
336
337 NTKERNELAPI
338 VOID
339 NTAPI
340 MmUnlockPages(
341 IN OUT PMDL MemoryDescriptorList);
342
343 NTKERNELAPI
344 VOID
345 NTAPI
346 MmUnmapIoSpace(
347 IN PVOID BaseAddress,
348 IN SIZE_T NumberOfBytes);
349
350 NTKERNELAPI
351 VOID
352 NTAPI
353 MmProbeAndLockProcessPages(
354 IN OUT PMDL MemoryDescriptorList,
355 IN PEPROCESS Process,
356 IN KPROCESSOR_MODE AccessMode,
357 IN LOCK_OPERATION Operation);
358
359 NTKERNELAPI
360 VOID
361 NTAPI
362 MmUnmapLockedPages(
363 IN PVOID BaseAddress,
364 IN PMDL MemoryDescriptorList);
365
366 NTKERNELAPI
367 PVOID
368 NTAPI
369 MmAllocateContiguousMemorySpecifyCacheNode(
370 IN SIZE_T NumberOfBytes,
371 IN PHYSICAL_ADDRESS LowestAcceptableAddress,
372 IN PHYSICAL_ADDRESS HighestAcceptableAddress,
373 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
374 IN MEMORY_CACHING_TYPE CacheType,
375 IN NODE_REQUIREMENT PreferredNode);
376 $endif (_WDMDDK_)
377 $if (_NTDDK_)
378
379 NTKERNELAPI
380 PPHYSICAL_MEMORY_RANGE
381 NTAPI
382 MmGetPhysicalMemoryRanges(VOID);
383
384 NTKERNELAPI
385 PHYSICAL_ADDRESS
386 NTAPI
387 MmGetPhysicalAddress(
388 IN PVOID BaseAddress);
389
390 NTKERNELAPI
391 BOOLEAN
392 NTAPI
393 MmIsNonPagedSystemAddressValid(
394 IN PVOID VirtualAddress);
395
396 NTKERNELAPI
397 PVOID
398 NTAPI
399 MmAllocateNonCachedMemory(
400 IN SIZE_T NumberOfBytes);
401
402 NTKERNELAPI
403 VOID
404 NTAPI
405 MmFreeNonCachedMemory(
406 IN PVOID BaseAddress,
407 IN SIZE_T NumberOfBytes);
408
409 NTKERNELAPI
410 PVOID
411 NTAPI
412 MmGetVirtualForPhysical(
413 IN PHYSICAL_ADDRESS PhysicalAddress);
414
415 NTKERNELAPI
416 NTSTATUS
417 NTAPI
418 MmMapUserAddressesToPage(
419 IN PVOID BaseAddress,
420 IN SIZE_T NumberOfBytes,
421 IN PVOID PageAddress);
422
423 NTKERNELAPI
424 PVOID
425 NTAPI
426 MmMapVideoDisplay(
427 IN PHYSICAL_ADDRESS PhysicalAddress,
428 IN SIZE_T NumberOfBytes,
429 IN MEMORY_CACHING_TYPE CacheType);
430
431 NTKERNELAPI
432 NTSTATUS
433 NTAPI
434 MmMapViewInSessionSpace(
435 IN PVOID Section,
436 OUT PVOID *MappedBase,
437 IN OUT PSIZE_T ViewSize);
438
439 NTKERNELAPI
440 NTSTATUS
441 NTAPI
442 MmMapViewInSystemSpace(
443 IN PVOID Section,
444 OUT PVOID *MappedBase,
445 IN OUT PSIZE_T ViewSize);
446
447 NTKERNELAPI
448 BOOLEAN
449 NTAPI
450 MmIsAddressValid(
451 IN PVOID VirtualAddress);
452
453 NTKERNELAPI
454 BOOLEAN
455 NTAPI
456 MmIsThisAnNtAsSystem(VOID);
457
458 NTKERNELAPI
459 VOID
460 NTAPI
461 MmLockPagableSectionByHandle(
462 IN PVOID ImageSectionHandle);
463
464 NTKERNELAPI
465 NTSTATUS
466 NTAPI
467 MmUnmapViewInSessionSpace(
468 IN PVOID MappedBase);
469
470 NTKERNELAPI
471 NTSTATUS
472 NTAPI
473 MmUnmapViewInSystemSpace(
474 IN PVOID MappedBase);
475
476 NTKERNELAPI
477 VOID
478 NTAPI
479 MmUnsecureVirtualMemory(
480 IN HANDLE SecureHandle);
481
482 NTKERNELAPI
483 NTSTATUS
484 NTAPI
485 MmRemovePhysicalMemory(
486 IN PPHYSICAL_ADDRESS StartAddress,
487 IN OUT PLARGE_INTEGER NumberOfBytes);
488
489 NTKERNELAPI
490 HANDLE
491 NTAPI
492 MmSecureVirtualMemory(
493 IN PVOID Address,
494 IN SIZE_T Size,
495 IN ULONG ProbeMode);
496
497 NTKERNELAPI
498 VOID
499 NTAPI
500 MmUnmapVideoDisplay(
501 IN PVOID BaseAddress,
502 IN SIZE_T NumberOfBytes);
503
504 NTKERNELAPI
505 NTSTATUS
506 NTAPI
507 MmAddPhysicalMemory(
508 IN PPHYSICAL_ADDRESS StartAddress,
509 IN OUT PLARGE_INTEGER NumberOfBytes);
510
511 NTKERNELAPI
512 PVOID
513 NTAPI
514 MmAllocateContiguousMemory(
515 IN SIZE_T NumberOfBytes,
516 IN PHYSICAL_ADDRESS HighestAcceptableAddress);
517
518 NTKERNELAPI
519 PVOID
520 NTAPI
521 MmAllocateContiguousMemorySpecifyCache(
522 IN SIZE_T NumberOfBytes,
523 IN PHYSICAL_ADDRESS LowestAcceptableAddress,
524 IN PHYSICAL_ADDRESS HighestAcceptableAddress,
525 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
526 IN MEMORY_CACHING_TYPE CacheType);
527
528 NTKERNELAPI
529 PVOID
530 NTAPI
531 MmAllocateContiguousMemorySpecifyCacheNode(
532 IN SIZE_T NumberOfBytes,
533 IN PHYSICAL_ADDRESS LowestAcceptableAddress,
534 IN PHYSICAL_ADDRESS HighestAcceptableAddress,
535 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
536 IN MEMORY_CACHING_TYPE CacheType,
537 IN NODE_REQUIREMENT PreferredNode);
538
539 NTKERNELAPI
540 VOID
541 NTAPI
542 MmFreeContiguousMemory(
543 IN PVOID BaseAddress);
544
545 NTKERNELAPI
546 VOID
547 NTAPI
548 MmFreeContiguousMemorySpecifyCache(
549 IN PVOID BaseAddress,
550 IN SIZE_T NumberOfBytes,
551 IN MEMORY_CACHING_TYPE CacheType);
552 $endif (_NTDDK_)
553 $if (_NTIFS_)
554
555 NTKERNELAPI
556 BOOLEAN
557 NTAPI
558 MmIsRecursiveIoFault(
559 VOID);
560
561 NTKERNELAPI
562 BOOLEAN
563 NTAPI
564 MmForceSectionClosed(
565 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
566 IN BOOLEAN DelayClose);
567
568 NTKERNELAPI
569 BOOLEAN
570 NTAPI
571 MmFlushImageSection(
572 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
573 IN MMFLUSH_TYPE FlushType);
574
575 NTKERNELAPI
576 BOOLEAN
577 NTAPI
578 MmCanFileBeTruncated(
579 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
580 IN PLARGE_INTEGER NewFileSize OPTIONAL);
581
582 NTKERNELAPI
583 BOOLEAN
584 NTAPI
585 MmSetAddressRangeModified(
586 IN PVOID Address,
587 IN SIZE_T Length);
588 $endif (_NTIFS_)
589
590 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
591
592 $if (_WDMDDK_ || _NTIFS_)
593 #if (NTDDI_VERSION >= NTDDI_WINXP)
594 $endif
595
596 $if (_WDMDDK_)
597 NTKERNELAPI
598 NTSTATUS
599 NTAPI
600 MmAdvanceMdl(
601 IN OUT PMDL Mdl,
602 IN ULONG NumberOfBytes);
603
604 NTKERNELAPI
605 PVOID
606 NTAPI
607 MmAllocateMappingAddress(
608 IN SIZE_T NumberOfBytes,
609 IN ULONG PoolTag);
610
611 NTKERNELAPI
612 VOID
613 NTAPI
614 MmFreeMappingAddress(
615 IN PVOID BaseAddress,
616 IN ULONG PoolTag);
617
618 NTKERNELAPI
619 NTSTATUS
620 NTAPI
621 MmIsVerifierEnabled(
622 OUT PULONG VerifierFlags);
623
624 NTKERNELAPI
625 PVOID
626 NTAPI
627 MmMapLockedPagesWithReservedMapping(
628 IN PVOID MappingAddress,
629 IN ULONG PoolTag,
630 IN PMDL MemoryDescriptorList,
631 IN MEMORY_CACHING_TYPE CacheType);
632
633 NTKERNELAPI
634 NTSTATUS
635 NTAPI
636 MmProtectMdlSystemAddress(
637 IN PMDL MemoryDescriptorList,
638 IN ULONG NewProtect);
639
640 NTKERNELAPI
641 VOID
642 NTAPI
643 MmUnmapReservedMapping(
644 IN PVOID BaseAddress,
645 IN ULONG PoolTag,
646 IN PMDL MemoryDescriptorList);
647
648 NTKERNELAPI
649 NTSTATUS
650 NTAPI
651 MmAddVerifierThunks(
652 IN PVOID ThunkBuffer,
653 IN ULONG ThunkBufferSize);
654 $endif (_WDMDDK_)
655 $if (_NTIFS_)
656
657 NTKERNELAPI
658 NTSTATUS
659 NTAPI
660 MmPrefetchPages(
661 IN ULONG NumberOfLists,
662 IN PREAD_LIST *ReadLists);
663 $endif (_NTIFS_)
664
665 $if (_WDMDDK_ || _NTIFS_)
666 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
667 $endif
668 $if (_WDMDDK_ || _NTDDK_)
669 #if (NTDDI_VERSION >= NTDDI_WS03)
670 $endif
671 $if (_WDMDDK_)
672 NTKERNELAPI
673 LOGICAL
674 NTAPI
675 MmIsIoSpaceActive(
676 IN PHYSICAL_ADDRESS StartAddress,
677 IN SIZE_T NumberOfBytes);
678 $endif (_WDMDDK_)
679
680 $if (_NTDDK_)
681 NTKERNELAPI
682 NTSTATUS
683 NTAPI
684 MmCreateMirror(VOID);
685 $endif (_NTDDK_)
686 $if (_WDMDDK_ || _NTDDK_)
687 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
688 $endif
689 $if (_WDMDDK_)
690 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
691 NTKERNELAPI
692 PMDL
693 NTAPI
694 MmAllocatePagesForMdlEx(
695 IN PHYSICAL_ADDRESS LowAddress,
696 IN PHYSICAL_ADDRESS HighAddress,
697 IN PHYSICAL_ADDRESS SkipBytes,
698 IN SIZE_T TotalBytes,
699 IN MEMORY_CACHING_TYPE CacheType,
700 IN ULONG Flags);
701 #endif
702 $endif
703
704 #if (NTDDI_VERSION >= NTDDI_VISTA)
705 $if (_WDMDDK_)
706 NTKERNELAPI
707 LOGICAL
708 NTAPI
709 MmIsDriverVerifyingByAddress(
710 IN PVOID AddressWithinSection);
711 $endif (_WDMDDK_)
712 $if (_NTDDK_)
713 NTSTATUS
714 NTAPI
715 MmRotatePhysicalView(
716 IN PVOID VirtualAddress,
717 IN OUT PSIZE_T NumberOfBytes,
718 IN PMDLX NewMdl OPTIONAL,
719 IN MM_ROTATE_DIRECTION Direction,
720 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction,
721 IN PVOID Context OPTIONAL);
722 $endif (_NTDDK_)
723 $if (_NTIFS_)
724
725 NTKERNELAPI
726 ULONG
727 NTAPI
728 MmDoesFileHaveUserWritableReferences(
729 IN PSECTION_OBJECT_POINTERS SectionPointer);
730 $endif (_NTIFS_)
731 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
732