MiScrubNode

VOID __fastcall MiScrubNode(INT64 a1){
  _KEVENT *v1; 
  UINT64 v2; 
  _MI_PARTITION *v4; 
  unsigned int *v5; 
  unsigned int *v6; 
  _DWORD *v7; 
  __int64 v8; 
  UINT64 v9; 
  UINT64 v10; 
  char *i; 
  UINT64 v12; 
  int v13; 
  unsigned __int64 v14; 
  UINT64 *ZeroFreeCount; 
  UINT64 DrainStacks; 
  _MI_PARTITION *v17; 
  v2 = *(unsigned int *)(a1 + 8);
  v4 = *(_MI_PARTITION **)(*(_QWORD *)a1 + 48i64);
  v5 = *(unsigned int **)(a1 + 216);
  v17 = v4;
  v6 = &v5[4 * *v5 + 4];
  MiScrubNodeLargePages((PVOID)a1, v4, v2, v1);
  v7 = *(_DWORD **)(a1 + 216);
  v8 = 0i64;
  if( *v7 )
  {
    while( v6[2 * v8] != *(_DWORD *)(a1 + 8) )
    {
LABEL_19:
      v7 = *(_DWORD **)(a1 + 216);
      v8 = (unsigned int)(v8 + 1);
      if( (unsigned int)v8 >= *v7 )
        return;
    }
    v9 = *(_QWORD *)&v7[4 * (unsigned int)v8 + 4];
    v10 = v9 + *(_QWORD *)&v7[4 * (unsigned int)v8 + 6] - 1i64;
    for( i = (char *)MmGetPfnDb() + 48 * v10; ; i -= 48 )
    {
      if( v10 < v9 || !v9 )
        goto LABEL_19;
      if( MiScrubInterrupted(a1) )
        return;
      LODWORD(DrainStacks) = 0;
      v12 = MiPfnsWorthTrying(v4, (_MMPFN *)i, 1ui64, 0x7000000ui64, &DrainStacks, ZeroFreeCount);
      if( v12 )
      {
        if( v12 >= v10 - v9 + 1 )
          goto LABEL_19;
        i += 48 - 48 * v12;
        v10 += 1 - v12;
      }
      else
      {
        if( (_DWORD)DrainStacks == 1 )
          MiEmptyKernelStackCache();
        if( !MiClaimPhysicalRun(
                (__int64)v4,
                v10,
                1i64,
                0xFFFFFFFFFi64,
                a1 + 176,
                117440512,
                -1,
                0i64,
                (unsigned __int8)i[34] >> 6,
                0i64) )
        {
          v13 = MiScrubPage((UINT64 *)a1, (INT64)i, 0i64, 0);
          v14 = (unsigned __int8)MiLockPageInline((INT64)i);
          if( v13 < 0 || (i[35] & 0x40) != 0 )
          {
            v4 = v17;
            if( *(_MI_PARTITION **)(qword_140C4E388 + 8 * ((*((_QWORD *)i + 5) >> 39) & 0x3FFi64)) == v17 )
            {
              MiMakePageBad((UINT64)i, 2);
LABEL_16:
              _InterlockedAnd64((volatile signed __int64 *)i + 3, 0x7FFFFFFFFFFFFFFFui64);
              __writecr8(v14);
              goto LABEL_17;
            }
          }
          else
          {
            v4 = v17;
          }
          MiInsertPageInFreeOrZeroedList(v10, 2ui64);
          goto LABEL_16;
        }
      }
LABEL_17:
      --v10;
    }
  }
}

Referenced by:

MiScrubMemoryWorker