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 Mask1, Mask2, ProtectMask;
232 Session = InputSession;
304 if ((Session->SystemSpaceHashEntries + 8) > Session->SystemSpaceHashSize)
307 HashSize = Session->SystemSpaceHashSize * 2;
310 OldTable = Session->SystemSpaceViewTable;
318 if (!Session->SystemSpaceViewTable)
321 Session->SystemSpaceViewTable = OldTable;
327 Session->SystemSpaceHashSize = HashSize;
328 Session->SystemSpaceHashKey = Session->SystemSpaceHashSize - 1;
331 for (
i = 0;
i < Session->SystemSpaceHashSize / 2;
i++)
337 Hash = (OldTable[
i].
Entry >> 16) % Session->SystemSpaceHashKey;
338 while (Session->SystemSpaceViewTable[
Hash].Entry)
341 if (++
Hash >= Session->SystemSpaceHashSize)
Hash = 0;
345 Session->SystemSpaceViewTable[
Hash] = OldTable[
i];
355 if (Session->SystemSpaceHashEntries == Session->SystemSpaceHashSize)
357 DPRINT1(
"Ran out of system view hash entries\n");
367 Session->BitmapFailures++;
368 DPRINT1(
"Out of system view space\n");
378 Hash = (
Entry >> 16) % Session->SystemSpaceHashKey;
381 while (Session->SystemSpaceViewTable[
Hash].Entry)
384 if (++
Hash >= Session->SystemSpaceHashSize)
Hash = 0;
388 Session->SystemSpaceViewTable[
Hash].Entry =
Entry;
389 Session->SystemSpaceViewTable[
Hash].ControlArea = ControlArea;
392 Session->SystemSpaceHashEntries++;
405 PMMPTE PointerPte, ProtoPte, LastProtoPte, LastPte;
412 ASSERT(ControlArea->u.Flags.GlobalOnlyPerSession == 0);
413 ASSERT(ControlArea->u.Flags.Rom == 0);
418 ASSERT(ControlArea->NumberOfMappedViews >= 1);
419 ASSERT(ControlArea->NumberOfUserReferences >= 1);
420 ASSERT(ControlArea->NumberOfSectionReferences != 0);
421 ASSERT(ControlArea->u.Flags.BeingCreated == 0);
422 ASSERT(ControlArea->u.Flags.BeingDeleted == 0);
423 ASSERT(ControlArea->u.Flags.BeingPurged == 0);
426 PointerPte = FirstPte;
427 LastPte = FirstPte + PteCount;
435 while (PointerPte < LastPte)
438 if (ProtoPte >= LastProtoPte)
465 PMMPDE PointerPde, LastPde, SystemMapPde;
475#if (_MI_PAGING_LEVELS == 2)
480 SystemMapPde = PointerPde;
485 while (PointerPde <= LastPde)
500#if (_MI_PAGING_LEVELS == 2)
542 ASSERT(ControlArea->u.Flags.BeingPurged == 0);
545 ControlArea->NumberOfMappedViews++;
546 ControlArea->NumberOfUserReferences++;
547 ASSERT(ControlArea->NumberOfSectionReferences != 0);
564 ControlArea = Vad->ControlArea;
578 PteOffset = Vpn - Vad->StartingVpn;
582 ASSERT(PteOffset < 0xF0000000);
583 ASSERT(PteOffset < Subsection->PtesInSubsection);
596 PMMPTE PointerPte, LastPte, PteForProto;
603 SegmentFlags =
Segment->SegmentFlags;
604 ControlArea =
Segment->ControlArea;
619 LastPte = PointerPte +
Segment->NonExtendedPtes;
633 while (PointerPte < LastPte)
662 if (
TempPte.u.Soft.Transition == 1)
665 DPRINT(
"Releasing page for transition PTE %p\n", PointerPte);
684 else if (
TempPte.u.Soft.PageFileHigh != 0)
700 PointerPte->
u.
Long = 0;
721 if (!(ControlArea->NumberOfMappedViews) &&
722 !(ControlArea->NumberOfSectionReferences))
725 ASSERT(ControlArea->NumberOfUserReferences == 0);
731 ControlArea->u.Flags.BeingDeleted =
TRUE;
732 DeleteSegment =
TRUE;
742 ASSERT(ControlArea->WritableUserReferences == 0);
757 ControlArea->NumberOfMappedViews--;
758 ControlArea->NumberOfUserReferences--;
774 ControlArea = Vad->ControlArea;
854 DPRINT1(
"No VAD or invalid VAD\n");
883 DPRINT1(
"Trying to unmap protected VAD!\n");
932 PFN_NUMBER PageCount = 0, ActualPages = 0, PageFrameNumber;
943 while (StartPde <= EndPde)
965_WARN(
"MiSessionCommitPageTables halfplemented for amd64")
973 while (StartPde <= EndPde)
1020 ASSERT(ActualPages <= PageCount);
1067 SectionSize = ((
PSECTION)Section)->SizeOfSection.QuadPart;
1075 DPRINT1(
"Section end is too far away from the specified offset.\n");
1085 DPRINT1(
"Integer overflow between size & offset!\n");
1094 DPRINT1(
"View is too large\n");
1107 DPRINT1(
"View is too large\n");
1117 DPRINT1(
"Out of system space\n");
1159 ControlArea->u.Flags.DebugSymbolsLoaded |= 1;
1179 FileName = &ControlArea->FilePointer->FileName;
1192 NextEntry = NextEntry->
Flink)
1283 ULONG QuotaCharge = 0, QuotaExcess = 0;
1284 PMMPTE PointerPte, LastPte;
1288 DPRINT(
"Mapping ARM3 data section\n");
1291 Segment = ControlArea->Segment;
1345 ASSERT(ControlArea->u.Flags.GlobalOnlyPerSession == 0);
1348 ASSERT(ControlArea->u.Flags.Rom == 0);
1358 ASSERT(PteOffset < Segment->TotalNumberOfPtes);
1362 ASSERT(PteOffset < Subsection->PtesInSubsection);
1411 PteOffset += ViewSizeInPages - 1;
1412 ASSERT(PteOffset < Subsection->PtesInSubsection);
1431 while (PointerPte < LastPte)
1434 if (PointerPte->
u.
Long == 0)
1450 ASSERT(QuotaCharge >= QuotaExcess);
1451 QuotaCharge -= QuotaExcess;
1452 Segment->NumberOfCommittedPages += QuotaCharge;
1465 else if (Section->Address.StartingVpn != 0)
1468 StartAddress = Section->Address.StartingVpn +
SectionOffset->LowPart;
1482 Segment->NumberOfCommittedPages -= QuotaCharge;
1500 Segment->NumberOfCommittedPages -= QuotaCharge;
1522 ASSERT(Subsection->u.SubsectionFlags.SectorEndOffset == 0);
1525 if (Subsection->NumberOfFullSectors != Subsection->PtesInSubsection)
1528 DPRINT1(
"Mm: Subsection inconsistent (%x vs %x)\n",
1529 Subsection->NumberOfFullSectors, Subsection->PtesInSubsection);
1575 SizeLimit /=
sizeof(
MMPTE);
1593 sizeof(
MMPTE) * (PteCount - 1),
1613 ControlArea->
Segment = NewSegment;
1632 PointerPte = &NewSegment->
ThePtes[0];
1651 TempPte.u.Soft.Protection = ProtectionMask;
1702 DPRINT1(
"Address is a cache section!\n");
1715 DPRINT1(
"Address is not a section\n");
1721 if (!(ControlArea) || !(ControlArea->
u.
Flags.
Image))
1723 DPRINT1(
"Address is not a section\n");
1763 if (Vad->u.VadFlags.Spare != 0)
1777 DPRINT1(
"VAD is a cache section!\n");
1787 if (Vad->u.VadFlags.PrivateMemory == 1)
1789 DPRINT1(
"VAD is not a section\n");
1794 ControlArea = Vad->ControlArea;
1797 DPRINT1(
"Address is not a section\n");
1851 DPRINT1(
"Name query failed\n");
1874 DPRINT1(
"Not an image section\n");
1969 DPRINT(
"MiQueryMemorySectionName: ObReferenceObjectByHandle returned %x\n",
Status);
1977 SectionName = MemoryInformation;
1983 (
PWSTR)(SectionName + 1),
1999 (
PWSTR)(SectionName + 1),
2028 PreviousPte = *PointerPte;
2048 if (Pfn1->u3.e1.CacheAttribute ==
MiCached)
2059 else if (Pfn1->u3.e1.CacheAttribute ==
MiNonCached)
2067 ProtectionMask &= ~MM_NOACCESS;
2097 if (!Pfn1->u3.e1.Modified)
2099 DPRINT1(
"FIXME: Mark PFN as dirty\n");
2128 PMMPTE PointerPte, LastPte;
2132 ULONG ProtectionMask, QuotaCharge = 0;
2144 ASSERT(FoundVad->u.VadFlags.PrivateMemory == 0);
2150 ASSERT(FoundVad->u2.VadFlags2.CopyOnWrite == 0);
2158 DPRINT1(
"Invalid section protect\n");
2174 if (PointerPte->
u.
Long)
2204 while (PointerPte <= LastPte)
2218 PteContents = *PointerPte;
2219 if (PteContents.
u.
Long == 0)
2231 TempPte.u.Soft.Protection = ProtectionMask;
2278 if ((QuotaCharge > 0) && (!DontCharge))
2280 FoundVad->u.VadFlags.CommitCharge -= QuotaCharge;
2281 Process->CommitCharge -= QuotaCharge;
2293 PMMPTE PointerPte, ProtoPte;
2294 PMMPDE PointerPde, SystemMapPde;
2305 while (NumberOfPtes)
2308 PteContents = *PointerPte;
2326 if (PointerPde->
u.
Long == 0)
2328#if (_MI_PAGING_LEVELS == 2)
2367 PointerPte->
u.
Long = 0;
2381 ControlArea->NumberOfUserReferences--;
2382 ControlArea->NumberOfMappedViews--;
2400 Hash =
Entry % Session->SystemSpaceHashKey;
2401 while ((Session->SystemSpaceViewTable[
Hash].Entry >> 16) !=
Entry)
2404 if (++
Hash >= Session->SystemSpaceHashSize)
2421 Session->SystemSpaceHashEntries--;
2424 Size = Session->SystemSpaceViewTable[
Hash].Entry & 0xFFFF;
2425 Session->SystemSpaceViewTable[
Hash].Entry = 0;
2428 *ControlArea = Session->SystemSpaceViewTable[
Hash].ControlArea;
2483 ULONG ProtectionMask, ControlAreaSize,
Size, NonPagedCharge, PagedCharge;
2489 PVOID PreviousSectionPointer;
2513 DPRINT1(
"Invalid protection mask\n");
2536 if (!
File->SectionObjectPointer)
2592 PreviousSectionPointer =
File->SectionObjectPointer;
2593 File->SectionObjectPointer->DataSectionObject = ControlArea;
2626 File->SectionObjectPointer->DataSectionObject =
NULL;
2651 ASSERT(PreviousSectionPointer ==
File->SectionObjectPointer);
2654 if (!InputMaximumSize->QuadPart)
2662 Section.SizeOfSection.QuadPart = InputMaximumSize->QuadPart;
2685 UserRefIncremented =
TRUE;
2724 Section.Segment = NewSegment;
2725 Section.u.LongFlags = ControlArea->
u.
LongFlags;
2734 Section.u.Flags.UserWritable =
TRUE;
2761 NonPagedCharge +=
Size;
2773 (
PVOID*)&NewSection);
2783 ASSERT(Section.u.Flags.UserWritable == 1);
2788 if (UserRefIncremented)
2911 ULONG ProtectionMask;
2929 DPRINT1(
"MmMapViewOfArm3Section called with MEM_RESERVE, this is not implemented yet!!!\n");
2936 DPRINT1(
"Mapping protection is incompatible\n");
2944 DPRINT1(
"Section offset overflows\n");
2952 DPRINT1(
"Section offset is larger than section\n");
2967 DPRINT1(
"Section view won't fit\n");
2975 DPRINT1(
"Attempting to commit more than the view itself\n");
2982 DPRINT1(
"The view is larger than the section\n");
2990 DPRINT1(
"The protection is invalid\n");
2997 DPRINT1(
"Cannot write combine a pagefile-backed section\n");
3070 DPRINT1(
"Process is not in session\n");
3102 DPRINT1(
"Proess is not in session\n");
3159 PMMPTE LastProtoPte, PointerPte, ProtoPte;
3170 DPRINT1(
"Base outside of valid range\n");
3178 DPRINT1(
"Size outside of valid range\n");
3188 DPRINT1(
"Process is not in session\n");
3217 if ((StartAddress >=
Base) && (EndingAddress < (
Base +
Size)))
break;
3241 DPRINT1(
"Only page-filed backed sections can be commited\n");
3254 LastProtoPte = ProtoPte + QuotaCharge;
3257 DPRINT1(
"PTE is out of bounds\n");
3264 PointerPte = ProtoPte;
3265 while (PointerPte < LastProtoPte)
3267 if (PointerPte->
u.
Long) QuotaCharge--;
3286 PointerPte = ProtoPte;
3287 while (PointerPte < LastProtoPte)
3290 if (PointerPte->
u.
Long == 0)
3304 Segment->NumberOfCommittedPages += QuotaCharge;
3379 DPRINT1(
"No VAD at address 1 %p\n", File1MappedAsAnImage);
3389 DPRINT1(
"No VAD at address 2 %p\n", File2MappedAsFile);
3396 if (FileObject1 ==
NULL)
3398 DPRINT1(
"Failed to get file object for Address 1 %p\n", File1MappedAsAnImage);
3405 if (FileObject2 ==
NULL)
3407 DPRINT1(
"Failed to get file object for Address 2 %p\n", File2MappedAsFile);
3415 DPRINT1(
"Address 1 (%p) is not an image mapping\n", File1MappedAsAnImage);
3421 if (FileObject1->SectionObjectPointer == FileObject2->SectionObjectPointer)
3471 DPRINT1(
"Missing allocation type in allocation attributes\n");
3480 DPRINT1(
"Image allocation with invalid attributes\n");
3487 DPRINT1(
"Commit and reserve in the same time\n");
3497 DPRINT1(
"Sections don't support these protections\n");
3633 PVOID SafeBaseAddress;
3640 ULONG ProtectionMask;
3642#if defined(_M_IX86) || defined(_M_AMD64)
3653 DPRINT1(
"Invalid inherit disposition\n");
3660 DPRINT1(
"Invalid allocation type\n");
3668 DPRINT1(
"Invalid page protection\n");
3711 DPRINT1(
"Kernel base not allowed\n");
3718 DPRINT1(
"Overflowing into kernel base not allowed\n");
3727 DPRINT1(
"Invalid zero bits\n");
3733 DPRINT1(
"Invalid zero bits\n");
3739 DPRINT1(
"Invalid zero bits\n");
3771 DPRINT1(
"Denying map past highest physical page.\n");
3782 DPRINT(
"BaseAddress is not at 64-kilobyte address boundary.\n");
3791 DPRINT(
"SectionOffset is not at 64-kilobyte address boundary.\n");
3858 DPRINT1(
"Trying to unmap a kernel view\n");
3897 SafeNewMaximumSize = *NewMaximumSize;
3909 SafeNewMaximumSize = *NewMaximumSize;
3931 *NewMaximumSize = SafeNewMaximumSize;
NTSTATUS NTAPI MmUnmapViewInSystemSpace(IN PVOID MappedBase)
static PFILE_OBJECT MiGetFileObjectForVad(_In_ PMMVAD Vad)
KGUARDED_MUTEX MmSectionBasedMutex
NTSTATUS NTAPI MiQueryMemorySectionName(IN HANDLE ProcessHandle, IN PVOID BaseAddress, OUT PVOID MemoryInformation, IN SIZE_T MemoryInformationLength, OUT PSIZE_T ReturnLength)
CHAR MmUserProtectionToMask1[16]
NTSTATUS MiMapViewInSystemSpace(_In_ PVOID Section, _In_ PMMSESSION Session, _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, _Inout_ PSIZE_T ViewSize, _Inout_ PLARGE_INTEGER SectionOffset)
BOOLEAN NTAPI MmForceSectionClosed(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN BOOLEAN DelayClose)
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
NTSTATUS NTAPI MiCheckPurgeAndUpMapCount(IN PCONTROL_AREA ControlArea, IN BOOLEAN FailIfSystemViews)
VOID NTAPI MiFillSystemPageDirectory(IN PVOID Base, IN SIZE_T NumberOfBytes)
BOOLEAN NTAPI MiIsProtectionCompatible(IN ULONG SectionPageProtection, IN ULONG NewSectionPageProtection)
ACCESS_MASK MmMakeSectionAccess[8]
NTSTATUS NTAPI MmGetFileNameForSection(IN PVOID Section, OUT POBJECT_NAME_INFORMATION *ModuleName)
ULONG MmCompatibleProtectionMask[8]
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 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)
static NTSTATUS NTAPI MiCreatePagingFileMap(OUT PSEGMENT *Segment, IN PLARGE_INTEGER MaximumSize, IN ULONG ProtectionMask, IN ULONG AllocationAttributes)
NTSTATUS NTAPI NtOpenSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
NTSTATUS NTAPI MiUnmapViewInSystemSpace(IN PMMSESSION Session, IN PVOID MappedBase)
VOID NTAPI MiSetControlAreaSymbolsLoaded(IN PCONTROL_AREA ControlArea)
VOID NTAPI MiFlushTbAndCapture(IN PMMVAD FoundVad, IN PMMPTE PointerPte, IN ULONG ProtectionMask, IN PMMPFN Pfn1, IN BOOLEAN UpdateDirty)
ULONG NTAPI MmDoesFileHaveUserWritableReferences(IN PSECTION_OBJECT_POINTERS SectionPointer)
ULONG NTAPI MiRemoveFromSystemSpace(IN PMMSESSION Session, IN PVOID Base, OUT PCONTROL_AREA *ControlArea)
NTSTATUS NTAPI MiMapViewOfDataSection(IN PCONTROL_AREA ControlArea, IN PEPROCESS Process, IN PVOID *BaseAddress, IN PLARGE_INTEGER SectionOffset, IN PSIZE_T ViewSize, IN PSECTION Section, IN SECTION_INHERIT InheritDisposition, IN ULONG ProtectionMask, IN SIZE_T CommitSize, IN ULONG_PTR ZeroBits, IN ULONG AllocationType)
VOID NTAPI MiLoadUserSymbols(IN PCONTROL_AREA ControlArea, IN PVOID BaseAddress, IN PEPROCESS Process)
VOID NTAPI MiRemoveMappedView(IN PEPROCESS CurrentProcess, IN PMMVAD Vad)
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)
static NTSTATUS MiAddMappedPtes(IN PMMPTE FirstPte, IN PFN_NUMBER PteCount, IN PCONTROL_AREA ControlArea, IN LONGLONG SectionOffset)
CHAR MmUserProtectionToMask2[16]
VOID NTAPI MmGetImageInformation(OUT PSECTION_IMAGE_INFORMATION ImageInformation)
VOID NTAPI MiDeleteARM3Section(PVOID ObjectBody)
VOID NTAPI MiDereferenceControlArea(IN PCONTROL_AREA ControlArea)
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)
VOID NTAPI MiSubsectionConsistent(IN PSUBSECTION Subsection)
NTSTATUS NTAPI MiCreateDataFileMap(IN PFILE_OBJECT File, OUT PSEGMENT *Segment, IN PSIZE_T MaximumSize, IN ULONG SectionPageProtection, IN ULONG AllocationAttributes, IN ULONG IgnoreFileSizing)
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 MmUnmapViewInSessionSpace(IN PVOID MappedBase)
NTSTATUS NTAPI MmMapViewInSessionSpace(IN PVOID Section, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
NTSTATUS NTAPI MiSessionCommitPageTables(IN PVOID StartVa, IN PVOID EndVa)
NTSTATUS NTAPI MiGetFileObjectForSectionAddress(IN PVOID Address, OUT PFILE_OBJECT *FileObject)
PSUBSECTION NTAPI MiLocateSubsection(IN PMMVAD Vad, IN ULONG_PTR Vpn)
NTSTATUS NTAPI NtAreMappedFilesTheSame(IN PVOID File1MappedAsAnImage, IN PVOID File2MappedAsFile)
VOID NTAPI MiCheckControlArea(IN PCONTROL_AREA ControlArea, IN KIRQL OldIrql)
NTSTATUS NTAPI MmGetFileNameForAddress(IN PVOID Address, OUT PUNICODE_STRING ModuleName)
KGUARDED_MUTEX MmSectionCommitMutex
BOOLEAN NTAPI MiInitializeSystemSpaceMap(IN PMMSESSION InputSession OPTIONAL)
NTSTATUS NTAPI MmCommitSessionMappedView(IN PVOID MappedBase, IN SIZE_T ViewSize)
NTSTATUS NTAPI MiUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress, IN ULONG Flags)
NTSTATUS NTAPI MmGetFileNameForFileObject(IN PFILE_OBJECT FileObject, OUT POBJECT_NAME_INFORMATION *ModuleName)
PFILE_OBJECT NTAPI MmGetFileObjectForSection(IN PVOID SectionObject)
NTSTATUS NTAPI MmUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress)
ACCESS_MASK MmMakeFileAccess[8]
PVOID NTAPI MiInsertInSystemSpace(IN PMMSESSION Session, IN ULONG Buckets, IN PCONTROL_AREA ControlArea)
BOOLEAN NTAPI MmDisableModifiedWriteOfSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer)
MM_AVL_TABLE MmSectionBasedRoot
VOID NTAPI MiRemoveMappedPtes(IN PVOID BaseAddress, IN ULONG NumberOfPtes, IN PCONTROL_AREA ControlArea, IN PMMSUPPORT Ws)
VOID NTAPI MiSegmentDelete(IN PSEGMENT Segment)
ULONG NTAPI MiMakeProtectionMask(IN ULONG Protect)
NTSTATUS NTAPI NtExtendSection(IN HANDLE SectionHandle, IN OUT PLARGE_INTEGER NewMaximumSize)
#define ALIGN_DOWN_BY(size, align)
static const CHAR FileNameA[]
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
HARDWARE_PTE_ARMV6 TempPte
HARDWARE_PDE_ARMV6 TempPde
#define InterlockedIncrement
#define InterlockedDecrement
#define MM_HIGHEST_USER_ADDRESS
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
VOID NTAPI DbgkUnMapViewOfSection(IN PVOID BaseAddress)
VOID NTAPI DbgkMapViewOfSection(IN PVOID Section, IN PVOID BaseAddress, IN ULONG SectionOffset, IN ULONG_PTR ViewSize)
#define NT_SUCCESS(StatCode)
static int Hash(const char *)
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define PsGetCurrentThread()
#define KeGetCurrentIrql()
#define ExAcquireResourceExclusiveLite(res, wait)
#define ExGetPreviousMode
struct _FileName FileName
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_Must_inspect_result_ _In_ PDEVICE_OBJECT _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
_Must_inspect_result_ _Outptr_ PVOID * SectionObject
#define FSRTL_FSP_TOP_LEVEL_IRP
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
VOID FASTCALL KeReleaseGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
#define EXCEPTION_EXECUTE_HANDLER
#define PROCESS_QUERY_INFORMATION
#define PROCESS_VM_OPERATION
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
NTSYSAPI void WINAPI DbgBreakPoint(void)
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
NTSYSAPI ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP, ULONG, ULONG)
NTSYSAPI void WINAPI RtlClearBits(PRTL_BITMAP, ULONG, ULONG)
#define InterlockedExchangeAddSizeT(a, b)
POBJECT_TYPE IoFileObjectType
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
PFN_NUMBER MmHighestPhysicalPage
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
#define MM_EXECUTE_WRITECOPY
VOID NTAPI MiDeleteVirtualAddresses(IN ULONG_PTR Va, IN ULONG_PTR EndingAddress, IN PMMVAD Vad)
PFN_NUMBER NTAPI MiRemoveZeroPage(IN ULONG Color)
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_USER(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
ULONG NTAPI MiGetPageProtection(IN PMMPTE PointerPte)
VOID NTAPI MiInsertBasedSection(IN PSECTION Section)
VOID NTAPI MiRemoveNode(IN PMMADDRESS_NODE Node, IN PMM_AVL_TABLE Table)
ULONG MmSecondaryColorMask
FORCEINLINE BOOLEAN MiIsRosSectionObject(IN PSECTION Section)
ULONG NTAPI MiMakeSystemAddressValidPfn(IN PVOID VirtualAddress, IN KIRQL OldIrql)
#define MI_SET_PFN_DELETED(x)
PMM_SESSION_SPACE MmSessionSpace
NTSTATUS NTAPI MiFindEmptyAddressRangeDownBasedTree(IN SIZE_T Length, IN ULONG_PTR BoundaryAddress, IN ULONG_PTR Alignment, IN PMM_AVL_TABLE Table, OUT PULONG_PTR Base)
#define MI_IS_SESSION_ADDRESS(Address)
VOID NTAPI MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
#define MI_GET_NEXT_COLOR()
#define MM_EXECUTE_READWRITE
VOID NTAPI MiInitializePfnForOtherProcess(IN PFN_NUMBER PageFrameIndex, IN PVOID PteAddress, IN PFN_NUMBER PteFrame)
FORCEINLINE VOID MI_WRITE_VALID_PDE(IN PMMPDE PointerPde, IN MMPDE TempPde)
#define MM_INVALID_PROTECTION
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
#define MI_SYSTEM_VIEW_BUCKET_SIZE
FORCEINLINE VOID MiUnlockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
VOID NTAPI MiMakePdeExistAndMakeValid(IN PMMPDE PointerPde, IN PEPROCESS TargetProcess, IN KIRQL OldIrql)
NTSTATUS NTAPI MiRosUnmapViewInSystemSpace(IN PVOID MappedBase)
VOID NTAPI MiUnlinkPageFromList(IN PMMPFN Pfn)
NTSTATUS NTAPI MiRosUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress, IN BOOLEAN SkipDebuggerNotify)
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)
NTSTATUS NTAPI MiCheckSecuredVad(IN PMMVAD Vad, IN PVOID Base, IN SIZE_T Size, IN ULONG ProtectionMask)
FORCEINLINE VOID MI_UPDATE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
FORCEINLINE USHORT MiIncrementPageTableReferences(IN PVOID Address)
FORCEINLINE PMMPFN MI_PFN_ELEMENT(IN PFN_NUMBER Pfn)
SIZE_T MmSizeOfPagedPoolInBytes
FORCEINLINE VOID MiLockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
#define RtlFillMemoryUlong(dst, len, val)
#define memcpy(s1, s2, n)
BOOLEAN NTAPI MmIsAddressValid(IN PVOID VirtualAddress)
#define MiAddressToPte(x)
#define MiAddressToPde(x)
#define ExFreePoolWithTag(_P, _T)
#define _Outptr_result_bytebuffer_(size)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT InheritDisposition
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER MaximumSize
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER _In_ ULONG SectionPageProtection
_In_ HANDLE ProcessHandle
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR ZeroBits
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ ULONG AllocationAttributes
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_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
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T CommitSize
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
__kernel_entry _Inout_ _Inout_ PSIZE_T RegionSize
struct _SUBSECTION * PSUBSECTION
struct _SUBSECTION SUBSECTION
struct _MSUBSECTION MSUBSECTION
struct _SECTION * PSECTION
struct _CONTROL_AREA CONTROL_AREA
VOID NTAPI DbgLoadImageSymbols(_In_ PSTRING Name, _In_ PVOID Base, _In_ ULONG_PTR ProcessId)
_In_ PMEMORY_AREA MemoryArea
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
#define SECTION_MAP_EXECUTE
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
#define SECTION_MAP_WRITE
NTSYSAPI VOID NTAPI RtlFreeAnsiString(PANSI_STRING AnsiString)
#define PAGE_EXECUTE_READ
enum _SECTION_INHERIT SECTION_INHERIT
#define PAGE_EXECUTE_WRITECOPY
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define SECTION_EXTEND_SIZE
#define PAGE_EXECUTE_READWRITE
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
NTSTATUS NTAPI FsRtlAcquireToCreateMappedSection(_In_ PFILE_OBJECT FileObject, _In_ ULONG SectionPageProtection)
#define MI_IS_PAGE_DIRTY(x)
FORCEINLINE PMMPDE MiPdeToPpe(PMMPDE PointerPde)
FORCEINLINE VOID MI_MAKE_PROTOTYPE_PTE(IN PMMPTE NewPte, IN PMMPTE PointerPte)
#define MM_HIGHEST_VAD_ADDRESS
#define MiProtoPteToPte(x)
#define MiIsPteOnPdeBoundary(PointerPte)
#define MiPteToAddress(_Pte)
VOID NTAPI KeFlushCurrentTb(VOID)
FORCEINLINE PMMSUPPORT MmGetCurrentAddressSpace(VOID)
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
#define MI_SET_PROCESS2(x)
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
LIST_ENTRY MmLoadedUserImageList
#define MM_VIRTMEM_GRANULARITY
#define MI_ASSERT_PFN_LOCK_HELD()
PMEMORY_AREA NTAPI MmLocateMemoryAreaByAddress(PMMSUPPORT AddressSpace, PVOID Address)
struct _MM_IMAGE_SECTION_OBJECT * PMM_IMAGE_SECTION_OBJECT
#define MEMORY_AREA_OWNED_BY_ARM3
struct _MEMORY_AREA * PMEMORY_AREA
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
NTSTATUS NTAPI MmExtendSection(_In_ PVOID Section, _Inout_ PLARGE_INTEGER NewSize)
_Out_ PKAPC_STATE ApcState
PFN_NUMBER MmAvailablePages
#define MEMORY_AREA_SECTION_VIEW
FORCEINLINE PMMSUPPORT MmGetKernelAddressSpace(VOID)
VOID NTAPI IoSetTopLevelIrp(IN PIRP Irp)
PFN_NUMBER MmSystemPageDirectory[PPE_PER_PAGE]
MMPTE ValidKernelPdeLocal
const ULONG MmProtectToValue[32]
POBJECT_TYPE PsProcessType
#define STATUS_INVALID_VIEW_SIZE
#define STATUS_INVALID_ADDRESS