MiComputeFaultNode
VOID __fastcall MiComputeFaultNode(
_MMSUPPORT_INSTANCE *Vm,
VOID *FaultingAddress,
_CONTROL_AREA *ControlArea,
VOID *TrapInformation,
_MMVAD **OutVad){
_MMWSL_INSTANCE *VmWorkingSetList;
unsigned __int64 v7;
_MMWSL_INSTANCE *v8;
_MMPTE *v9;
int v10;
if( Vm->TrimmedPageCount >> 57 )
return;
VmWorkingSetList = Vm->VmWorkingSetList;
if( ((unsigned __int8)VmWorkingSetList & 1) != 0 )
{
v7 = (unsigned __int64)VmWorkingSetList & 0xFFFFFFFFFFFFFFFEui64;
if( *(_BYTE *)v7 == 4 )
{
v10 = (*(&KiProcessorBlock + *(unsigned int *)(*(_QWORD *)(v7 + 40) + 588i64)))->ParentNode->Affinity.Reserved[0]
+ 1;
}
else
{
if( *(_BYTE *)v7 != 2 )
goto LABEL_4;
v10 = *(_DWORD *)(v7 + 40);
}
if( v10 )
return;
goto LABEL_4;
}
v7 = 0i64;
LABEL_4:
if( (*(_BYTE *)(Vm->AgeDistribution[2] + 184) & 7) == 0 )
{
v8 = KeGetCurrentThread()->ApcState.Process->Vm.Instance.VmWorkingSetList;
if( !ControlArea->Segment )
{
v9 = *(_MMPTE **)&Vm->NextPageColor;
if( (*(_QWORD *)&Vm->NextPageColor < (unsigned __int64)MmGetPteBase() || v9 > MmGetPteLimit())
&& (v7
|| *(_QWORD *)&v8[10].LastAccessClearingRemainder
|| v8[10].LockedEntries
|| LOBYTE(v8[8].LockedEntries) == 1) )
{
ControlArea->Segment = (_SEGMENT *)MiLocateAddress(v9);
}
}
}
}Referenced by:
MiCopyOnWrite
MiMigratePfn
MiResolveMappedFileFault
MiResolvePageFileFault