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;
1324 ASSERT(ControlArea->u.Flags.GlobalOnlyPerSession == 0);
1327 ASSERT(ControlArea->u.Flags.Rom == 0);
1337 ASSERT(PteOffset < Segment->TotalNumberOfPtes);
1341 ASSERT(PteOffset < Subsection->PtesInSubsection);
1390 PteOffset += ViewSizeInPages - 1;
1391 ASSERT(PteOffset < Subsection->PtesInSubsection);
1410 while (PointerPte < LastPte)
1413 if (PointerPte->
u.
Long == 0)
1429 ASSERT(QuotaCharge >= QuotaExcess);
1430 QuotaCharge -= QuotaExcess;
1431 Segment->NumberOfCommittedPages += QuotaCharge;
1444 else if (Section->Address.StartingVpn != 0)
1447 StartAddress = Section->Address.StartingVpn +
SectionOffset->LowPart;
1481 ASSERT(Subsection->u.SubsectionFlags.SectorEndOffset == 0);
1484 if (Subsection->NumberOfFullSectors != Subsection->PtesInSubsection)
1487 DPRINT1(
"Mm: Subsection inconsistent (%x vs %x)\n",
1488 Subsection->NumberOfFullSectors, Subsection->PtesInSubsection);
1532 SizeLimit /=
sizeof(
MMPTE);
1547 sizeof(
MMPTE) * (PteCount - 1),
1560 ControlArea->
Segment = NewSegment;
1579 PointerPte = &NewSegment->
ThePtes[0];
1598 TempPte.u.Soft.Protection = ProtectionMask;
1650 DPRINT1(
"Address is a cache section!\n");
1659 DPRINT1(
"Address is not a section\n");
1665 if (!(ControlArea) || !(ControlArea->
u.
Flags.
Image))
1667 DPRINT1(
"Address is not a section\n");
1708 if (Vad->u.VadFlags.Spare != 0)
1723 DPRINT1(
"VAD is a cache section!\n");
1730 if (Vad->u.VadFlags.PrivateMemory == 1)
1732 DPRINT1(
"VAD is not a section\n");
1737 ControlArea = Vad->ControlArea;
1740 DPRINT1(
"Address is not a section\n");
1788 DPRINT1(
"Name query failed\n");
1810 if (((
PSECTION)Section)->
u.Flags.Image == 0)
1813 DPRINT1(
"Not an image section\n");
1820 DPRINT1(
"Not an image section\n");
1913 DPRINT(
"MiQueryMemorySectionName: ObReferenceObjectByHandle returned %x\n",
Status);
1921 SectionName = MemoryInformation;
1927 (
PWSTR)(SectionName + 1),
1943 (
PWSTR)(SectionName + 1),
1972 PreviousPte = *PointerPte;
1992 if (Pfn1->u3.e1.CacheAttribute ==
MiCached)
2003 else if (Pfn1->u3.e1.CacheAttribute ==
MiNonCached)
2041 if (!Pfn1->u3.e1.Modified)
2043 DPRINT1(
"FIXME: Mark PFN as dirty\n");
2072 PMMPTE PointerPte, LastPte;
2076 ULONG ProtectionMask, QuotaCharge = 0;
2088 ASSERT(FoundVad->u.VadFlags.PrivateMemory == 0);
2094 ASSERT(FoundVad->u2.VadFlags2.CopyOnWrite == 0);
2102 DPRINT1(
"Invalid section protect\n");
2118 if (PointerPte->
u.
Long)
2148 while (PointerPte <= LastPte)
2162 PteContents = *PointerPte;
2163 if (PteContents.
u.
Long == 0)
2175 TempPte.u.Soft.Protection = ProtectionMask;
2212 PointerPte->u.Soft.Protection = ProtectionMask;
2222 if ((QuotaCharge > 0) && (!DontCharge))
2224 FoundVad->u.VadFlags.CommitCharge -= QuotaCharge;
2225 Process->CommitCharge -= QuotaCharge;
2237 PMMPTE PointerPte, ProtoPte;
2238 PMMPDE PointerPde, SystemMapPde;
2249 while (NumberOfPtes)
2252 PteContents = *PointerPte;
2270 if (PointerPde->
u.
Long == 0)
2272 #if (_MI_PAGING_LEVELS == 2) 2311 PointerPte->
u.
Long = 0;
2325 ControlArea->NumberOfUserReferences--;
2326 ControlArea->NumberOfMappedViews--;
2427 ULONG ProtectionMask, ControlAreaSize,
Size, NonPagedCharge, PagedCharge;
2433 PVOID PreviousSectionPointer;
2475 if (!
File->SectionObjectPointer)
2531 PreviousSectionPointer =
File->SectionObjectPointer;
2532 File->SectionObjectPointer->DataSectionObject = ControlArea;
2565 File->SectionObjectPointer->DataSectionObject =
NULL;
2590 ASSERT(PreviousSectionPointer ==
File->SectionObjectPointer);
2593 if (!InputMaximumSize->QuadPart)
2601 Section.SizeOfSection.QuadPart = InputMaximumSize->QuadPart;
2624 UserRefIncremented =
TRUE;
2663 Section.Segment = NewSegment;
2664 Section.u.LongFlags = ControlArea->
u.
LongFlags;
2673 Section.u.Flags.UserWritable =
TRUE;
2700 NonPagedCharge +=
Size;
2712 (
PVOID*)&NewSection);
2722 ASSERT(Section.u.Flags.UserWritable == 1);
2727 if (UserRefIncremented)
2749 NewSection->Address.StartingVpn = 0;
2753 NewSection->u.Flags.UserReference =
TRUE;
2777 NewSection->u.Flags.Based = 0;
2784 NewSection->Address.EndingVpn = NewSection->Address.StartingVpn + NewSection->SizeOfSection.LowPart - 1;
2804 NewSection->u.Flags.BeingCreated = 0;
2815 NewSection->u.Flags.CopyOnWrite =
TRUE;
2823 ASSERT((
ULONG64)NewSection->SizeOfSection.QuadPart <= NewSection->Segment->SizeOfSegment);
2850 ULONG ProtectionMask;
2868 DPRINT1(
"MmMapViewOfArm3Section called with MEM_RESERVE, this is not implemented yet!!!\n");
2875 DPRINT1(
"Mapping protection is incompatible\n");
2883 DPRINT1(
"Section offset overflows\n");
2891 DPRINT1(
"Section offset is larger than section\n");
2906 DPRINT1(
"Section view won't fit\n");
2914 DPRINT1(
"Attempting to commit more than the view itself\n");
2921 DPRINT1(
"The view is larger than the section\n");
2929 DPRINT1(
"The protection is invalid\n");
2936 DPRINT1(
"Cannot write combine a pagefile-backed section\n");
3008 DPRINT1(
"Process is not in session\n");
3038 DPRINT1(
"Proess is not in session\n");
3091 PMMPTE LastProtoPte, PointerPte, ProtoPte;
3102 DPRINT1(
"Base outside of valid range\n");
3110 DPRINT1(
"Size outside of valid range\n");
3120 DPRINT1(
"Process is not in session\n");
3149 if ((StartAddress >=
Base) && (EndingAddress < (
Base +
Size)))
break;
3173 DPRINT1(
"Only page-filed backed sections can be commited\n");
3186 LastProtoPte = ProtoPte + QuotaCharge;
3189 DPRINT1(
"PTE is out of bounds\n");
3196 PointerPte = ProtoPte;
3197 while (PointerPte < LastProtoPte)
3199 if (PointerPte->
u.
Long) QuotaCharge--;
3218 PointerPte = ProtoPte;
3219 while (PointerPte < LastProtoPte)
3222 if (PointerPte->
u.
Long == 0)
3236 Segment->NumberOfCommittedPages += QuotaCharge;
3311 DPRINT1(
"No VAD at address 1 %p\n", File1MappedAsAnImage);
3321 DPRINT1(
"No VAD at address 2 %p\n", File2MappedAsFile);
3328 if (FileObject1 ==
NULL)
3330 DPRINT1(
"Failed to get file object for Address 1 %p\n", File1MappedAsAnImage);
3337 if (FileObject2 ==
NULL)
3339 DPRINT1(
"Failed to get file object for Address 2 %p\n", File2MappedAsFile);
3347 DPRINT1(
"Address 1 (%p) is not an image mapping\n", File1MappedAsAnImage);
3353 if (FileObject1->SectionObjectPointer == FileObject2->SectionObjectPointer)
3403 DPRINT1(
"Missing allocation type in allocation attributes\n");
3412 DPRINT1(
"Image allocation with invalid attributes\n");
3419 DPRINT1(
"Commit and reserve in the same time\n");
3429 DPRINT1(
"Sections don't support these protections\n");
3565 PVOID SafeBaseAddress;
3572 ULONG ProtectionMask;
3574 #if defined(_M_IX86) || defined(_M_AMD64) 3585 DPRINT1(
"Invalid inherit disposition\n");
3592 DPRINT1(
"Invalid allocation type\n");
3600 DPRINT1(
"Invalid page protection\n");
3643 DPRINT1(
"Kernel base not allowed\n");
3650 DPRINT1(
"Overflowing into kernel base not allowed\n");
3659 DPRINT1(
"Invalid zero bits\n");
3665 DPRINT1(
"Invalid zero bits\n");
3671 DPRINT1(
"Invalid zero bits\n");
3704 DPRINT1(
"Denying map past highest physical page.\n");
3715 DPRINT(
"BaseAddress is not at 64-kilobyte address boundary.\n");
3724 DPRINT(
"SectionOffset is not at 64-kilobyte address boundary.\n");
3748 (Section->AllocationAttributes &
SEC_IMAGE) &&
3792 DPRINT1(
"Trying to unmap a kernel view\n");
3831 SafeNewMaximumSize = *NewMaximumSize;
3843 SafeNewMaximumSize = *NewMaximumSize;
3856 if (!(Section->AllocationAttributes &
SEC_FILE))
3858 DPRINT1(
"Not extending a file\n");
3872 *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
NTSYSAPI void WINAPI RtlClearBits(PRTL_BITMAP, ULONG, ULONG)
#define MM_VIRTMEM_GRANULARITY
#define MM_INVALID_PROTECTION
ULONG NumberOfCommittedPages
PEVENT_COUNTER WaitingForDeletion
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define STATUS_INSUFFICIENT_RESOURCES
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
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 STATUS_NOT_IMPLEMENTED
#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
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)
NTSTATUS NTAPI ObQueryNameString(IN PVOID Object, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength)
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
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)
VOID NTAPI ObDereferenceObject(IN PVOID Object)
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
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)
NTSTATUS NTAPI MiCreatePagingFileMap(OUT PSEGMENT *Segment, IN PSIZE_T MaximumSize, IN ULONG ProtectionMask, IN ULONG AllocationAttributes)
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)
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
NTSTATUS NTAPI MiAddMappedPtes(IN PMMPTE FirstPte, IN PFN_NUMBER PteCount, IN PCONTROL_AREA ControlArea)
_Must_inspect_result_ _In_ ULONG Flags
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
#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 _MEMORY_AREA::@1743 Data
#define MI_SET_PROCESS2(x)
struct _MSUBSECTION MSUBSECTION
#define STATUS_MAPPED_ALIGNMENT
_In_opt_ PVOID _In_ PCSTR File
NTSTATUS NTAPI MmUnmapViewInSessionSpace(IN PVOID MappedBase)
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)
#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)
PVOID FORCEINLINE MiPteToAddress(PMMPTE PointerPte)
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
#define STATUS_INVALID_PARAMETER_2
#define MiProtoPteToPte(x)
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)
_Inout_ PFILE_OBJECT FileObject
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)
union _MMVAD_LONG::@2521 u4
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)
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
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
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]
PCONTROL_AREA ControlArea
#define _SEH2_YIELD(STMT_)
NTSTATUS NTAPI MiUnmapViewInSystemSpace(IN PMMSESSION Session, IN PVOID MappedBase)
#define NT_SUCCESS(StatCode)
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
struct _MEMORY_AREA::@1743::@1744 SectionData
static const UCHAR Index[8]
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)
union _MMVAD_LONG::@2518 u
BOOLEAN NTAPI MmIsAddressValid(IN PVOID VirtualAddress)
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
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)
union _MMVAD_LONG::@2519 u2
union _SUBSECTION::@2510 u
ULONG MmCompatibleProtectionMask[8]
PFN_NUMBER MmSystemPageDirectory[PD_COUNT]
#define STATUS_INVALID_PAGE_PROTECTION
ULONG NumberOfMappedViews
IN PVOID IN PVOID IN USHORT IN USHORT Size
NTSYSAPI ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP, ULONG, ULONG)
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)
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
__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)
VOID NTAPI KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
#define MI_SYSTEM_VIEW_BUCKET_SIZE
ULONG NTAPI MiGetPageProtection(IN PMMPTE PointerPte)
#define STATUS_INVALID_PARAMETER_10
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK DesiredAccess
ULONG WritableUserReferences
_Out_ PKAPC_STATE ApcState
_Must_inspect_result_ _In_ ULONG NewProtect
UNICODE_STRING FullDllName
#define STATUS_INVALID_PARAMETER_6
ULONG NumberOfUserReferences
VOID NTAPI MiCheckControlArea(IN PCONTROL_AREA ControlArea, IN KIRQL OldIrql)
#define STATUS_SECTION_NOT_EXTENDED