Index: ntoskrnl/mm/ARM3/vadnode.c =================================================================== --- ntoskrnl/mm/ARM3/vadnode.c (r�vision 70478) +++ ntoskrnl/mm/ARM3/vadnode.c (copie de travail) @@ -285,9 +285,23 @@ &Parent); if (Result == TableFoundNode) { - DPRINT1("Given address conflicts with existing node\n"); - KeReleaseGuardedMutex(&CurrentProcess->AddressCreationLock); - return STATUS_CONFLICTING_ADDRESSES; + PMMVAD Bit; + Bit = MiLocateAddress((void*)StartingAddress); + if (Bit->StartingVpn == StartingAddress >> PAGE_SHIFT) { + Vad = Bit; + KeReleaseGuardedMutex(&CurrentProcess->AddressCreationLock); + return STATUS_SUCCESS; + } + else { + DPRINT1("Deadlock routine, stay away!"); + Vad->StartingVpn = Bit->EndingVpn; + Vad->EndingVpn = EndingAddress >> PAGE_SHIFT; + ((PMMVAD_LONG)Vad)->u3.Secured.StartVpn = StartingAddress; + ((PMMVAD_LONG)Vad)->u3.Secured.EndVpn = EndingAddress; + KeReleaseGuardedMutex(&CurrentProcess->AddressCreationLock); + MiInsertVad(Vad, &CurrentProcess->VadRoot); + return STATUS_SUCCESS; + } } } @@ -864,7 +878,6 @@ } } } - /* All good, allow the change */ return STATUS_SUCCESS; }