Do not crash, use valid kernel PTE.

svn path=/trunk/; revision=45555
This commit is contained in:
Dmitry Gorbachev 2010-02-10 13:56:54 +00:00
parent 3c1ec16123
commit b7b948cff5
12 changed files with 18 additions and 17 deletions

View file

@ -45,7 +45,7 @@ MiMapPageInHyperSpace(IN PEPROCESS Process,
//
// Build the PTE
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
TempPte.u.Hard.PageFrameNumber = Page;
MI_MAKE_LOCAL_PAGE(&TempPte); // Hyperspace is local!
@ -157,7 +157,7 @@ MiMapPagesToZeroInHyperSpace(IN PMMPFN *Pages,
// Write the current PTE
//
PointerPte += (Offset + 1);
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
MI_MAKE_LOCAL_PAGE(&TempPte); // Hyperspace is local!
do
{

View file

@ -122,7 +122,7 @@ MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress,
//
// Get the template and configure caching
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
switch (CacheAttribute)
{
case MiNonCached:

View file

@ -372,7 +372,7 @@ MmMapLockedPagesSpecifyCache(IN PMDL Mdl,
//
// Get the template
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
switch (CacheAttribute)
{
case MiNonCached:

View file

@ -127,6 +127,8 @@ typedef struct _PHYSICAL_MEMORY_DESCRIPTOR
} PHYSICAL_MEMORY_DESCRIPTOR, *PPHYSICAL_MEMORY_DESCRIPTOR;
extern MMPTE HyperTemplatePte;
extern MMPTE ValidKernelPde;
extern MMPTE ValidKernelPte;
extern ULONG MmSizeOfNonPagedPoolInBytes;
extern ULONG MmMaximumNonPagedPoolInBytes;

View file

@ -442,7 +442,7 @@ NTAPI
MiBuildPagedPool(VOID)
{
PMMPTE PointerPte, PointerPde;
MMPTE TempPte = HyperTemplatePte;
MMPTE TempPte = ValidKernelPte;
PFN_NUMBER PageFrameIndex;
KIRQL OldIrql;
ULONG Size, BitMapSize;
@ -467,7 +467,7 @@ MiBuildPagedPool(VOID)
// page directory array in the old ReactOS Mm is used (but in a less hacky
// way).
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
TempPte.u.Hard.PageFrameNumber = MmSystemPageDirectory;
ASSERT(PointerPte->u.Hard.Valid == 0);
ASSERT(TempPte.u.Hard.Valid == 1);

View file

@ -108,7 +108,7 @@ MmAllocateNonCachedMemory(IN ULONG NumberOfBytes)
//
// Setup the template PTE
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
//
// Now check what kind of caching we should use

View file

@ -113,7 +113,7 @@ MiResolveDemandZeroFault(IN PVOID Address,
//
// Build the PTE
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
*PointerPte = TempPte;
ASSERT(PointerPte->u.Hard.Valid == 1);

View file

@ -213,7 +213,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
//
// Get the template PTE we'll use to expand
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
//
// Get the first PTE in expansion space
@ -493,7 +493,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
//
// Loop the pages
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
do
{
//

View file

@ -134,7 +134,7 @@ MmCreateKernelStack(IN BOOLEAN GuiStack,
//
// Setup the template stack PTE
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
MI_MAKE_LOCAL_PAGE(&TempPte);
MI_MAKE_DIRTY_PAGE(&TempPte);
TempPte.u.Hard.PageFrameNumber = 0;
@ -234,7 +234,7 @@ MmGrowKernelStackEx(IN PVOID StackPointer,
//
// Setup the template stack PTE
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
MI_MAKE_LOCAL_PAGE(&TempPte);
MI_MAKE_DIRTY_PAGE(&TempPte);
TempPte.u.Hard.PageFrameNumber = 0;

View file

@ -1000,8 +1000,6 @@ MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size)
}
}
extern MMPTE HyperTemplatePte;
VOID
INIT_FUNCTION
NTAPI

View file

@ -35,6 +35,7 @@ NTAPI
MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress,
IN ULONG Flags)
{
extern MMPTE ValidKernelPte;
PFN_NUMBER Pfn;
MMPTE TempPte;
PVOID MappingBaseAddress;
@ -77,7 +78,7 @@ MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress,
//
//
//
TempPte = HyperTemplatePte;
TempPte = ValidKernelPte;
//
// Convert physical address to PFN

View file

@ -354,9 +354,9 @@ NTAPI
MmInitSystem(IN ULONG Phase,
IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
extern MMPTE HyperTemplatePte;
extern MMPTE ValidKernelPte;
PMMPTE PointerPte;
MMPTE TempPte = HyperTemplatePte;
MMPTE TempPte = ValidKernelPte;
PFN_NUMBER PageFrameNumber;
if (Phase == 0)