SIZE_T CommittedPages;
PVOID PagedPoolStart;
PVOID PagedPoolEnd;
- PMMPTE PagedPoolBasePde;
+ PMMPDE PagedPoolBasePde;
ULONG Color;
LONG ResidentProcessCount;
ULONG SessionPoolAllocationFailures[4];
PDRIVER_UNLOAD Win32KDriverUnload;
POOL_DESCRIPTOR PagedPool;
#if defined (_M_AMD64)
- MMPTE PageDirectory;
+ MMPDE PageDirectory;
#else
- PMMPTE PageTables;
+ PMMPDE PageTables;
#endif
#if defined (_M_AMD64)
PMMPTE SpecialPoolFirstPte;
extern ULONG_PTR MmSubsectionBase;
extern LARGE_INTEGER MmCriticalSectionTimeout;
extern LIST_ENTRY MmWorkingSetExpansionHead;
+extern KSPIN_LOCK MmExpansionLock;
+extern PETHREAD MiExpansionLockOwner;
FORCEINLINE
BOOLEAN
}
}
+FORCEINLINE
+KIRQL
+MiAcquireExpansionLock(VOID)
+{
+ KIRQL OldIrql;
+
+ ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
+ KeAcquireSpinLock(&MmExpansionLock, &OldIrql);
+ ASSERT(MiExpansionLockOwner == NULL);
+ MiExpansionLockOwner = PsGetCurrentThread();
+ return OldIrql;
+}
+
+FORCEINLINE
+VOID
+MiReleaseExpansionLock(KIRQL OldIrql)
+{
+ ASSERT(MiExpansionLockOwner == PsGetCurrentThread());
+ MiExpansionLockOwner = NULL;
+ KeReleaseSpinLock(&MmExpansionLock, OldIrql);
+ ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
+}
+
//
// Returns the ProtoPTE inside a VAD for the given VPN
//
NTAPI
MiInitializeAndChargePfn(
OUT PPFN_NUMBER PageFrameIndex,
- IN PMMPTE PointerPde,
+ IN PMMPDE PointerPde,
IN PFN_NUMBER ContainingPageFrame,
IN BOOLEAN SessionAllocation
);
NTAPI
MiInitializePfnForOtherProcess(
IN PFN_NUMBER PageFrameIndex,
- IN PMMPTE PointerPte,
+ IN PVOID PteAddress,
IN PFN_NUMBER PteFrame
);
IN ULONG ProtectionMask
);
-VOID
-NTAPI
-MiInsertVad(
- IN PMMVAD Vad,
- IN PEPROCESS Process
-);
-
NTSTATUS
NTAPI
MiInsertVadEx(
VOID
NTAPI
MiMakePdeExistAndMakeValid(
- IN PMMPTE PointerPde,
+ IN PMMPDE PointerPde,
IN PEPROCESS TargetProcess,
IN KIRQL OldIrql
);