15 #define MODULE_INVOLVED_IN_ARM3 80 HighestAddress = RandomBase + AlignedSize - 1;
120 DPRINT(
"Deleting TEB: %p in %16s\n", Teb,
Process->ImageFileName);
182 PFN_NUMBER PageFrameNumber, PageTableFrameNumber;
220 for (
i = 0;
i < StackPages;
i++)
271 PMMPTE PointerPte, StackPte;
299 if (SListEntry !=
NULL)
310 StackPages = StackPtes;
317 if (!StackPte)
return NULL;
327 PointerPte = StackPte;
346 for (
i = 0;
i < StackPages;
i++)
384 PMMPTE LimitPte, NewLimitPte, LastPte;
412 if (NewLimitPte < LastPte)
436 while (LimitPte >= NewLimitPte)
499 Process->Vm.Flags.MemoryPriority = MemoryPriority;
543 DPRINT(
"NLS Tables at: %p\n", TableBase);
579 Peb->ImageUsesLargePages = InitialPeb->ImageUsesLargePages;
696 if ((ImageConfigData) && (ImageConfigData->
CSDVersion))
788 Teb->NtTib.ExceptionList =
NULL;
792 Teb->NtTib.Self = (
PNT_TIB)Teb;
797 Teb->NtTib.Version = 30 << 8;
804 Teb->ProcessEnvironmentBlock =
Process->Peb;
810 if ((InitialTeb->PreviousStackBase ==
NULL) &&
811 (InitialTeb->PreviousStackLimit ==
NULL))
816 Teb->NtTib.StackBase = InitialTeb->StackBase;
817 Teb->NtTib.StackLimit = InitialTeb->StackLimit;
818 Teb->DeallocationStack = InitialTeb->AllocatedStackBase;
825 Teb->NtTib.StackBase = InitialTeb->PreviousStackBase;
826 Teb->NtTib.StackLimit = InitialTeb->PreviousStackLimit;
832 Teb->StaticUnicodeString.MaximumLength =
sizeof(Teb->StaticUnicodeBuffer);
833 Teb->StaticUnicodeString.Buffer = Teb->StaticUnicodeBuffer;
855 MiInsertSharedUserPageVad(
866 DPRINT1(
"Failed to allocate VAD for shared user page\n");
899 DPRINT1(
"Failed to insert shared user VAD\n");
907 DPRINT1(
"Ran out of quota.\n");
939 #if (_MI_PAGING_LEVELS >= 3) 942 #if (_MI_PAGING_LEVELS == 4) 955 Process->AddressSpaceInitialized = 2;
963 Process->VadRoot.BalancedRoot.u1.Parent = &
Process->VadRoot.BalancedRoot;
972 #if (_MI_PAGING_LEVELS == 4) 974 #elif (_MI_PAGING_LEVELS == 3) 987 #if (_MI_PAGING_LEVELS == 2) 991 #if (_MI_PAGING_LEVELS >= 3) 995 #if (_MI_PAGING_LEVELS == 3) 999 #if (_MI_PAGING_LEVELS == 4) 1038 DPRINT1(
"MiCreateSharedUserPageVad() failed: 0x%lx\n",
Status);
1102 Process->SectionBaseAddress = ImageBase;
1125 Process->Vm.WorkingSetExpansionLinks.Flink =
NULL;
1127 Process->VadRoot.BalancedRoot.u1.Parent = &
Process->VadRoot.BalancedRoot;
1154 PFN_NUMBER TableBaseIndex, HyperIndex, WsListIndex;
1180 if (!TableBaseIndex)
1222 Process->WorkingSetPage = WsListIndex;
1223 DirectoryTableBase[0] = TableBaseIndex <<
PAGE_SHIFT;
1224 DirectoryTableBase[1] = HyperIndex <<
PAGE_SHIFT;
1235 DirectoryTableBase[0] = 0;
1236 DirectoryTableBase[1] = 0;
1242 Process->AddressSpaceInitialized = 1;
1297 if (!(Vad->u.VadFlags.PrivateMemory) && (Vad->ControlArea))
1314 if (Vad->u.VadFlags.Spare == 1)
1317 Vad->u.VadFlags.Spare = 2;
1368 if (
Process->AddressSpaceInitialized == 2)
1414 Process->Pcb.DirectoryTableBase[0] = 0;
1415 Process->Pcb.DirectoryTableBase[1] = 0;
#define MI_MAKE_SOFTWARE_PTE(p, x)
NTSYSAPI ULONG NTAPI RtlRandom(_Inout_ PULONG Seed)
union _MMVAD_LONG::@2546 u1
ULONG ImageSubsystemMajorVersion
PFILE_OBJECT NTAPI MmGetFileObjectForSection(IN PVOID Section)
VOID NTAPI MiInitializePfn(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN BOOLEAN Modified)
PVOID NTAPI MmCreateKernelStack(IN BOOLEAN GuiStack, IN UCHAR Node)
#define VER_PLATFORM_WIN32_NT
VOID NTAPI MmCleanProcessAddressSpace(IN PEPROCESS Process)
SIZE_T MmHeapDeCommitTotalFreeThreshold
VOID NTAPI MiSessionRemoveProcess(VOID)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID NTAPI MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
FORCEINLINE VOID MiUnlockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
NTSTATUS NTAPI PsChargeProcessNonPagedPoolQuota(_In_ PEPROCESS Process, _In_ SIZE_T Amount)
Charges the non paged pool quota of a given process.
#define MiAddressToPde(x)
FORCEINLINE KIRQL MiAcquireExpansionLock(VOID)
#define PsGetCurrentThread()
ULONG ImageProcessAffinityMask
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
VOID NTAPI MiReleaseProcessReferenceToSessionDataPage(IN PMM_SESSION_SPACE SessionGlobal)
PMMPTE NTAPI MiReserveSystemPtes(IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
FORCEINLINE PMMPTE MiAddressToPpe(PVOID Address)
ULONG_PTR NumberGenericTableElements
#define MI_GET_NEXT_COLOR()
NTSTATUS NTAPI NtMapUserPhysicalPagesScatter(IN PVOID *VirtualAddresses, IN ULONG_PTR NumberOfPages, IN OUT PULONG_PTR UserPfnArray)
FORCEINLINE VOID MiLockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
IN PVOID IN PVOID IN USHORT IN USHORT Size
NTSTATUS NTAPI NtFreeUserPhysicalPages(IN HANDLE ProcessHandle, IN OUT PULONG_PTR NumberOfPages, IN OUT PULONG_PTR UserPfnArray)
PCONTROL_AREA ControlArea
VOID NTAPI MiZeroPhysicalPage(IN PFN_NUMBER PageFrameIndex)
#define MM_SHARED_USER_DATA_VA
#define KERNEL_LARGE_STACK_COMMIT
_Use_decl_annotations_ VOID NTAPI MiInitializeWorkingSetList(_Inout_ PMMSUPPORT WorkingSet)
LCID PsDefaultThreadLocaleId
SIZE_T MmMinimumStackCommitInBytes
VOID NTAPI MiRosCleanupMemoryArea(PEPROCESS Process, PMMVAD Vad)
SLIST_HEADER MmDeadStackSListHead
NTSTATUS NTAPI MmCreatePeb(IN PEPROCESS Process, IN PINITIAL_PEB InitialPeb, OUT PPEB *BasePeb)
MMADDRESS_NODE BalancedRoot
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
return STATUS_NOT_IMPLEMENTED
NTSTATUS NTAPI MmCreateTeb(IN PEPROCESS Process, IN PCLIENT_ID ClientId, IN PINITIAL_TEB InitialTeb, OUT PTEB *BaseTeb)
#define MiAddressToPte(x)
NTSTATUS NTAPI MmGrowKernelStack(IN PVOID StackPointer)
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
FORCEINLINE VOID MI_WRITE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
LARGE_INTEGER MmCriticalSectionTimeout
#define OBJ_NAME_PATH_SEPARATOR
#define MI_SET_PROCESS2(x)
ULONG MmMaximumDeadKernelStacks
VOID NTAPI MmDeleteKernelStack(IN PVOID StackBase, IN BOOLEAN GuiStack)
#define PsGetCurrentProcess
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
FORCEINLINE PFN_NUMBER MiRemoveZeroPageSafe(IN ULONG Color)
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
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)
VOID NTAPI MiReleaseSystemPtes(IN PMMPTE StartingPte, IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
NTSTATUS NTAPI NtAllocateUserPhysicalPages(IN HANDLE ProcessHandle, IN OUT PULONG_PTR NumberOfPages, IN OUT PULONG_PTR UserPfnArray)
VOID NTAPI KeQueryTickCount(IN PLARGE_INTEGER TickCount)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
#define STATUS_INVALID_IMAGE_PROTECT
FORCEINLINE PMMPTE MiAddressToPxe(PVOID Address)
FORCEINLINE VOID MiLockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_Must_inspect_result_ _In_ ULONG Flags
_Out_ PCLIENT_ID ClientId
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)
ULONG MaximumNumberOfHeaps
NTSTATUS NTAPI MmInitializeHandBuiltProcess2(IN PEPROCESS Process)
#define NT_SUCCESS(StatCode)
SIZE_T MmHeapDeCommitFreeBlockThreshold
#define EXCEPTION_EXECUTE_HANDLER
#define MI_GET_NEXT_PROCESS_COLOR(x)
#define MI_MAPPING_RANGE_END
NTSTATUS NTAPI MiCreatePebOrTeb(IN PEPROCESS Process, IN ULONG Size, OUT PULONG_PTR BaseAddress)
PVOID ExpNlsSectionPointer
#define MEMORY_PRIORITY_BACKGROUND
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
LARGE_INTEGER CriticalSectionTimeout
HARDWARE_PTE_ARMV6 TempPte
FORCEINLINE USHORT ExQueryDepthSList(_In_ PSLIST_HEADER SListHead)
#define KERNEL_STACK_SIZE
VOID NTAPI MmDeleteProcessAddressSpace(IN PEPROCESS Process)
SIZE_T MinimumStackCommit
struct _MMADDRESS_NODE * RightChild
#define ExAllocatePoolWithTag(hernya, size, tag)
#define BYTES_TO_PAGES(Size)
VOID NTAPI KeDetachProcess(VOID)
SIZE_T MmHeapSegmentReserve
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
#define RtlImageDirectoryEntryToData
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define IMAGE_FILE_UP_SYSTEM_ONLY
ULONG ExpUnicodeCaseTableDataOffset
#define InterlockedPushEntrySList(SListHead, SListEntry)
BOOLEAN NTAPI MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Process, OUT PULONG_PTR DirectoryTableBase)
NTSTATUS NTAPI MmSetMemoryPriorityProcess(IN PEPROCESS Process, IN UCHAR MemoryPriority)
union _MMVAD_LONG::@2547 u
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.
PVOID UnicodeCaseTableData
MM_SYSTEMSIZE MmSystemSize
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
VOID NTAPI MiRemoveNode(IN PMMADDRESS_NODE Node, IN PMM_AVL_TABLE Table)
VOID NTAPI MiDeleteVirtualAddresses(IN ULONG_PTR Va, IN ULONG_PTR EndingAddress, IN PMMVAD Vad)
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
ULONG ExpOemCodePageDataOffset
#define MI_SET_PFN_DELETED(x)
struct _FileName FileName
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
PFN_COUNT MmNumberOfPhysicalPages
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
#define EXCEPTION_CHAIN_END
ULONG ProcessAffinityMask
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
NTSTATUS NTAPI NtMapUserPhysicalPages(IN PVOID VirtualAddresses, IN ULONG_PTR NumberOfPages, IN OUT PULONG_PTR UserPfnArray)
#define ROUND_TO_PAGES(Size)
VOID NTAPI KeAttachProcess(IN PKPROCESS Process)
SIZE_T MmHeapSegmentCommit
#define STATUS_STACK_OVERFLOW
FORCEINLINE VOID MiReleaseExpansionLock(KIRQL OldIrql)
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
#define MM_HIGHEST_VAD_ADDRESS
NTSTATUS NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, IN PULONG_PTR DirectoryTableBase)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
VOID NTAPI MmDeleteTeb(IN PEPROCESS Process, IN PTEB Teb)
VOID NTAPI MiSessionAddProcess(IN PEPROCESS NewProcess)
FORCEINLINE PFN_NUMBER MiGetPfnEntryIndex(IN PMMPFN Pfn1)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
#define RtlZeroMemory(Destination, Length)
union _MMVAD_LONG::@2548 u2
ULONG NTAPI MmGetSessionId(IN PEPROCESS Process)
struct _MMPFN::@1753::@1759 e2
NTSTATUS NTAPI MmInitializeProcessAddressSpace(IN PEPROCESS Process, IN PEPROCESS ProcessClone OPTIONAL, IN PVOID Section OPTIONAL, IN OUT PULONG Flags, IN POBJECT_NAME_INFORMATION *AuditName OPTIONAL)
VOID NTAPI MiRemoveMappedView(IN PEPROCESS CurrentProcess, IN PMMVAD Vad)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
ULONG HeapDeCommitFreeBlockThreshold
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionCode()
#define _SEH2_YIELD(__stmt)
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_KERNEL(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
BOOLEAN InheritedAddressSpace
#define InterlockedPopEntrySList(SListHead)
#define KeGetCurrentThread
NTSTATUS NTAPI MmGrowKernelStackEx(IN PVOID StackPointer, IN ULONG GrowSize)
FORCEINLINE PVOID MiPteToAddress(PMMPTE PointerPte)
_In_ HANDLE ProcessHandle
VOID NTAPI PsReturnProcessNonPagedPoolQuota(_In_ PEPROCESS Process, _In_ SIZE_T Amount)
Returns the non paged quota pool that the process was taking up.
#define ExFreePoolWithTag(_P, _T)
ULONG ExpAnsiCodePageDataOffset
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
BOOLEAN MiArchCreateProcessAddressSpace(_In_ PEPROCESS Process, _In_ PULONG_PTR DirectoryTableBase)
FORCEINLINE VOID MiUnlockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
ULONG ImageSubsystemMinorVersion
ULONG HeapDeCommitTotalFreeThreshold
PULONG MinorVersion OPTIONAL