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