KeRetryOutswapProcess
VOID __stdcall KeRetryOutswapProcess(_EPROCESS *Process){
unsigned __int8 CurrentIrql;
int v3;
signed __int64 *v4;
signed __int64 v5;
signed __int64 v6;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
KiAcquireKobjectLockSafe(Process);
v3 = *((_DWORD *)Process + 210) & 7;
if( v3 == 1 )
_InterlockedXor((volatile signed __int32 *)Process + 210, 7u);
_InterlockedAnd((volatile signed __int32 *)Process, 0xFFFFFF7F);
__writecr8(CurrentIrql);
if( v3 == 1 )
{
v4 = (signed __int64 *)((char *)Process + 360);
_m_prefetchw(&KiProcessOutSwapListHead);
v5 = KiProcessOutSwapListHead;
do
{
*v4 = v5;
v6 = v5;
v5 = _InterlockedCompareExchange64(&KiProcessOutSwapListHead, (signed __int64)v4, v5);
}
while( v5 != v6 );
if( !v5 )
KeSetEvent(&KiSwapEvent, 10);
}
}Referenced by:
MiProcessWorkingSets
MmReleaseCommitForMemResetPages