MiTimeSingleLargePageZero

VOID __stdcall MiTimeSingleLargePageZero(INT64 a1){
  INT64 v1; 
  unsigned int v2; 
  unsigned int i; 
  __int64 v4; 
  unsigned int v5; 
  VOID *Pool; 
  __int64 v7; 
  unsigned __int64 Mask; 
  unsigned __int64 v9; 
  unsigned int v10; 
  unsigned __int8 v11; 
  unsigned __int64 v12; 
  unsigned int FirstSetRightGroupAffinity; 
  __int64 v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  __int64 v17; 
  unsigned __int64 v18; 
  _QWORD *v19; 
  __int64 v20; 
  unsigned __int64 v21; 
  bool v22; 
  _QWORD *v23; 
  __int64 v24; 
  __int64 v25; 
  unsigned int v26; 
  unsigned int v27; 
  _GROUP_AFFINITY GroupAffinity; 
  INT64 v29; 
  _GROUP_AFFINITY Affinity; 
  __int64 v31; 
  __int64 v32; 
  _GROUP_AFFINITY PreviousAffinity; 

  v29 = a1;
  v1 = a1;
  v2 = *(&stru_140C4DB30 + 61);
  PreviousAffinity = 0i64;
  v26 = *(&stru_140C4DB30 + 61);
  for( i = 0; i < (unsigned __int16)KeNumberNodes; v1 = v29 )
  {
    v4 = *(_QWORD *)(v1 + 16) + 4544i64 * i;
    v31 = v4;
    v5 = *(unsigned __int16 *)(v4 + 4488) / v2;
    GroupAffinity = *(_GROUP_AFFINITY *)(v4 + 4472);
    if( !v5 )
      v5 = 1;
    v27 = v5;
    Pool = MiAllocatePool(64i64, 8i64 * v5, 0x20206D4Dui64);
    v32 = (__int64)Pool;
    v7 = (__int64)Pool;
    if( Pool )
    {
      Mask = GroupAffinity.Mask;
      Affinity = 0i64;
      v9 = 0i64;
      *(_QWORD *)(v4 + 4400) = Pool;
      v10 = 0;
      while( Mask )
      {
        v11 = 0;
        Affinity = 0i64;
        if( v26 )
        {
          v12 = Affinity.Mask;
          do
          {
            if( (v10 & 1) != 0 )
              FirstSetRightGroupAffinity = KeFindFirstSetRightGroupAffinity((INT64)&GroupAffinity);
            else
              KeFindFirstSetLeftGroupAffinity(&GroupAffinity);
            v14 = (__int64)*(&KiProcessorBlock + FirstSetRightGroupAffinity);
            Affinity.Group = *(unsigned __int8 *)(v14 + 208);
            v12 |= 1i64 << *(_BYTE *)(v14 + 209);
            GroupAffinity.Mask &= ~v12;
            if( !GroupAffinity.Mask )
              break;
            ++v11;
          }
          while( v11 < v26 );
          v4 = v31;
          v7 = v32;
          Affinity.Mask = v12;
          Mask = GroupAffinity.Mask;
        }
        KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
        LODWORD(v15) = MiTimeSingleLargePageZeroWorker(v29, i);
        v9 += v15;
        *(_QWORD *)(v7 + 8i64 * v10) = v15;
        KeRevertToUserGroupAffinityThread(&PreviousAffinity);
        if( ++v10 >= 3 )
        {
          v17 = v10 - 3;
          v18 = 0i64;
          if( (unsigned int)v17 < v10 )
          {
            v19 = (_QWORD *)(v7 + 8 * v17);
            v20 = 3i64;
            do
            {
              v18 += *v19++;
              --v20;
            }
            while( v20 );
          }
          v21 = v18 / 3;
          v22 = (_DWORD)v17 == v10;
          if( (unsigned int)v17 < v10 )
          {
            v23 = (_QWORD *)(v7 + 8 * v17);
            do
            {
              if( *v23 < v21 - v21 / 0xA )
                break;
              if( *v23 > v21 / 0xA + v21 )
                break;
              LODWORD(v17) = v17 + 1;
              ++v23;
            }
            while( (unsigned int)v17 < v10 );
            v22 = (_DWORD)v17 == v10;
          }
          if( v22 )
          {
            dword_140C2A03C += v27 / v26 - v10;
            v9 = v21 * v10;
            break;
          }
        }
        if( v10 == v27 )
          break;
      }
      v16 = v10;
      v1 = v29;
      *(_QWORD *)(v4 + 4456) = v9 / v16;
    }
    if( !*(_QWORD *)(v4 + 4400) )
    {
      GroupAffinity = *(_GROUP_AFFINITY *)(v4 + 4472);
      KeSetSystemGroupAffinityThread(&GroupAffinity, &PreviousAffinity);
      LODWORD(v24) = MiTimeSingleLargePageZeroWorker(v1, i);
      v25 = v24;
      KeRevertToUserGroupAffinityThread(&PreviousAffinity);
      *(_QWORD *)(v4 + 4456) = v25;
    }
    ++i;
    v2 = v26;
  }
}

Referenced by:

MiZeroPageCalibrate