[ros-diffs] [dgorbachev] 40295: Do not crash with "Assertion 'Process == PsGetCurrentProcess()' failed" msg.
dgorbachev at svn.reactos.org
dgorbachev at svn.reactos.org
Mon Mar 30 11:12:26 CEST 2009
Author: dgorbachev
Date: Mon Mar 30 13:12:25 2009
New Revision: 40295
URL: http://svn.reactos.org/svn/reactos?rev=40295&view=rev
Log:
Do not crash with "Assertion 'Process == PsGetCurrentProcess()' failed" msg.
Modified:
trunk/reactos/ntoskrnl/mm/kmap.c
trunk/reactos/ntoskrnl/mm/section.c
Modified: trunk/reactos/ntoskrnl/mm/kmap.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/kmap.c?rev=40295&r1=40294&r2=40295&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/kmap.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/kmap.c [iso-8859-1] Mon Mar 30 13:12:25 2009
@@ -25,7 +25,7 @@
KIRQL Irql;
PVOID TempAddress;
- Process = (PEPROCESS)KeGetCurrentThread()->ApcState.Process;
+ Process = PsGetCurrentProcess();
TempAddress = MiMapPageInHyperSpace(Process, Page, &Irql);
if (TempAddress == NULL)
{
@@ -40,15 +40,19 @@
NTAPI
MiCopyFromUserPage(PFN_TYPE DestPage, PVOID SourceAddress)
{
+ PEPROCESS Process;
+ KIRQL Irql;
PVOID TempAddress;
- TempAddress = MmCreateHyperspaceMapping(DestPage);
+ Process = PsGetCurrentProcess();
+ TempAddress = MiMapPageInHyperSpace(Process, DestPage, &Irql);
if (TempAddress == NULL)
{
return(STATUS_NO_MEMORY);
}
memcpy(TempAddress, SourceAddress, PAGE_SIZE);
- MmDeleteHyperspaceMapping(TempAddress);
+ MiUnmapPageInHyperSpace(Process, TempAddress, Irql);
return(STATUS_SUCCESS);
}
+/* EOF */
Modified: trunk/reactos/ntoskrnl/mm/section.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/section.c?rev=40295&r1=40294&r2=40295&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/section.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/section.c [iso-8859-1] Mon Mar 30 13:12:25 2009
@@ -657,8 +657,11 @@
}
else
{
+ PEPROCESS Process;
+ KIRQL Irql;
PVOID PageAddr;
ULONG CacheSegOffset;
+
/*
* Allocate a page, this is rather complicated by the possibility
* we might have to move other things out of memory
@@ -692,7 +695,8 @@
}
}
- PageAddr = MmCreateHyperspaceMapping(*Page);
+ Process = PsGetCurrentProcess();
+ PageAddr = MiMapPageInHyperSpace(Process, *Page, &Irql);
CacheSegOffset = BaseOffset + CacheSeg->Bcb->CacheSegmentSize - FileOffset;
Length = RawLength - SegOffset;
if (Length <= CacheSegOffset && Length <= PAGE_SIZE)
@@ -706,7 +710,7 @@
else
{
memcpy(PageAddr, (char*)BaseAddress + FileOffset - BaseOffset, CacheSegOffset);
- MmDeleteHyperspaceMapping(PageAddr);
+ MiUnmapPageInHyperSpace(Process, PageAddr, Irql);
CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE);
Status = CcRosGetCacheSegment(Bcb,
FileOffset + CacheSegOffset,
@@ -731,7 +735,7 @@
return Status;
}
}
- PageAddr = MmCreateHyperspaceMapping(*Page);
+ PageAddr = MiMapPageInHyperSpace(Process, *Page, &Irql);
if (Length < PAGE_SIZE)
{
memcpy((char*)PageAddr + CacheSegOffset, BaseAddress, Length - CacheSegOffset);
@@ -741,7 +745,7 @@
memcpy((char*)PageAddr + CacheSegOffset, BaseAddress, PAGE_SIZE - CacheSegOffset);
}
}
- MmDeleteHyperspaceMapping(PageAddr);
+ MiUnmapPageInHyperSpace(Process, PageAddr, Irql);
CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE);
}
return(STATUS_SUCCESS);
More information about the Ros-diffs
mailing list