15#define MODULE_INVOLVED_IN_ARM3
89 HighestAddress = RandomBase + AlignedSize - 1;
129 DPRINT(
"Deleting TEB: %p in %16s\n", Teb,
Process->ImageFileName);
191 PFN_NUMBER PageFrameNumber, PageTableFrameNumber;
229 for (
i = 0;
i < StackPages;
i++)
280 PMMPTE PointerPte, StackPte;
308 if (SListEntry !=
NULL)
319 StackPages = StackPtes;
326 if (!StackPte)
return NULL;
336 PointerPte = StackPte;
355 for (
i = 0;
i < StackPages;
i++)
393 PMMPTE LimitPte, NewLimitPte, LastPte;
421 if (NewLimitPte < LastPte)
445 while (LimitPte >= NewLimitPte)
508 Process->Vm.Flags.MemoryPriority = MemoryPriority;
551 DPRINT(
"NLS Tables at: %p\n", TableBase);
587 Peb->ImageUsesLargePages = InitialPeb->ImageUsesLargePages;
705 if ((ImageConfigData) && (ImageConfigData->
CSDVersion))
814 if ((InitialTeb->PreviousStackBase ==
NULL) &&
815 (InitialTeb->PreviousStackLimit ==
NULL))
859MiInsertSharedUserPageVad(
871 DPRINT1(
"Ran out of quota.\n");
880 DPRINT1(
"Failed to allocate VAD for shared user page\n");
914 DPRINT1(
"Failed to insert shared user VAD\n");
951#if (_MI_PAGING_LEVELS >= 3)
954#if (_MI_PAGING_LEVELS == 4)
967 Process->AddressSpaceInitialized = 2;
975 Process->VadRoot.BalancedRoot.u1.Parent = &
Process->VadRoot.BalancedRoot;
984#if (_MI_PAGING_LEVELS == 4)
986#elif (_MI_PAGING_LEVELS == 3)
999#if (_MI_PAGING_LEVELS == 2)
1003#if (_MI_PAGING_LEVELS >= 3)
1007#if (_MI_PAGING_LEVELS == 3)
1011#if (_MI_PAGING_LEVELS == 4)
1050 DPRINT1(
"MiCreateSharedUserPageVad() failed: 0x%lx\n",
Status);
1114 Process->SectionBaseAddress = ImageBase;
1137 Process->Vm.WorkingSetExpansionLinks.Flink =
NULL;
1139 Process->VadRoot.BalancedRoot.u1.Parent = &
Process->VadRoot.BalancedRoot;
1166 PFN_NUMBER TableBaseIndex, HyperIndex, WsListIndex;
1192 if (!TableBaseIndex)
1234 Process->WorkingSetPage = WsListIndex;
1235 DirectoryTableBase[0] = TableBaseIndex <<
PAGE_SHIFT;
1236 DirectoryTableBase[1] = HyperIndex <<
PAGE_SHIFT;
1247 DirectoryTableBase[0] = 0;
1248 DirectoryTableBase[1] = 0;
1254 Process->AddressSpaceInitialized = 1;
1273 if (
Process->AddressSpaceInitialized < 2)
1275 DPRINT1(
"Incomplete address space for Process %p. Might leak resources.\n",
1314 if (!(Vad->u.VadFlags.PrivateMemory) && (Vad->ControlArea))
1331 if (Vad->u.VadFlags.Spare == 1)
1334 Vad->u.VadFlags.Spare = 2;
1378 if (
Process->Vm.WorkingSetExpansionLinks.Flink !=
NULL)
1386 if (
Process->AddressSpaceInitialized == 2)
1421 DPRINT1(
"Deleting partially initialized address space of Process %p. Might leak resources.\n",
1432 Process->Pcb.DirectoryTableBase[0] = 0;
1433 Process->Pcb.DirectoryTableBase[1] = 0;
SIZE_T MmHeapSegmentReserve
SIZE_T MmHeapDeCommitFreeBlockThreshold
SIZE_T MmHeapDeCommitTotalFreeThreshold
SIZE_T MmHeapSegmentCommit
HARDWARE_PTE_ARMV6 TempPte
#define OBJ_NAME_PATH_SEPARATOR
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
#define RtlImageDirectoryEntryToData
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
#define RemoveEntryList(Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define PsGetCurrentThread()
#define KeInitializeSpinLock(sl)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
struct _FileName FileName
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
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 KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
#define KeGetCurrentThread
#define MEMORY_PRIORITY_BACKGROUND
#define EXCEPTION_EXECUTE_HANDLER
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
FORCEINLINE KIRQL MiAcquireExpansionLock(VOID)
VOID NTAPI MiDeleteVirtualAddresses(IN ULONG_PTR Va, IN ULONG_PTR EndingAddress, IN PMMVAD Vad)
SIZE_T MmMinimumStackCommitInBytes
VOID NTAPI MiRemoveNode(IN PMMADDRESS_NODE Node, IN PMM_AVL_TABLE Table)
MM_SYSTEMSIZE MmSystemSize
VOID NTAPI MiReleaseProcessReferenceToSessionDataPage(IN PMM_SESSION_SPACE SessionGlobal)
VOID NTAPI MiSessionAddProcess(IN PEPROCESS NewProcess)
#define MI_SET_PFN_DELETED(x)
VOID NTAPI MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
#define MI_GET_NEXT_COLOR()
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
VOID NTAPI MiReleaseSystemPtes(IN PMMPTE StartingPte, IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
VOID NTAPI MiRemoveMappedView(IN PEPROCESS CurrentProcess, IN PMMVAD Vad)
#define MI_MAKE_SOFTWARE_PTE(p, x)
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_KERNEL(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
FORCEINLINE VOID MiReleaseExpansionLock(KIRQL OldIrql)
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
FORCEINLINE VOID MiUnlockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MiUnlockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
VOID NTAPI MiSessionRemoveProcess(VOID)
PMMPTE NTAPI MiReserveSystemPtes(IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
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)
FORCEINLINE VOID MI_WRITE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
VOID NTAPI MiInitializePfn(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN BOOLEAN Modified)
LARGE_INTEGER MmCriticalSectionTimeout
#define MI_GET_NEXT_PROCESS_COLOR(x)
FORCEINLINE VOID MiLockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE PFN_NUMBER MiRemoveZeroPageSafe(IN ULONG Color)
FORCEINLINE VOID MiLockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
#define MiAddressToPte(x)
#define MiAddressToPde(x)
#define ExFreePoolWithTag(_P, _T)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
#define MM_SHARED_USER_DATA_VA
FORCEINLINE KAFFINITY AFFINITY_MASK(ULONG Index)
_In_ HANDLE ProcessHandle
_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 SectionOffset
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
NTSYSAPI ULONG NTAPI RtlRandom(_Inout_ PULONG Seed)
#define VER_PLATFORM_WIN32_NT
#define EXCEPTION_CHAIN_END
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID NTAPI MiZeroPhysicalPage(IN PFN_NUMBER PageFrameIndex)
ULONG ExpOemCodePageDataOffset
ULONG ExpUnicodeCaseTableDataOffset
PVOID ExpNlsSectionPointer
ULONG ExpAnsiCodePageDataOffset
LCID PsDefaultThreadLocaleId
#define MI_MAPPING_RANGE_END
#define MM_HIGHEST_VAD_ADDRESS
FORCEINLINE PMMPTE MiAddressToPpe(PVOID Address)
FORCEINLINE PMMPTE MiAddressToPxe(PVOID Address)
#define MiPteToAddress(_Pte)
KAFFINITY KeActiveProcessors
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
#define MI_SET_PROCESS2(x)
@ MI_USAGE_PAGE_DIRECTORY
@ MI_USAGE_KERNEL_STACK_EXPANSION
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
PFILE_OBJECT NTAPI MmGetFileObjectForSection(IN PVOID Section)
ULONG NTAPI MmGetSessionId(IN PEPROCESS Process)
PFN_COUNT MmNumberOfPhysicalPages
FORCEINLINE PFN_NUMBER MiGetPfnEntryIndex(IN PMMPFN Pfn1)
VOID NTAPI MiRosCleanupMemoryArea(PEPROCESS Process, PMMVAD Vad)
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
NTSTATUS NTAPI SeInitializeProcessAuditName(_In_ PFILE_OBJECT FileObject, _In_ BOOLEAN DoAudit, _Out_ POBJECT_NAME_INFORMATION *AuditInfo)
Initializes a process audit name and returns it to the caller.
NTSTATUS NTAPI MmInitializeHandBuiltProcess2(IN PEPROCESS Process)
NTSTATUS NTAPI NtFreeUserPhysicalPages(IN HANDLE ProcessHandle, IN OUT PULONG_PTR NumberOfPages, IN OUT PULONG_PTR UserPfnArray)
SLIST_HEADER MmDeadStackSListHead
VOID NTAPI MmCleanProcessAddressSpace(IN PEPROCESS Process)
PVOID NTAPI MmCreateKernelStack(IN BOOLEAN GuiStack, IN UCHAR Node)
NTSTATUS NTAPI MmCreateTeb(IN PEPROCESS Process, IN PCLIENT_ID ClientId, IN PINITIAL_TEB InitialTeb, OUT PTEB *BaseTeb)
VOID NTAPI MmDeleteTeb(IN PEPROCESS Process, IN PTEB Teb)
VOID NTAPI MmDeleteProcessAddressSpace(IN PEPROCESS Process)
VOID NTAPI MmDeleteKernelStack(IN PVOID StackBase, IN BOOLEAN GuiStack)
NTSTATUS NTAPI MmCreatePeb(IN PEPROCESS Process, IN PINITIAL_PEB InitialPeb, OUT PPEB *BasePeb)
BOOLEAN NTAPI MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Process, OUT PULONG_PTR DirectoryTableBase)
NTSTATUS NTAPI MmInitializeProcessAddressSpace(IN PEPROCESS Process, IN PEPROCESS ProcessClone OPTIONAL, IN PVOID Section OPTIONAL, IN OUT PULONG Flags, IN POBJECT_NAME_INFORMATION *AuditName OPTIONAL)
NTSTATUS NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, IN PULONG_PTR DirectoryTableBase)
ULONG MmRotatingUniprocessorNumber
NTSTATUS NTAPI NtMapUserPhysicalPages(IN PVOID VirtualAddresses, IN ULONG_PTR NumberOfPages, IN OUT PULONG_PTR UserPfnArray)
NTSTATUS NTAPI MmGrowKernelStack(IN PVOID StackPointer)
NTSTATUS NTAPI MmSetMemoryPriorityProcess(IN PEPROCESS Process, IN UCHAR MemoryPriority)
NTSTATUS NTAPI NtAllocateUserPhysicalPages(IN HANDLE ProcessHandle, IN OUT PULONG_PTR NumberOfPages, IN OUT PULONG_PTR UserPfnArray)
NTSTATUS NTAPI MiCreatePebOrTeb(IN PEPROCESS Process, IN ULONG Size, OUT PULONG_PTR BaseAddress)
NTSTATUS NTAPI NtMapUserPhysicalPagesScatter(IN PVOID *VirtualAddresses, IN ULONG_PTR NumberOfPages, IN OUT PULONG_PTR UserPfnArray)
NTSTATUS NTAPI MmGrowKernelStackEx(IN PVOID StackPointer, IN ULONG GrowSize)
ULONG MmMaximumDeadKernelStacks
BOOLEAN MiArchCreateProcessAddressSpace(_In_ PEPROCESS Process, _In_ PULONG_PTR DirectoryTableBase)
#define STATUS_STACK_OVERFLOW
#define STATUS_INVALID_IMAGE_PROTECT
#define IMAGE_FILE_UP_SYSTEM_ONLY
VOID NTAPI KeDetachProcess(VOID)
VOID NTAPI KeAttachProcess(IN PKPROCESS Process)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
NTSTATUS NTAPI PsChargeProcessNonPagedPoolQuota(_In_ PEPROCESS Process, _In_ SIZE_T Amount)
Charges the non paged pool quota of a given process.
VOID NTAPI PsReturnProcessNonPagedPoolQuota(_In_ PEPROCESS Process, _In_ SIZE_T Amount)
Returns the non paged quota pool that the process was taking up.
#define KeQueryTickCount(CurrentCount)
#define KERNEL_STACK_SIZE
#define KERNEL_LARGE_STACK_COMMIT
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)
PULONG MinorVersion OPTIONAL
ULONG ProcessAffinityMask
struct _MMADDRESS_NODE * RightChild
struct _MMPFN::@1829::@1835 e2
union _MMVAD_LONG::@2674 u1
union _MMVAD_LONG::@2676 u2
union _MMVAD_LONG::@2675 u
PCONTROL_AREA ControlArea
ULONG_PTR NumberGenericTableElements
MMADDRESS_NODE BalancedRoot
struct _EXCEPTION_REGISTRATION_RECORD * ExceptionList
ULONG HeapDeCommitTotalFreeThreshold
ULONG ImageProcessAffinityMask
LARGE_INTEGER CriticalSectionTimeout
ULONG MaximumNumberOfHeaps
ULONG ImageSubsystemMinorVersion
SIZE_T MinimumStackCommit
BOOLEAN InheritedAddressSpace
ULONG ImageSubsystemMajorVersion
ULONG HeapDeCommitFreeBlockThreshold
PVOID UnicodeCaseTableData
WCHAR StaticUnicodeBuffer[261]
UNICODE_STRING StaticUnicodeString
PPEB ProcessEnvironmentBlock
#define RtlZeroMemory(Destination, Length)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ ULONG Flags
_Use_decl_annotations_ VOID NTAPI MiInitializeWorkingSetList(_Inout_ PMMSUPPORT WorkingSet)
FORCEINLINE USHORT ExQueryDepthSList(_In_ PSLIST_HEADER SListHead)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
_Out_ PCLIENT_ID ClientId
#define ROUND_TO_PAGES(Size)
#define BYTES_TO_PAGES(Size)
#define PsGetCurrentProcess
#define InterlockedPushEntrySList(SListHead, SListEntry)
#define InterlockedPopEntrySList(SListHead)