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.