MiUpdateLargePageCandidates

NTSTATUS __stdcall MiUpdateLargePageCandidates(UINT64 a1, INT64 a2, INT64 a3){
  __int64 v4; 
  __int64 v5; 
  UINT64 v6; 
  unsigned __int64 v7; 

  v4 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)MmGetPfnDb()[a1].u4._bf_0 >> 39) & 0x3FF));
  if( !*(_BYTE *)(v4 + 4830) )
    return 0;
  if( (_DWORD)a2 == 2 )
  {
    v5 = 32i64;
    v6 = a1 >> 9;
    v7 = a1 >> 18;
  }
  else
  {
    if( (_DWORD)a2 != 1 )
      return 0;
    v5 = 512i64;
    v6 = a1 >> 18;
    v7 = a1 >> 18;
  }
  if( a3 <= 0 )
  {
    if( (_DWORD)a2 == 2 )
      --*(_BYTE *)(*(_QWORD *)(v4 + 5104) + v6);
    else
      --*(_WORD *)(*(_QWORD *)(v4 + 5128) + 2 * v6);
    return 0;
  }
  if( (_DWORD)a2 == 2 )
  {
    if( (unsigned __int8)++*(_BYTE *)(v6 + *(_QWORD *)(v4 + 5104)) != v5 )
      return 0;
    _bittestandset64(*(signed __int64 **)(v4 + 5120), v7);
    return 1;
  }
  else
  {
    ++*(_WORD *)(*(_QWORD *)(v4 + 5128) + 2 * v6);
    if( *(_WORD *)(2 * v6 + *(_QWORD *)(v4 + 5128)) != 512 || ((unsigned __int64)KeFeatureBits & 0x2000000000i64) == 0 )
      return 0;
    _InterlockedCompareExchange((volatile signed __int32 *)(v4 + 5136), 1, 0);
    return 1;
  }
}

Referenced by:

MiInitializeRebuildCandidateCounts
MiInsertLargePageInNodeList