mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 19:26:32 +00:00
[NTOS]: Use the Spare flag in the VAD as a ReactOS/MemoryArea specific flag to signify that this VAD is associated with a MEMORY_AREA and should be unlinked at process exit, but not freed. This is because MemoryAreas themselves are cleaned up later, and in the future their associated VADs (not yet in Trunk) will also be parsed. In the process death scenario, those VADs will be freed, but not unlinked (since it would already have been unlinked).
svn path=/trunk/; revision=48990
This commit is contained in:
@@ -125,7 +125,7 @@ MiCreatePebOrTeb(IN PEPROCESS Process,
|
||||
|
||||
/* Build the rest of the VAD now */
|
||||
Vad->StartingVpn = (*Base) >> PAGE_SHIFT;
|
||||
Vad->EndingVpn = ((*Base) + Size - 1) >> PAGE_SHIFT;
|
||||
Vad->EndingVpn = ((*Base) + Size - 1) >> PAGE_SHIFT;
|
||||
Vad->u3.Secured.StartVpn = *Base;
|
||||
Vad->u3.Secured.EndVpn = (Vad->EndingVpn << PAGE_SHIFT) | (PAGE_SIZE - 1);
|
||||
Vad->u1.Parent = NULL;
|
||||
@@ -1195,6 +1195,14 @@ MmCleanProcessAddressSpace(IN PEPROCESS Process)
|
||||
/* Release the working set */
|
||||
MiUnlockProcessWorkingSet(Process, Thread);
|
||||
|
||||
/* Skip ARM3 fake VADs, they'll be freed by MmDeleteProcessAddresSpace */
|
||||
if (Vad->u.VadFlags.Spare == 1)
|
||||
{
|
||||
/* Set a flag so MmDeleteMemoryArea knows to free, but not to remove */
|
||||
Vad->u.VadFlags.Spare = 2;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Free the VAD memory */
|
||||
ExFreePool(Vad);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user