MiStoreEvictThread
VOID __stdcall MiStoreEvictThread(PVOID StartContext){
int v2;
__int64 v3;
__int64 v4;
UINT64 v5;
UINT8 v6;
UINT8 v7;
int v8;
int v9;
__int64 v10;
unsigned int v11;
__int64 v12;
unsigned __int64 v13;
IRP *WaitMode;
_EXT_SET_PARAMETERS_V0 Parameters;
PVOID Object[2];
struct _KWAIT_BLOCK WaitBlockArray;
_KTIMER2 result;
memset((INT64)&result, 0i64);
KeWaitForSingleObject((char *)StartContext + 8, WrKernel, 0, 0, 0i64);
v2 = *((_DWORD *)StartContext + 8);
v3 = *(_QWORD *)StartContext;
ExFreePoolWithTag(StartContext, 0);
if( !v2 )
{
KiInitializeTimer2((INT64)&result, 0i64, 0i64, 8i64);
*(_QWORD *)&Parameters.Version &= v4;
Parameters.NoWakeTolerance = -1i64;
KeSetTimer2(&result, -600000000i64, 600000000i64, &Parameters);
Object[1] = &result;
Object[0] = (PVOID)(v3 + 1200);
while( 1 )
{
KeWaitForMultipleObjects((_BYTE *)2, Object, WaitAny, WrVirtualMemory, 0, 0, 0i64, &WaitBlockArray);
if( !v8 )
KeResetEvent((VOID *)(v3 + 1200), v5, v6, v7, WaitMode);
while( 1 )
{
v9 = *(_DWORD *)(v3 + 1168);
v10 = 0i64;
v11 = *(_DWORD *)(v3 + 6936);
if( v11 )
{
do
{
v12 = *(_QWORD *)(v3 + 8 * v10 + 6944);
if( (*(_BYTE *)(v12 + 204) & 0x40) != 0 )
{
MiStoreEvictPageFile(*(_QWORD *)(v3 + 8 * v10 + 6944));
if( *(_DWORD *)(v12 + 200) >= 0x100u )
LODWORD(v10) = v10 - 1;
}
v10 = (unsigned int)(v10 + 1);
}
while( (unsigned int)v10 < v11 );
}
v13 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v3 + 1184));
if( v9 == *(_DWORD *)(v3 + 1168) )
break;
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 1184));
__writecr8(v13);
}
if( v9 )
{
*(_DWORD *)(v3 + 1168) = 0;
KeSetEvent((PRKEVENT)(v3 + 1248), 0);
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 1184));
__writecr8(v13);
}
}
}Referenced by:
No references.