MiReturnWsToExpansionList
VOID __stdcall MiReturnWsToExpansionList(_MMSUPPORT_INSTANCE *Vm, UINT64 InsertAtFront){
_LIST_ENTRY *p_WorkingSetExpansionLinks;
_LIST_ENTRY *v3;
_LIST_ENTRY *Flink;
_KGATE *ExitOutswapGate;
_LIST_ENTRY *v6;
p_WorkingSetExpansionLinks = &Vm->WorkingSetExpansionLinks;
v3 = (_LIST_ENTRY *)(*(_QWORD *)(*(&stru_140C4DB30 + 267) + 8i64 * Vm->PartitionId) + 6856i64);
if( (_DWORD)InsertAtFront )
{
Flink = v3->Flink;
if( v3->Flink->Blink == v3 )
{
p_WorkingSetExpansionLinks->Flink = Flink;
Vm->WorkingSetExpansionLinks.Blink = v3;
Flink->Blink = p_WorkingSetExpansionLinks;
v3->Flink = p_WorkingSetExpansionLinks;
goto LABEL_4;
}
LABEL_8:
__fastfail(3u);
}
v6 = *(_LIST_ENTRY **)(*(_QWORD *)(*(&stru_140C4DB30 + 267) + 8i64 * Vm->PartitionId) + 6864i64);
if( v6->Flink != v3 )
goto LABEL_8;
p_WorkingSetExpansionLinks->Flink = v3;
Vm->WorkingSetExpansionLinks.Blink = v6;
v6->Flink = p_WorkingSetExpansionLinks;
v3->Blink = p_WorkingSetExpansionLinks;
LABEL_4:
ExitOutswapGate = Vm->ExitOutswapGate;
if( ExitOutswapGate )
KeSignalGate(ExitOutswapGate, 1i64);
}Referenced by:
KiInSwapProcesses
MiAllowWorkingSetExpansion
MiEmptyTargetedWorkingSet
MiProcessWorkingSets