[NTOSKRNL/MM]

- MiIsEntireRangeCommitted: Ensure the PTE we are checking is really faulted in.
 - Prefer MiPteToPde and MiPdeToPte (which should really be called MiFirstPteInPde) instead of MiAddressToPte and MiPteToAddress
Fixes weird failed ASSERT in page fault handler when using DPH.

svn path=/trunk/; revision=66334
This commit is contained in:
Jérôme Gardou 2015-02-17 14:19:05 +00:00
parent 873109862d
commit 51fd410d89

View file

@ -1994,14 +1994,13 @@ MiIsEntireRangeCommitted(IN ULONG_PTR StartingAddress,
if (OnBoundary)
{
/* Is this PDE demand zero? */
PointerPde = MiAddressToPte(PointerPte);
PointerPde = MiPteToPde(PointerPte);
if (PointerPde->u.Long != 0)
{
/* It isn't -- is it valid? */
if (PointerPde->u.Hard.Valid == 0)
{
/* Nope, fault it in */
PointerPte = MiPteToAddress(PointerPde);
MiMakeSystemAddressValid(PointerPte, Process);
}
}
@ -2009,13 +2008,13 @@ MiIsEntireRangeCommitted(IN ULONG_PTR StartingAddress,
{
/* The PTE was already valid, so move to the next one */
PointerPde++;
PointerPte = MiPteToAddress(PointerPde);
PointerPte = MiPdeToPte(PointerPde);
/* Is the entire VAD committed? If not, fail */
if (!Vad->u.VadFlags.MemCommit) return FALSE;
/* Everything is committed so far past the range, return true */
if (PointerPte > LastPte) return TRUE;
/* New loop iteration with our new, on-boundary PTE. */
continue;
}
}