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");
422 PMMPTE PointerPte, ProtoPte, LastProtoPte, LastPte;
426 ASSERT(ControlArea->u.Flags.GlobalOnlyPerSession == 0);
427 ASSERT(ControlArea->u.Flags.Rom == 0);
432 ASSERT(ControlArea->NumberOfMappedViews >= 1);
433 ASSERT(ControlArea->NumberOfUserReferences >= 1);
434 ASSERT(ControlArea->NumberOfSectionReferences != 0);
435 ASSERT(ControlArea->u.Flags.BeingCreated == 0);
436 ASSERT(ControlArea->u.Flags.BeingDeleted == 0);
437 ASSERT(ControlArea->u.Flags.BeingPurged == 0);
440 PointerPte = FirstPte;
441 LastPte = FirstPte + PteCount;
449 while (PointerPte < LastPte)
452 if (ProtoPte >= LastProtoPte)
479 PMMPDE PointerPde, LastPde, SystemMapPde;
489 #if (_MI_PAGING_LEVELS == 2) 494 SystemMapPde = PointerPde;
499 while (PointerPde <= LastPde)
514 #if (_MI_PAGING_LEVELS == 2) 517 ParentPage =
MiPdeToPpe(PointerPde)->u.Hard.PageFrameNumber;
556 ASSERT(ControlArea->u.Flags.BeingPurged == 0);
559 ControlArea->NumberOfMappedViews++;
560 ControlArea->NumberOfUserReferences++;
561 ASSERT(ControlArea->NumberOfSectionReferences != 0);
578 ControlArea = Vad->ControlArea;
592 PteOffset = Vpn - Vad->StartingVpn;
596 ASSERT(PteOffset < 0xF0000000);
597 ASSERT(PteOffset < Subsection->PtesInSubsection);
610 PMMPTE PointerPte, LastPte, PteForProto;
617 SegmentFlags =
Segment->SegmentFlags;
618 ControlArea =
Segment->ControlArea;
633 LastPte = PointerPte +
Segment->NonExtendedPtes;
647 while (PointerPte < LastPte)
676 if (
TempPte.u.Soft.Transition == 1)
679 DPRINT(
"Releasing page for transition PTE %p\n", PointerPte);
698 else if (
TempPte.u.Soft.PageFileHigh != 0)
714 PointerPte->
u.
Long = 0;
735 if (!(ControlArea->NumberOfMappedViews) &&
736 !(ControlArea->NumberOfSectionReferences))
739 ASSERT(ControlArea->NumberOfUserReferences == 0);
745 ControlArea->u.Flags.BeingDeleted =
TRUE;
746 DeleteSegment =
TRUE;
756 ASSERT(ControlArea->WritableUserReferences == 0);
771 ControlArea->NumberOfMappedViews--;
772 ControlArea->NumberOfUserReferences--;
788 ControlArea = Vad->ControlArea;
866 DPRINT1(
"No VAD or invalid VAD\n");
895 DPRINT1(
"Trying to unmap protected VAD!\n");
943 PFN_NUMBER PageCount = 0, ActualPages = 0, PageFrameNumber;
954 while (StartPde <= EndPde)
976 _WARN(
"MiSessionCommitPageTables halfplemented for amd64")
984 while (StartPde <= EndPde)
1031 ASSERT(ActualPages <= PageCount);
1059 ULONG Buckets, SectionSize;
1076 SectionSize = ((
PSECTION)Section)->SizeOfSection.LowPart;
1085 DPRINT1(
"View is too large\n");
1098 DPRINT1(
"View is too large\n");
1108 DPRINT1(
"Out of system space\n");
1149 ControlArea->u.Flags.DebugSymbolsLoaded |= 1;
1169 FileName = &ControlArea->FilePointer->FileName;
1182 NextEntry = NextEntry->
Flink)
1271 ULONG QuotaCharge = 0, QuotaExcess = 0;
1272 PMMPTE PointerPte, LastPte;
1276 DPRINT(
"Mapping ARM3 data section\n");
1279 Segment = ControlArea->Segment;
1332 ASSERT(ControlArea->u.Flags.GlobalOnlyPerSession == 0);
1335 ASSERT(ControlArea->u.Flags.Rom == 0);
1345 ASSERT(PteOffset < Segment->TotalNumberOfPtes);
1349 ASSERT(PteOffset < Subsection->PtesInSubsection);
1398 PteOffset += ViewSizeInPages - 1;
1399 ASSERT(PteOffset < Subsection->PtesInSubsection);
1418 while (PointerPte < LastPte)
1421 if (PointerPte->
u.
Long == 0)
1437 ASSERT(QuotaCharge >= QuotaExcess);
1438 QuotaCharge -= QuotaExcess;
1439 Segment->NumberOfCommittedPages += QuotaCharge;
1452 else if (Section->Address.StartingVpn != 0)
1455 StartAddress = Section->Address.StartingVpn +
SectionOffset->LowPart;
1489 ASSERT(Subsection->u.SubsectionFlags.SectorEndOffset == 0);
1492 if (Subsection->NumberOfFullSectors != Subsection->PtesInSubsection)
1495 DPRINT1(
"Mm: Subsection inconsistent (%x vs %x)\n",
1496 Subsection->NumberOfFullSectors, Subsection->PtesInSubsection);
1542 SizeLimit /=
sizeof(
MMPTE);
1560 sizeof(
MMPTE) * (PteCount - 1),
1580 ControlArea->
Segment = NewSegment;
1599 PointerPte = &NewSegment->
ThePtes[0];
1618 TempPte.u.Soft.Protection = ProtectionMask;
1670 DPRINT1(
"Address is a cache section!\n");
1679 DPRINT1(
"Address is not a section\n");
1685 if (!(ControlArea) || !(ControlArea->
u.
Flags.
Image))
1687 DPRINT1(
"Address is not a section\n");
1728 if (Vad->u.VadFlags.Spare != 0)
1743 DPRINT1(
"VAD is a cache section!\n");
1750 if (Vad->u.VadFlags.PrivateMemory == 1)
1752 DPRINT1(
"VAD is not a section\n");
1757 ControlArea = Vad->ControlArea;
1760 DPRINT1(
"Address is not a section\n");
1808 DPRINT1(
"Name query failed\n");
1830 if (((
PSECTION)Section)->
u.Flags.Image == 0)
1833 DPRINT1(
"Not an image section\n");
1840 DPRINT1(
"Not an image section\n");
1933 DPRINT(
"MiQueryMemorySectionName: ObReferenceObjectByHandle returned %x\n",
Status);
1941 SectionName = MemoryInformation;
1947 (
PWSTR)(SectionName + 1),
1963 (
PWSTR)(SectionName + 1),
1992 PreviousPte = *PointerPte;
2012 if (Pfn1->u3.e1.CacheAttribute ==
MiCached)
2023 else if (Pfn1->u3.e1.CacheAttribute ==
MiNonCached)
2061 if (!Pfn1->u3.e1.Modified)
2063 DPRINT1(
"FIXME: Mark PFN as dirty\n");
2092 PMMPTE PointerPte, LastPte;
2096 ULONG ProtectionMask, QuotaCharge = 0;
2108 ASSERT(FoundVad->u.VadFlags.PrivateMemory == 0);
2114 ASSERT(FoundVad->u2.VadFlags2.CopyOnWrite == 0);
2122 DPRINT1(
"Invalid section protect\n");
2138 if (PointerPte->
u.
Long)
2168 while (PointerPte <= LastPte)
2182 PteContents = *PointerPte;
2183 if (PteContents.
u.
Long == 0)
2195 TempPte.u.Soft.Protection = ProtectionMask;
2242 if ((QuotaCharge > 0) && (!DontCharge))
2244 FoundVad->u.VadFlags.CommitCharge -= QuotaCharge;
2245 Process->CommitCharge -= QuotaCharge;
2257 PMMPTE PointerPte, ProtoPte;
2258 PMMPDE PointerPde, SystemMapPde;
2269 while (NumberOfPtes)
2272 PteContents = *PointerPte;
2290 if (PointerPde->
u.
Long == 0)
2292 #if (_MI_PAGING_LEVELS == 2) 2331 PointerPte->
u.
Long = 0;
2345 ControlArea->NumberOfUserReferences--;
2346 ControlArea->NumberOfMappedViews--;
2447 ULONG ProtectionMask, ControlAreaSize,
Size, NonPagedCharge, PagedCharge;
2453 PVOID PreviousSectionPointer;
2495 if (!
File->SectionObjectPointer)
2551 PreviousSectionPointer =
File->SectionObjectPointer;
2552 File->SectionObjectPointer->DataSectionObject = ControlArea;
2585 File->SectionObjectPointer->DataSectionObject =
NULL;
2610 ASSERT(PreviousSectionPointer ==
File->SectionObjectPointer);
2613 if (!InputMaximumSize->QuadPart)
2621 Section.SizeOfSection.QuadPart = InputMaximumSize->QuadPart;
2644 UserRefIncremented =
TRUE;
2683 Section.Segment = NewSegment;
2684 Section.u.LongFlags = ControlArea->
u.
LongFlags;
2693 Section.u.Flags.UserWritable =
TRUE;
2720 NonPagedCharge +=
Size;
2732 (
PVOID*)&NewSection);
2742 ASSERT(Section.u.Flags.UserWritable == 1);
2747 if (UserRefIncremented)
2769 NewSection->Address.StartingVpn = 0;
2773 NewSection->u.Flags.UserReference =
TRUE;
2797 NewSection->u.Flags.Based = 0;
2804 NewSection->Address.EndingVpn = NewSection->Address.StartingVpn + NewSection->SizeOfSection.LowPart - 1;
2824 NewSection->u.Flags.BeingCreated = 0;
2835 NewSection->u.Flags.CopyOnWrite =
TRUE;
2843 ASSERT((
ULONG64)NewSection->SizeOfSection.QuadPart <= NewSection->Segment->SizeOfSegment);
2870 ULONG ProtectionMask;
2888 DPRINT1(
"MmMapViewOfArm3Section called with MEM_RESERVE, this is not implemented yet!!!\n");
2895 DPRINT1(
"Mapping protection is incompatible\n");
2903 DPRINT1(
"Section offset overflows\n");
2911 DPRINT1(
"Section offset is larger than section\n");
2926 DPRINT1(
"Section view won't fit\n");
2934 DPRINT1(
"Attempting to commit more than the view itself\n");
2941 DPRINT1(
"The view is larger than the section\n");
2949 DPRINT1(
"The protection is invalid\n");
2956 DPRINT1(
"Cannot write combine a pagefile-backed section\n");
3028 DPRINT1(
"Process is not in session\n");
3058 DPRINT1(
"Proess is not in session\n");
3111 PMMPTE LastProtoPte, PointerPte, ProtoPte;
3122 DPRINT1(
"Base outside of valid range\n");
3130 DPRINT1(
"Size outside of valid range\n");
3140 DPRINT1(
"Process is not in session\n");
3169 if ((StartAddress >=
Base) && (EndingAddress < (
Base +
Size)))
break;
3193 DPRINT1(
"Only page-filed backed sections can be commited\n");
3206 LastProtoPte = ProtoPte + QuotaCharge;
3209 DPRINT1(
"PTE is out of bounds\n");
3216 PointerPte = ProtoPte;
3217 while (PointerPte < LastProtoPte)
3219 if (PointerPte->
u.
Long) QuotaCharge--;
3238 PointerPte = ProtoPte;
3239 while (PointerPte < LastProtoPte)
3242 if (PointerPte->
u.
Long == 0)
3256 Segment->NumberOfCommittedPages += QuotaCharge;
3331 DPRINT1(
"No VAD at address 1 %p\n", File1MappedAsAnImage);
3341 DPRINT1(
"No VAD at address 2 %p\n", File2MappedAsFile);
3348 if (FileObject1 ==
NULL)
3350 DPRINT1(
"Failed to get file object for Address 1 %p\n", File1MappedAsAnImage);
3357 if (FileObject2 ==
NULL)
3359 DPRINT1(
"Failed to get file object for Address 2 %p\n", File2MappedAsFile);
3367 DPRINT1(
"Address 1 (%p) is not an image mapping\n", File1MappedAsAnImage);
3373 if (FileObject1->SectionObjectPointer == FileObject2->SectionObjectPointer)
3423 DPRINT1(
"Missing allocation type in allocation attributes\n");
3432 DPRINT1(
"Image allocation with invalid attributes\n");
3439 DPRINT1(
"Commit and reserve in the same time\n");
3449 DPRINT1(
"Sections don't support these protections\n");
3585 PVOID SafeBaseAddress;
3592 ULONG ProtectionMask;
3594 #if defined(_M_IX86) || defined(_M_AMD64) 3605 DPRINT1(
"Invalid inherit disposition\n");
3612 DPRINT1(
"Invalid allocation type\n");
3620 DPRINT1(
"Invalid page protection\n");
3663 DPRINT1(
"Kernel base not allowed\n");
3670 DPRINT1(
"Overflowing into kernel base not allowed\n");
3679 DPRINT1(
"Invalid zero bits\n");
3685 DPRINT1(
"Invalid zero bits\n");
3691 DPRINT1(
"Invalid zero bits\n");
3724 DPRINT1(
"Denying map past highest physical page.\n");
3735 DPRINT(
"BaseAddress is not at 64-kilobyte address boundary.\n");
3744 DPRINT(
"SectionOffset is not at 64-kilobyte address boundary.\n");
3768 (Section->AllocationAttributes &
SEC_IMAGE) &&
3812 DPRINT1(
"Trying to unmap a kernel view\n");
3851 SafeNewMaximumSize = *NewMaximumSize;
3863 SafeNewMaximumSize = *NewMaximumSize;
3876 if (!(Section->AllocationAttributes &
SEC_FILE))
3878 DPRINT1(
"Not extending a file\n");
3892 *NewMaximumSize = SafeNewMaximumSize;
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 * u
_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()
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)
union _MEMORY_AREA::@1788 Data
#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)
union _MMVAD_LONG::@2583 u2
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)
#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)
VOID NTAPI MiInsertBasedSection(IN PSECTION Section)
FORCEINLINE VOID MiReleasePfnLock(_In_ KIRQL OldIrql)
NTSTATUS NTAPI MiSessionCommitPageTables(IN PVOID StartVa, IN PVOID EndVa)
#define MEMORY_AREA_CACHE
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
struct _MEMORY_AREA::@1788::@1789 SectionData
NTSTATUS NTAPI MiAddMappedPtes(IN PMMPTE FirstPte, IN PFN_NUMBER PteCount, IN PCONTROL_AREA ControlArea)
return STATUS_NOT_IMPLEMENTED
#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
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
union _CONTROL_AREA::@2572 u
#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
#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]
union _SUBSECTION::@2574 u
PCONTROL_AREA ControlArea
#define _SEH2_YIELD(STMT_)
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
struct _ROS_SECTION_OBJECT * PROS_SECTION_OBJECT
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)
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)
#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
#define SEC_PHYSICALMEMORY
_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
const ULONG MmProtectToValue[32]
_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
NTSTATUS NTAPI MiMapViewInSystemSpace(IN PVOID Section, IN PMMSESSION Session, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
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)
union _MMVAD_LONG::@2582 u
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
_Out_ PKAPC_STATE ApcState
_Must_inspect_result_ _In_ ULONG NewProtect
UNICODE_STRING FullDllName
#define STATUS_INVALID_PARAMETER_6