15 #define MODULE_INVOLVED_IN_ARM3 118 IN ULONG NewSectionPageProtection)
120 ULONG ProtectionMask, CompatibleMask;
126 DPRINT1(
"Invalid protection mask\n");
135 return ((CompatibleMask | NewSectionPageProtection) == CompatibleMask);
142 ULONG ProtectionMask;
148 DPRINT1(
"Invalid protection mask\n");
160 ULONG Mask1, Mask2, ProtectMask;
375 DPRINT1(
"Ran out of system view hash entries\n");
386 DPRINT1(
"Out of system view space\n");
423 PMMPTE PointerPte, ProtoPte, LastProtoPte, LastPte;
430 ASSERT(ControlArea->u.Flags.GlobalOnlyPerSession == 0);
431 ASSERT(ControlArea->u.Flags.Rom == 0);
436 ASSERT(ControlArea->NumberOfMappedViews >= 1);
437 ASSERT(ControlArea->NumberOfUserReferences >= 1);
438 ASSERT(ControlArea->NumberOfSectionReferences != 0);
439 ASSERT(ControlArea->u.Flags.BeingCreated == 0);
440 ASSERT(ControlArea->u.Flags.BeingDeleted == 0);
441 ASSERT(ControlArea->u.Flags.BeingPurged == 0);
444 PointerPte = FirstPte;
445 LastPte = FirstPte + PteCount;
453 while (PointerPte < LastPte)
456 if (ProtoPte >= LastProtoPte)
483 PMMPDE PointerPde, LastPde, SystemMapPde;
493 #if (_MI_PAGING_LEVELS == 2) 498 SystemMapPde = PointerPde;
503 while (PointerPde <= LastPde)
518 #if (_MI_PAGING_LEVELS == 2) 521 ParentPage =
MiPdeToPpe(PointerPde)->u.Hard.PageFrameNumber;
560 ASSERT(ControlArea->u.Flags.BeingPurged == 0);
563 ControlArea->NumberOfMappedViews++;
564 ControlArea->NumberOfUserReferences++;
565 ASSERT(ControlArea->NumberOfSectionReferences != 0);
582 ControlArea = Vad->ControlArea;
596 PteOffset = Vpn - Vad->StartingVpn;
600 ASSERT(PteOffset < 0xF0000000);
601 ASSERT(PteOffset < Subsection->PtesInSubsection);
614 PMMPTE PointerPte, LastPte, PteForProto;
621 SegmentFlags =
Segment->SegmentFlags;
622 ControlArea =
Segment->ControlArea;
637 LastPte = PointerPte +
Segment->NonExtendedPtes;
651 while (PointerPte < LastPte)
680 if (
TempPte.u.Soft.Transition == 1)
683 DPRINT(
"Releasing page for transition PTE %p\n", PointerPte);
702 else if (
TempPte.u.Soft.PageFileHigh != 0)
718 PointerPte->
u.
Long = 0;
739 if (!(ControlArea->NumberOfMappedViews) &&
740 !(ControlArea->NumberOfSectionReferences))
743 ASSERT(ControlArea->NumberOfUserReferences == 0);
749 ControlArea->u.Flags.BeingDeleted =
TRUE;
750 DeleteSegment =
TRUE;
760 ASSERT(ControlArea->WritableUserReferences == 0);
775 ControlArea->NumberOfMappedViews--;
776 ControlArea->NumberOfUserReferences--;
792 ControlArea = Vad->ControlArea;
872 DPRINT1(
"No VAD or invalid VAD\n");
901 DPRINT1(
"Trying to unmap protected VAD!\n");
949 PFN_NUMBER PageCount = 0, ActualPages = 0, PageFrameNumber;
960 while (StartPde <= EndPde)
982 _WARN(
"MiSessionCommitPageTables halfplemented for amd64")
990 while (StartPde <= EndPde)
1037 ASSERT(ActualPages <= PageCount);
1084 SectionSize = ((
PSECTION)Section)->SizeOfSection.QuadPart;
1092 DPRINT1(
"Section end is too far away from the specified offset.\n");
1102 DPRINT1(
"Integer overflow between size & offset!\n");
1111 DPRINT1(
"View is too large\n");
1124 DPRINT1(
"View is too large\n");
1134 DPRINT1(
"Out of system space\n");
1176 ControlArea->u.Flags.DebugSymbolsLoaded |= 1;
1196 FileName = &ControlArea->FilePointer->FileName;
1209 NextEntry = NextEntry->
Flink)
1300 ULONG QuotaCharge = 0, QuotaExcess = 0;
1301 PMMPTE PointerPte, LastPte;
1305 DPRINT(
"Mapping ARM3 data section\n");
1308 Segment = ControlArea->Segment;
1362 ASSERT(ControlArea->u.Flags.GlobalOnlyPerSession == 0);
1365 ASSERT(ControlArea->u.Flags.Rom == 0);
1375 ASSERT(PteOffset < Segment->TotalNumberOfPtes);
1379 ASSERT(PteOffset < Subsection->PtesInSubsection);
1428 PteOffset += ViewSizeInPages - 1;
1429 ASSERT(PteOffset < Subsection->PtesInSubsection);
1448 while (PointerPte < LastPte)
1451 if (PointerPte->
u.
Long == 0)
1467 ASSERT(QuotaCharge >= QuotaExcess);
1468 QuotaCharge -= QuotaExcess;
1469 Segment->NumberOfCommittedPages += QuotaCharge;
1482 else if (Section->Address.StartingVpn != 0)
1485 StartAddress = Section->Address.StartingVpn +
SectionOffset->LowPart;
1519 ASSERT(Subsection->u.SubsectionFlags.SectorEndOffset == 0);
1522 if (Subsection->NumberOfFullSectors != Subsection->PtesInSubsection)
1525 DPRINT1(
"Mm: Subsection inconsistent (%x vs %x)\n",
1526 Subsection->NumberOfFullSectors, Subsection->PtesInSubsection);
1572 SizeLimit /=
sizeof(
MMPTE);
1590 sizeof(
MMPTE) * (PteCount - 1),
1610 ControlArea->
Segment = NewSegment;
1629 PointerPte = &NewSegment->
ThePtes[0];
1648 TempPte.u.Soft.Protection = ProtectionMask;
1699 DPRINT1(
"Address is a cache section!\n");
1712 DPRINT1(
"Address is not a section\n");
1718 if (!(ControlArea) || !(ControlArea->
u.
Flags.
Image))
1720 DPRINT1(
"Address is not a section\n");
1760 if (Vad->u.VadFlags.Spare != 0)
1774 DPRINT1(
"VAD is a cache section!\n");
1784 if (Vad->u.VadFlags.PrivateMemory == 1)
1786 DPRINT1(
"VAD is not a section\n");
1791 ControlArea = Vad->ControlArea;
1794 DPRINT1(
"Address is not a section\n");
1848 DPRINT1(
"Name query failed\n");
1871 DPRINT1(
"Not an image section\n");
1964 DPRINT(
"MiQueryMemorySectionName: ObReferenceObjectByHandle returned %x\n",
Status);
1972 SectionName = MemoryInformation;
1978 (
PWSTR)(SectionName + 1),
1994 (
PWSTR)(SectionName + 1),
2023 PreviousPte = *PointerPte;
2043 if (Pfn1->u3.e1.CacheAttribute ==
MiCached)
2054 else if (Pfn1->u3.e1.CacheAttribute ==
MiNonCached)
2092 if (!Pfn1->u3.e1.Modified)
2094 DPRINT1(
"FIXME: Mark PFN as dirty\n");
2123 PMMPTE PointerPte, LastPte;
2127 ULONG ProtectionMask, QuotaCharge = 0;
2139 ASSERT(FoundVad->u.VadFlags.PrivateMemory == 0);
2145 ASSERT(FoundVad->u2.VadFlags2.CopyOnWrite == 0);
2153 DPRINT1(
"Invalid section protect\n");
2169 if (PointerPte->
u.
Long)
2199 while (PointerPte <= LastPte)
2213 PteContents = *PointerPte;
2214 if (PteContents.
u.
Long == 0)
2226 TempPte.u.Soft.Protection = ProtectionMask;
2273 if ((QuotaCharge > 0) && (!DontCharge))
2275 FoundVad->u.VadFlags.CommitCharge -= QuotaCharge;
2276 Process->CommitCharge -= QuotaCharge;
2288 PMMPTE PointerPte, ProtoPte;
2289 PMMPDE PointerPde, SystemMapPde;
2300 while (NumberOfPtes)
2303 PteContents = *PointerPte;
2321 if (PointerPde->
u.
Long == 0)
2323 #if (_MI_PAGING_LEVELS == 2) 2362 PointerPte->
u.
Long = 0;
2376 ControlArea->NumberOfUserReferences--;
2377 ControlArea->NumberOfMappedViews--;
2478 ULONG ProtectionMask, ControlAreaSize,
Size, NonPagedCharge, PagedCharge;
2484 PVOID PreviousSectionPointer;
2526 if (!
File->SectionObjectPointer)
2582 PreviousSectionPointer =
File->SectionObjectPointer;
2583 File->SectionObjectPointer->DataSectionObject = ControlArea;
2616 File->SectionObjectPointer->DataSectionObject =
NULL;
2641 ASSERT(PreviousSectionPointer ==
File->SectionObjectPointer);
2644 if (!InputMaximumSize->QuadPart)
2652 Section.SizeOfSection.QuadPart = InputMaximumSize->QuadPart;
2675 UserRefIncremented =
TRUE;
2714 Section.Segment = NewSegment;
2715 Section.u.LongFlags = ControlArea->
u.
LongFlags;
2724 Section.u.Flags.UserWritable =
TRUE;
2751 NonPagedCharge +=
Size;
2763 (
PVOID*)&NewSection);
2773 ASSERT(Section.u.Flags.UserWritable == 1);
2778 if (UserRefIncremented)
2800 NewSection->Address.StartingVpn = 0;
2804 NewSection->u.Flags.UserReference =
TRUE;
2828 NewSection->u.Flags.Based = 0;
2835 NewSection->Address.EndingVpn = NewSection->Address.StartingVpn + NewSection->SizeOfSection.LowPart - 1;
2855 NewSection->u.Flags.BeingCreated = 0;
2866 NewSection->u.Flags.CopyOnWrite =
TRUE;
2874 ASSERT((
ULONG64)NewSection->SizeOfSection.QuadPart <= NewSection->Segment->SizeOfSegment);
2901 ULONG ProtectionMask;
2919 DPRINT1(
"MmMapViewOfArm3Section called with MEM_RESERVE, this is not implemented yet!!!\n");
2926 DPRINT1(
"Mapping protection is incompatible\n");
2934 DPRINT1(
"Section offset overflows\n");
2942 DPRINT1(
"Section offset is larger than section\n");
2957 DPRINT1(
"Section view won't fit\n");
2965 DPRINT1(
"Attempting to commit more than the view itself\n");
2972 DPRINT1(
"The view is larger than the section\n");
2980 DPRINT1(
"The protection is invalid\n");
2987 DPRINT1(
"Cannot write combine a pagefile-backed section\n");
3060 DPRINT1(
"Process is not in session\n");
3092 DPRINT1(
"Proess is not in session\n");
3149 PMMPTE LastProtoPte, PointerPte, ProtoPte;
3160 DPRINT1(
"Base outside of valid range\n");
3168 DPRINT1(
"Size outside of valid range\n");
3178 DPRINT1(
"Process is not in session\n");
3207 if ((StartAddress >=
Base) && (EndingAddress < (
Base +
Size)))
break;
3231 DPRINT1(
"Only page-filed backed sections can be commited\n");
3244 LastProtoPte = ProtoPte + QuotaCharge;
3247 DPRINT1(
"PTE is out of bounds\n");
3254 PointerPte = ProtoPte;
3255 while (PointerPte < LastProtoPte)
3257 if (PointerPte->
u.
Long) QuotaCharge--;
3276 PointerPte = ProtoPte;
3277 while (PointerPte < LastProtoPte)
3280 if (PointerPte->
u.
Long == 0)
3294 Segment->NumberOfCommittedPages += QuotaCharge;
3369 DPRINT1(
"No VAD at address 1 %p\n", File1MappedAsAnImage);
3379 DPRINT1(
"No VAD at address 2 %p\n", File2MappedAsFile);
3386 if (FileObject1 ==
NULL)
3388 DPRINT1(
"Failed to get file object for Address 1 %p\n", File1MappedAsAnImage);
3395 if (FileObject2 ==
NULL)
3397 DPRINT1(
"Failed to get file object for Address 2 %p\n", File2MappedAsFile);
3405 DPRINT1(
"Address 1 (%p) is not an image mapping\n", File1MappedAsAnImage);
3411 if (FileObject1->SectionObjectPointer == FileObject2->SectionObjectPointer)
3461 DPRINT1(
"Missing allocation type in allocation attributes\n");
3470 DPRINT1(
"Image allocation with invalid attributes\n");
3477 DPRINT1(
"Commit and reserve in the same time\n");
3487 DPRINT1(
"Sections don't support these protections\n");
3623 PVOID SafeBaseAddress;
3630 ULONG ProtectionMask;
3632 #if defined(_M_IX86) || defined(_M_AMD64) 3643 DPRINT1(
"Invalid inherit disposition\n");
3650 DPRINT1(
"Invalid allocation type\n");
3658 DPRINT1(
"Invalid page protection\n");
3701 DPRINT1(
"Kernel base not allowed\n");
3708 DPRINT1(
"Overflowing into kernel base not allowed\n");
3717 DPRINT1(
"Invalid zero bits\n");
3723 DPRINT1(
"Invalid zero bits\n");
3729 DPRINT1(
"Invalid zero bits\n");
3756 if (Section->u.Flags.PhysicalMemory)
3761 DPRINT1(
"Denying map past highest physical page.\n");
3772 DPRINT(
"BaseAddress is not at 64-kilobyte address boundary.\n");
3781 DPRINT(
"SectionOffset is not at 64-kilobyte address boundary.\n");
3804 if ((Section->u.Flags.Image) &&
3848 DPRINT1(
"Trying to unmap a kernel view\n");
3887 SafeNewMaximumSize = *NewMaximumSize;
3899 SafeNewMaximumSize = *NewMaximumSize;
3921 *NewMaximumSize = SafeNewMaximumSize;
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT InheritDisposition
_Must_inspect_result_ _Outptr_ PVOID * SectionObject
NTSTATUS NTAPI ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN OUT PVOID ParseContext, OUT PHANDLE Handle)
#define KeGetCurrentIrql()
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
static int Hash(const char *)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define MM_HIGHEST_USER_ADDRESS
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR ZeroBits
#define MM_VIRTMEM_GRANULARITY
#define MM_INVALID_PROTECTION
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
ULONG NumberOfCommittedPages
PEVENT_COUNTER WaitingForDeletion
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
#define STATUS_INSUFFICIENT_RESOURCES
BOOLEAN NTAPI MiIsProtectionCompatible(IN ULONG SectionPageProtection, IN ULONG NewSectionPageProtection)
NTSTATUS NTAPI MiQueryMemorySectionName(IN HANDLE ProcessHandle, IN PVOID BaseAddress, OUT PVOID MemoryInformation, IN SIZE_T MemoryInformationLength, OUT PSIZE_T ReturnLength)
ULONG NTAPI MiMakeSystemAddressValidPfn(IN PVOID VirtualAddress, IN KIRQL OldIrql)
struct _RTL_BITMAP RTL_BITMAP
VOID NTAPI MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
struct _MEMORY_AREA * PMEMORY_AREA
FORCEINLINE VOID MiUnlockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
NTSTATUS NTAPI NtAreMappedFilesTheSame(IN PVOID File1MappedAsAnImage, IN PVOID File2MappedAsFile)
NTSTATUS NTAPI MmGetFileNameForAddress(IN PVOID Address, OUT PUNICODE_STRING ModuleName)
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ ULONG AllocationAttributes
#define MI_ASSERT_PFN_LOCK_HELD()
#define MiAddressToPde(x)
ULONG NumberOfSectionReferences
#define STATUS_NOT_SAME_DEVICE
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
VOID NTAPI MiUnlinkPageFromList(IN PMMPFN Pfn)
#define PsGetCurrentThread()
#define PROCESS_QUERY_INFORMATION
NTSTATUS NTAPI MiCreateDataFileMap(IN PFILE_OBJECT File, OUT PSEGMENT *Segment, IN PSIZE_T MaximumSize, IN ULONG SectionPageProtection, IN ULONG AllocationAttributes, IN ULONG IgnoreFileSizing)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
BOOLEAN NTAPI MmDisableModifiedWriteOfSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer)
_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
#define MI_IS_SESSION_ADDRESS(Address)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
CHAR MmUserProtectionToMask1[16]
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
VOID NTAPI MiRemoveMappedPtes(IN PVOID BaseAddress, IN ULONG NumberOfPtes, IN PCONTROL_AREA ControlArea, IN PMMSUPPORT Ws)
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
ULONG InitialPageProtection
KGUARDED_MUTEX MmSectionBasedMutex
PCONTROL_AREA ControlArea
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
NTSTATUS NTAPI MmGetFileNameForSection(IN PVOID Section, OUT POBJECT_NAME_INFORMATION *ModuleName)
BOOLEAN NTAPI MiInitializeSystemSpaceMap(IN PMMSESSION InputSession OPTIONAL)
union _MMVAD_LONG::@2567 u
#define ProbeForWriteSize_t(Ptr)
#define STATUS_INVALID_PARAMETER_9
#define MI_GET_NEXT_COLOR()
#define STATUS_INVALID_PARAMETER_8
MM_AVL_TABLE MmSectionBasedRoot
VOID NTAPI DbgkMapViewOfSection(IN PVOID Section, IN PVOID BaseAddress, IN ULONG SectionOffset, IN ULONG_PTR ViewSize)
HARDWARE_PDE_ARMV6 TempPde
FORCEINLINE KIRQL MiAcquirePfnLock(VOID)
ACCESS_MASK MmMakeFileAccess[8]
PMM_SESSION_SPACE MmSessionSpace
VOID NTAPI MiRemoveMappedView(IN PEPROCESS CurrentProcess, IN PMMVAD Vad)
IN PVOID IN PVOID IN USHORT IN USHORT Size
NTSTATUS NTAPI ObQueryNameString(IN PVOID Object, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength)
PCHAR SystemSpaceViewStart
KPROCESSOR_MODE NTAPI ExGetPreviousMode(VOID)
VOID NTAPI MiInitializePfnForOtherProcess(IN PFN_NUMBER PageFrameIndex, IN PVOID PteAddress, IN PFN_NUMBER PteFrame)
PCONTROL_AREA ControlArea
VOID NTAPI MiSubsectionConsistent(IN PSUBSECTION Subsection)
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char const char * ModuleName
VOID NTAPI MiLoadUserSymbols(IN PCONTROL_AREA ControlArea, IN PVOID BaseAddress, IN PEPROCESS Process)
ULONG SystemSpaceHashEntries
static NTSTATUS NTAPI MiCreatePagingFileMap(OUT PSEGMENT *Segment, IN PLARGE_INTEGER MaximumSize, IN ULONG ProtectionMask, IN ULONG AllocationAttributes)
NTSTATUS NTAPI MiFindEmptyAddressRangeDownBasedTree(IN SIZE_T Length, IN ULONG_PTR BoundaryAddress, IN ULONG_PTR Alignment, IN PMM_AVL_TABLE Table, OUT PULONG_PTR Base)
struct _SUBSECTION SUBSECTION
PFN_NUMBER MmAvailablePages
PMEMORY_AREA NTAPI MmLocateMemoryAreaByAddress(PMMSUPPORT AddressSpace, PVOID Address)
union _CONTROL_AREA::@2557 u
VOID NTAPI MiInsertBasedSection(IN PSECTION Section)
FORCEINLINE VOID MiReleasePfnLock(_In_ KIRQL OldIrql)
NTSTATUS NTAPI MiSessionCommitPageTables(IN PVOID StartVa, IN PVOID EndVa)
KGUARDED_MUTEX SystemSpaceViewLock
_Must_inspect_result_ _In_ PDEVICE_OBJECT _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
PFN_NUMBER NTAPI MiRemoveZeroPage(IN ULONG Color)
SIZE_T MmSizeOfPagedPoolInBytes
struct _CONTROL_AREA * ControlArea
#define STATUS_ALREADY_COMMITTED
NTSTATUS NTAPI MiCheckPurgeAndUpMapCount(IN PCONTROL_AREA ControlArea, IN BOOLEAN FailIfSystemViews)
PEPROCESS CreatingProcess
ERESOURCE PsLoadedModuleResource
VOID NTAPI MiDereferenceControlArea(IN PCONTROL_AREA ControlArea)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
#define MM_EXECUTE_WRITECOPY
NTSTATUS NTAPI MmCreateArm3Section(OUT PVOID *SectionObject, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER InputMaximumSize, IN ULONG SectionPageProtection, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL, IN PFILE_OBJECT FileObject OPTIONAL)
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER _In_ ULONG SectionPageProtection
return STATUS_NOT_IMPLEMENTED
const ULONG MmProtectToValue[32]
#define MiAddressToPte(x)
#define PAGE_EXECUTE_WRITECOPY
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
VOID NTAPI MiDeleteARM3Section(PVOID ObjectBody)
#define STATUS_INVALID_PARAMETER_3
ULONG NTAPI MiRemoveFromSystemSpace(IN PMMSESSION Session, IN PVOID Base, OUT PCONTROL_AREA *ControlArea)
#define MEMORY_AREA_OWNED_BY_ARM3
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
struct _SUBSECTION * NextSubsection
static PFILE_OBJECT MiGetFileObjectForVad(_In_ PMMVAD Vad)
VOID NTAPI KeStackAttachProcess(IN PKPROCESS Process, OUT PRKAPC_STATE ApcState)
NTSTATUS NTAPI MmMapViewOfArm3Section(IN PVOID SectionObject, IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
NTSTATUS NTAPI MmUnmapViewInSystemSpace(IN PVOID MappedBase)
LARGE_INTEGER SizeOfSection
static NTSTATUS MiAddMappedPtes(IN PMMPTE FirstPte, IN PFN_NUMBER PteCount, IN PCONTROL_AREA ControlArea, IN LONGLONG SectionOffset)
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
#define MI_SET_PROCESS2(x)
struct _MSUBSECTION MSUBSECTION
#define STATUS_MAPPED_ALIGNMENT
NTSTATUS NTAPI MmUnmapViewInSessionSpace(IN PVOID MappedBase)
NTSTATUS NTAPI FsRtlAcquireToCreateMappedSection(_In_ PFILE_OBJECT FileObject, _In_ ULONG SectionPageProtection)
NTSTATUS NTAPI MiRosUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress, IN BOOLEAN SkipDebuggerNotify)
TCHAR ModuleFileName[MAX_PATH+1]
PCONTROL_AREA ControlArea
#define PsGetCurrentProcess
NTSTATUS NTAPI NtMapViewOfSection(IN HANDLE SectionHandle, IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
#define EXCEPTION_EXECUTE_HANDLER
NTSTATUS NTAPI MiSetProtectionOnSection(IN PEPROCESS Process, IN PMMVAD FoundVad, IN PVOID StartingAddress, IN PVOID EndingAddress, IN ULONG NewProtect, OUT PULONG CapturedOldProtect, IN ULONG DontCharge, OUT PULONG Locked)
NTSTATUS NTAPI NtOpenSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
PFN_NUMBER MmSystemPageDirectory[PPE_PER_PAGE]
#define STATUS_SECTION_TOO_BIG
VOID NTAPI MiMakePdeExistAndMakeValid(IN PMMPDE PointerPde, IN PEPROCESS TargetProcess, IN KIRQL OldIrql)
NTSTATUS NTAPI NtExtendSection(IN HANDLE SectionHandle, IN OUT PLARGE_INTEGER NewMaximumSize)
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
#define STATUS_INVALID_PARAMETER_2
#define MiProtoPteToPte(x)
NTSYSAPI ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP, ULONG, ULONG)
ULONG MmSecondaryColorMask
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
struct _SECTION * PSECTION
FORCEINLINE VOID MI_WRITE_VALID_PDE(IN PMMPDE PointerPde, IN MMPDE TempPde)
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSTATUS NTAPI MmMapViewOfSection(IN PVOID SectionObject, IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
#define MEMORY_AREA_SECTION_VIEW
PMMVIEW SystemSpaceViewTable
PVOID NTAPI MiInsertInSystemSpace(IN PMMSESSION Session, IN ULONG Buckets, IN PCONTROL_AREA ControlArea)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
CHAR MmUserProtectionToMask2[16]
LIST_ENTRY DereferenceList
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
struct _MM_IMAGE_SECTION_OBJECT * PMM_IMAGE_SECTION_OBJECT
#define SECTION_MAP_WRITE
#define RtlFillMemoryUlong(dst, len, val)
#define STATUS_INVALID_PARAMETER_5
NTSTATUS NTAPI MmGetFileNameForFileObject(IN PFILE_OBJECT FileObject, OUT POBJECT_NAME_INFORMATION *ModuleName)
NTSTATUS NTAPI MiRosUnmapViewInSystemSpace(IN PVOID MappedBase)
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
NTSTATUS NTAPI MiCheckSecuredVad(IN PMMVAD Vad, IN PVOID Base, IN SIZE_T Size, IN ULONG ProtectionMask)
FORCEINLINE VOID MiLockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
struct _LIST_ENTRY * Flink
NTSTATUS NTAPI MmUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress)
_In_ KPROCESSOR_MODE PreviousMode
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_Must_inspect_result_ _In_ ULONG Flags
NTSTATUS NTAPI MiInsertVadEx(_Inout_ PMMVAD Vad, _In_ ULONG_PTR *BaseAddress, _In_ SIZE_T ViewSize, _In_ ULONG_PTR HighestAddress, _In_ ULONG_PTR Alignment, _In_ ULONG AllocationType)
ACCESS_MASK MmMakeSectionAccess[8]
#define _SEH2_YIELD(STMT_)
NTSTATUS MiMapViewInSystemSpace(_In_ PVOID Section, _In_ PMMSESSION Session, _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, _Inout_ PSIZE_T ViewSize, _Inout_ PLARGE_INTEGER SectionOffset)
NTSTATUS NTAPI MiUnmapViewInSystemSpace(IN PMMSESSION Session, IN PVOID MappedBase)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
NTSTATUS NTAPI MmCreateSection(OUT PVOID *Section, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize, IN ULONG SectionPageProtection, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL, IN PFILE_OBJECT FileObject OPTIONAL)
ACCESS_MASK NTAPI MiArm3GetCorrectFileAccessMask(IN ACCESS_MASK SectionPageProtection)
ULONG NTAPI MiMakeProtectionMask(IN ULONG Protect)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T CommitSize
VOID NTAPI MiSegmentDelete(IN PSEGMENT Segment)
#define STATUS_PROCESS_IS_TERMINATING
#define ObDereferenceObject
NTSYSAPI VOID NTAPI RtlFreeAnsiString(PANSI_STRING AnsiString)
#define STATUS_SECTION_PROTECTION
#define ProbeForWriteHandle(Ptr)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
VOID NTAPI MiFillSystemPageDirectory(IN PVOID Base, IN SIZE_T NumberOfBytes)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define SECTION_EXTEND_SIZE
HARDWARE_PTE_ARMV6 TempPte
ULONG NTAPI MmDoesFileHaveUserWritableReferences(IN PSECTION_OBJECT_POINTERS SectionPointer)
#define STATUS_INVALID_FILE_FOR_SECTION
#define ProbeForReadLargeInteger(Ptr)
POBJECT_TYPE MmSectionObjectType
#define FSRTL_FSP_TOP_LEVEL_IRP
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#define _Outptr_result_bytebuffer_(s)
BOOLEAN NTAPI MmIsAddressValid(IN PVOID VirtualAddress)
LIST_ENTRY MmLoadedUserImageList
#define ExAllocatePoolWithTag(hernya, size, tag)
struct _CONTROL_AREA CONTROL_AREA
struct _SUBSECTION * PSUBSECTION
NTSTATUS NTAPI MmMapViewInSystemSpace(IN PVOID SectionObject, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
NTSTATUS NTAPI MmExtendSection(_In_ PVOID _Section, _Inout_ PLARGE_INTEGER NewSize)
#define BYTES_TO_PAGES(Size)
VOID NTAPI DbgkUnMapViewOfSection(IN PVOID BaseAddress)
UNICODE_STRING SectionFileName
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define STATUS_SECTION_NOT_IMAGE
VOID NTAPI IoSetTopLevelIrp(IN PIRP Irp)
#define InterlockedExchangeAddSizeT(a, b)
VOID FASTCALL KeReleaseGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex)
FORCEINLINE PMMPFN MI_PFN_ELEMENT(IN PFN_NUMBER Pfn)
PKGUARDED_MUTEX SystemSpaceViewLockPointer
#define InterlockedDecrement
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
PCONTROL_AREA ControlArea
NTSTATUS NTAPI MmCommitSessionMappedView(IN PVOID MappedBase, IN SIZE_T ViewSize)
#define ProbeForWritePointer(Ptr)
#define STATUS_INVALID_PARAMETER_1
#define KeEnterCriticalRegion()
ULONG GlobalOnlyPerSession
BOOLEAN NTAPI MmForceSectionClosed(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN BOOLEAN DelayClose)
#define memcpy(s1, s2, n)
ULONG MmCompatibleProtectionMask[8]
#define STATUS_INVALID_PAGE_PROTECTION
ULONG NumberOfMappedViews
VOID NTAPI MmGetImageInformation(OUT PSECTION_IMAGE_INFORMATION ImageInformation)
POBJECT_TYPE IoFileObjectType
_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
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
VOID NTAPI MiRemoveNode(IN PMMADDRESS_NODE Node, IN PMM_AVL_TABLE Table)
MMPTE ValidKernelPdeLocal
KGUARDED_MUTEX MmSectionCommitMutex
#define MM_EXECUTE_READWRITE
LIST_ENTRY InLoadOrderLinks
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_USER(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
#define ALIGN_DOWN_BY(size, align)
NTSYSAPI void WINAPI RtlClearBits(PRTL_BITMAP, ULONG, ULONG)
VOID NTAPI MiDeleteVirtualAddresses(IN ULONG_PTR Va, IN ULONG_PTR EndingAddress, IN PMMVAD Vad)
#define STATUS_IMAGE_NOT_AT_BASE
#define MI_SET_PFN_DELETED(x)
struct _FileName FileName
MMSUBSECTION_FLAGS SubsectionFlags
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
FORCEINLINE PMMSUPPORT MmGetKernelAddressSpace(VOID)
#define PAGE_WRITECOMBINE
#define STATUS_INVALID_VIEW_SIZE
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
#define KeLeaveCriticalRegion()
PRTL_BITMAP SystemSpaceBitMap
#define InterlockedIncrement
#define MiIsPteOnPdeBoundary(PointerPte)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
__kernel_entry _Inout_ _Inout_ PSIZE_T RegionSize
PSUBSECTION NTAPI MiLocateSubsection(IN PMMVAD Vad, IN ULONG_PTR Vpn)
#define STATUS_INVALID_ADDRESS
NTSTATUS NTAPI MiGetFileObjectForSectionAddress(IN PVOID Address, OUT PFILE_OBJECT *FileObject)
FORCEINLINE VOID MI_MAKE_PROTOTYPE_PTE(IN PMMPTE NewPte, IN PMMPTE PointerPte)
struct _MEMORY_SECTION_NAME MEMORY_SECTION_NAME
VOID NTAPI KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
#define MI_SYSTEM_VIEW_BUCKET_SIZE
ULONG NTAPI MiGetPageProtection(IN PMMPTE PointerPte)
#define STATUS_INVALID_PARAMETER_10
ULONG WritableUserReferences