6 #define ALIGN_DOWN_BY(size, align) \ 7 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1)) 9 #define ALIGN_UP_BY(size, align) \ 10 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align)) 12 #define ALIGN_DOWN_POINTER_BY(ptr, align) \ 13 ((PVOID)ALIGN_DOWN_BY(ptr, align)) 15 #define ALIGN_UP_POINTER_BY(ptr, align) \ 16 ((PVOID)ALIGN_UP_BY(ptr, align)) 18 #define ALIGN_DOWN(size, type) \ 19 ALIGN_DOWN_BY(size, sizeof(type)) 21 #define ALIGN_UP(size, type) \ 22 ALIGN_UP_BY(size, sizeof(type)) 24 #define ALIGN_DOWN_POINTER(ptr, type) \ 25 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type)) 27 #define ALIGN_UP_POINTER(ptr, type) \ 28 ALIGN_UP_POINTER_BY(ptr, sizeof(type)) 31 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field)) 35 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field)) 38 #define POOL_TAGGING 1 41 #define IF_DEBUG if (TRUE) 43 #define IF_DEBUG if (FALSE) 50 #define BYTE_OFFSET(Va) \ 51 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1))) 59 #define BYTES_TO_PAGES(Size) \ 60 (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0)) 66 #define PAGE_ALIGN(Va) \ 67 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1))) 73 #define ROUND_TO_PAGES(Size) \ 74 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)) 81 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \ 82 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \ 83 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)) 85 #define COMPUTE_PAGES_SPANNED(Va, Size) \ 86 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size) 93 #define MmGetMdlByteCount(_Mdl) \ 101 #define MmGetMdlByteOffset(_Mdl) \ 104 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa) 111 #define MmGetMdlPfnArray(_Mdl) \ 112 ((PPFN_NUMBER) ((_Mdl) + 1)) 119 #define MmGetMdlVirtualAddress(_Mdl) \ 120 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset)) 122 #define MmGetProcedureAddress(Address) (Address) 123 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address) 128 #define MmGetSystemAddressForMdl(Mdl) \ 129 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \ 130 MDL_SOURCE_IS_NONPAGED_POOL)) ? \ 131 ((Mdl)->MappedSystemVa) : \ 132 (MmMapLockedPages((Mdl), KernelMode))) 139 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \ 140 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \ 141 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \ 142 (_Mdl)->MappedSystemVa : \ 143 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \ 144 KernelMode, MmCached, NULL, FALSE, (_Priority))) 153 #define MmInitializeMdl(_MemoryDescriptorList, \ 157 (_MemoryDescriptorList)->Next = (PMDL) NULL; \ 158 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \ 159 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \ 160 (_MemoryDescriptorList)->MdlFlags = 0; \ 161 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \ 162 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \ 163 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \ 171 #define MmPrepareMdlForReuse(_Mdl) \ 173 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \ 174 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \ 175 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \ 176 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \ 177 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \ 194 #if (NTDDI_VERSION >= NTDDI_WIN2K) 288 MmLockPagableDataSection(
371 MmUnlockPagableImageSection(
413 MmAllocateContiguousMemorySpecifyCacheNode(
521 MmLockPagableSectionByHandle(
622 #if (NTDDI_VERSION >= NTDDI_WINXP) 716 #if (NTDDI_VERSION >= NTDDI_WS03) 740 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 756 #if (NTDDI_VERSION >= NTDDI_VISTA) 762 MmIsDriverVerifyingByAddress(
770 MmRotatePhysicalView(
_Must_inspect_result_ _When_(AccessMode==KernelMode, _IRQL_requires_max_(DISPATCH_LEVEL)) _When_(AccessMode
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
_Must_inspect_result_ _Out_writes_bytes_opt_(NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateMappingAddress(_In_ SIZE_T NumberOfBytes
BOOLEAN NTAPI MmCanFileBeTruncated(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN PLARGE_INTEGER NewFileSize)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR ZeroBits
BOOLEAN NTAPI MmSetAddressRangeModified(IN PVOID Address, IN SIZE_T Length)
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ SIZE_T NumberOfBytes
#define _At_(target, annos)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG _In_ ULONG Protect
NTKERNELAPI PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress(_In_ PVOID BaseAddress)
#define HEAP_MAKE_TAG_FLAGS(b, o)
NTSTATUS NTAPI MmAddVerifierThunks(IN PVOID ThunkBuffer, IN ULONG ThunkBufferSize)
VOID NTAPI MmBuildMdlForNonPagedPool(IN PMDL Mdl)
NTKERNELAPI PMDL NTAPI MmCreateMdl(_Out_writes_bytes_opt_(sizeof(MDL)+(sizeof(PFN_NUMBER) *ADDRESS_AND_SIZE_TO_SPAN_PAGES(Base, Length))) PMDL MemoryDescriptorList, _In_reads_bytes_opt_(Length) PVOID Base, _In_ SIZE_T Length)
NTKERNELAPI BOOLEAN NTAPI MmIsNonPagedSystemAddressValid(_In_ PVOID VirtualAddress)
_In_ MMFLUSH_TYPE FlushType
IN PVOID IN PVOID IN USHORT IN USHORT Size
_Must_inspect_result_ _In_ _In_ ULONG ProbeMode
VOID NTAPI MmUnlockPages(IN PMDL Mdl)
NTSTATUS(NTAPI * PMM_ROTATE_COPY_CALLBACK_FUNCTION)(_In_ PMDL DestinationMdl, _In_ PMDL SourceMdl, _In_ PVOID Context)
_Post_writable_byte_size_(NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemory(_In_ SIZE_T NumberOfBytes
PVOID NTAPI MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
NTKERNELAPI LOGICAL NTAPI MmIsDriverVerifying(_In_ struct _DRIVER_OBJECT *DriverObject)
PVOID NTAPI MmMapLockedPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode)
VOID NTAPI MmFreeContiguousMemory(IN PVOID BaseAddress)
_Must_inspect_result_ _In_ PDEVICE_OBJECT _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
PMDL NTAPI MmAllocatePagesForMdlEx(IN PHYSICAL_ADDRESS LowAddress, IN PHYSICAL_ADDRESS HighAddress, IN PHYSICAL_ADDRESS SkipBytes, IN SIZE_T TotalBytes, IN MEMORY_CACHING_TYPE CacheType, IN ULONG Flags)
_Must_inspect_result_ _In_ SIZE_T _In_ PVOID PageAddress
NTKERNELAPI SIZE_T NTAPI MmSizeOfMdl(_In_reads_bytes_opt_(Length) PVOID Base, _In_ SIZE_T Length)
#define _Field_size_bytes_opt_(size)
enum _MM_SYSTEM_SIZE MM_SYSTEMSIZE
NTSTATUS NTAPI MmAddPhysicalMemory(IN PPHYSICAL_ADDRESS StartAddress, IN OUT PLARGE_INTEGER NumberOfBytes)
PVOID NTAPI MmMapLockedPagesSpecifyCache(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN MEMORY_CACHING_TYPE CacheType, IN PVOID BaseAddress, IN ULONG BugCheckOnFailure, IN ULONG Priority)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
__kernel_entry _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI NtFreeVirtualMemory(_In_ HANDLE ProcessHandle
Queries information details about a security descriptor.
#define _Outptr_result_bytebuffer_(size)
PVOID NTAPI MmGetSystemRoutineAddress(IN PUNICODE_STRING SystemRoutineName)
_Inout_ PMDL MemoryDescriptorList
NTSTATUS NTAPI MmUnmapViewInSystemSpace(IN PVOID MappedBase)
VOID NTAPI MmUnmapLockedPages(IN PVOID BaseAddress, IN PMDL Mdl)
_In_ ULONG ThunkBufferSize
VOID NTAPI MmFreePagesFromMdl(IN PMDL Mdl)
_In_ PEPROCESS _In_ KPROCESSOR_MODE AccessMode
NTSTATUS NTAPI MmUnmapViewInSessionSpace(IN PVOID MappedBase)
NTSTATUS NTAPI MmRemovePhysicalMemory(IN PPHYSICAL_ADDRESS StartAddress, IN OUT PLARGE_INTEGER NumberOfBytes)
#define _Maybe_raises_SEH_exception_
PVOID NTAPI MmMapVideoDisplay(IN PHYSICAL_ADDRESS PhysicalAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS _In_opt_ PHYSICAL_ADDRESS _In_ MEMORY_CACHING_TYPE CacheType
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS SkipBytes
__kernel_entry _Inout_ __drv_freesMem(Mem) PVOID *BaseAddress
_Must_inspect_result_ _In_ __in_data_source(USER_MODE) SIZE_T Size
#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size)
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
BOOLEAN NTAPI MmIsRecursiveIoFault(VOID)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_Inout_ PSIZE_T _In_opt_ PMDLX NewMdl
#define __drv_allocatesMem(kind)
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN NTAPI MmFlushImageSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN MMFLUSH_TYPE FlushType)
_In_reads_(NumberOfLists) PREAD_LIST *ReadLists)
_Inout_ PSIZE_T _In_opt_ PMDLX _In_ MM_ROTATE_DIRECTION Direction
PVOID NTAPI MmPageEntireDriver(IN PVOID AddressWithinSection)
PVOID NTAPI MmSecureVirtualMemory(IN PVOID Address, IN SIZE_T Length, IN ULONG Mode)
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS _In_opt_ PHYSICAL_ADDRESS _In_ MEMORY_CACHING_TYPE _In_ NODE_REQUIREMENT PreferredNode
NTKERNELAPI MM_SYSTEMSIZE NTAPI MmQuerySystemSize(VOID)
ULONG NTAPI MmDoesFileHaveUserWritableReferences(IN PSECTION_OBJECT_POINTERS SectionPointer)
VOID NTAPI MmResetDriverPaging(IN PVOID AddressWithinSection)
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG PoolTag
BOOLEAN NTAPI MmIsAddressValid(IN PVOID VirtualAddress)
_In_opt_ PLARGE_INTEGER NewFileSize
LOGICAL NTAPI MmIsIoSpaceActive(IN PHYSICAL_ADDRESS StartAddress, IN SIZE_T NumberOfBytes)
NTSTATUS NTAPI MmMapViewInSystemSpace(IN PVOID SectionObject, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
NTKERNELAPI BOOLEAN NTAPI MmIsThisAnNtAsSystem(VOID)
NTSTATUS NTAPI MmCreateMirror(VOID)
_In_ PHYSICAL_ADDRESS HighestAcceptableAddress
BOOLEAN NTAPI MmForceSectionClosed(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN BOOLEAN DelayClose)
#define _Must_inspect_result_
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG AllocationType
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
NTSTATUS NTAPI MmIsVerifierEnabled(OUT PULONG VerifierFlags)
PPHYSICAL_MEMORY_RANGE NTAPI MmGetPhysicalMemoryRanges(VOID)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _In_ LARGE_INTEGER ByteCount
_Must_inspect_result_ _Maybe_raises_SEH_exception_ _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE, __drv_typeConst) KPROCESSOR_MODE AccessMode)
NTSTATUS NTAPI MmProtectMdlSystemAddress(IN PMDL MemoryDescriptorList, IN ULONG NewProtect)
NTSTATUS NTAPI NtAllocateVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UBaseAddress, IN ULONG_PTR ZeroBits, IN OUT PSIZE_T URegionSize, IN ULONG AllocationType, IN ULONG Protect)
VOID NTAPI MmProbeAndLockPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation)
enum _LOCK_OPERATION LOCK_OPERATION
__kernel_entry _Inout_ _Inout_ PSIZE_T _In_ ULONG FreeType
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS HighAddress
__kernel_entry _Inout_ _Inout_ PSIZE_T RegionSize
enum _MM_ROTATE_DIRECTION MM_ROTATE_DIRECTION
VOID NTAPI MmUnmapIoSpace(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes)
PVOID NTAPI MmMapLockedPagesWithReservedMapping(IN PVOID MappingAddress, IN ULONG PoolTag, IN PMDL MemoryDescriptorList, IN MEMORY_CACHING_TYPE CacheType)
_Must_inspect_result_ _In_ ULONG NewProtect
NTSTATUS NTAPI MmAdvanceMdl(IN PMDL Mdl, IN ULONG NumberOfBytes)
PVOID NTAPI MmAllocateContiguousMemory(IN SIZE_T NumberOfBytes, IN PHYSICAL_ADDRESS HighestAcceptableAddress)
#define __drv_strictTypeMatch(mode)
VOID NTAPI MmFreeNonCachedMemory(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes)
_In_ PEPROCESS _In_ KPROCESSOR_MODE _In_ LOCK_OPERATION Operation
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
NTSTATUS NTAPI MmMapUserAddressesToPage(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes, IN PVOID PageAddress)
_Must_inspect_result_ _Outptr_result_bytebuffer_ ViewSize PVOID * MappedBase
VOID NTAPI MmUnmapVideoDisplay(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes)
#define _In_reads_bytes_opt_(size)
VOID NTAPI MmFreeContiguousMemorySpecifyCache(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
NTKERNELAPI PVOID NTAPI MmGetVirtualForPhysical(_In_ PHYSICAL_ADDRESS PhysicalAddress)
#define _Outptr_result_buffer_(size)
$endif(_NTIFS_) $if(_WDMDDK_) _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) _When_(return !
VOID NTAPI MmUnmapReservedMapping(IN PVOID BaseAddress, IN ULONG PoolTag, IN PMDL MemoryDescriptorList)
NTSTATUS NTAPI MmMapViewInSessionSpace(IN PVOID Section, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
_In_ HANDLE ProcessHandle
enum _MEMORY_CACHING_TYPE MEMORY_CACHING_TYPE
PVOID NTAPI MmAllocateNonCachedMemory(IN SIZE_T NumberOfBytes)
PMDL NTAPI MmAllocatePagesForMdl(IN PHYSICAL_ADDRESS LowAddress, IN PHYSICAL_ADDRESS HighAddress, IN PHYSICAL_ADDRESS SkipBytes, IN SIZE_T TotalBytes)
PVOID NTAPI MmAllocateMappingAddress(IN SIZE_T NumberOfBytes, IN ULONG PoolTag)
_Inout_ PSIZE_T _In_opt_ PMDLX _In_ MM_ROTATE_DIRECTION _In_ PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
NTSTATUS NTAPI MmPrefetchPages(IN ULONG NumberOfLists, IN PREAD_LIST *ReadLists)
VOID NTAPI MmProbeAndLockProcessPages(IN OUT PMDL MemoryDescriptorList, IN PEPROCESS Process, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation)
$if(_WDMDDK_) $endif(_WDMDDK_) $if(_NTIFS_) FORCEINLINE ULONG HEAP_MAKE_TAG_FLAGS(_In_ ULONG TagBase
VOID NTAPI MmUnsecureVirtualMemory(IN PVOID SecureMem)
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS _In_ SIZE_T TotalBytes
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
VOID NTAPI MmFreeMappingAddress(IN PVOID BaseAddress, IN ULONG PoolTag)
#define _In_reads_bytes_(size)
PVOID NTAPI MmAllocateContiguousMemorySpecifyCache(IN SIZE_T NumberOfBytes, IN PHYSICAL_ADDRESS LowestAcceptableAddress OPTIONAL, IN PHYSICAL_ADDRESS HighestAcceptableAddress, IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, IN MEMORY_CACHING_TYPE CacheType OPTIONAL)
NTSTATUS NTAPI NtFreeVirtualMemory(IN HANDLE ProcessHandle, IN PVOID *UBaseAddress, IN PSIZE_T URegionSize, IN ULONG FreeType)