MiGetPagesToZero

INT64 __fastcall MiGetPagesToZero(INT64 a1, UINT64 a2, UINT64 a3){
  unsigned int v3; 
  INT64 result; 
  char v7; 
  unsigned int v8; 
  UINT64 v9; 
  INT64 v10; 
  __int64 v11; 
  __int64 v12; 
  INT64 v13; 
  INT64 v14; 
  INT64 v15; 
  struct _GROUP_AFFINITY Affinity; 
  v3 = a3;
  if( !(_DWORD)a3 && *(_BYTE *)(a2 + 80) )
    return MiGetHugePageToZero(a1, a2);
  v7 = byte_140C4DBCC;
  v8 = *(_DWORD *)(a2 + 260);
  *(_QWORD *)(a2 + 32) = 0i64;
  v9 = v8 >> v7;
  *(_BYTE *)(a2 + 69) = 0;
  if( (unsigned int)a3 >= 3 )
  {
    result = (INT64)MiGetSinglePageToZero(a1, (RTL_BALANCED_NODE *)a2);
  }
  else
  {
    LODWORD(v15) = 64;
    LODWORD(v14) = 1;
    LODWORD(v13) = 4;
    result = MiUnlinkNodeLargePages(a1, (unsigned int)a3, 1i64, v9, v13, v14, a2 + 248, v15, a2);
  }
  v10 = result;
  if( result )
  {
    if( !*(_BYTE *)(a2 + 80) )
    {
      LODWORD(v11) = MiSearchNumaNodeTable((PVOID)((result - (__int64)MmGetPfnDb()) / 48));
      v12 = *(unsigned int *)(v11 + 8);
      if( *(_DWORD *)(a2 + 268) != (_DWORD)v12 )
      {
        *(_DWORD *)(a2 + 268) = v12;
        Affinity = *(struct _GROUP_AFFINITY *)(4544 * v12 + *(_QWORD *)(a1 + 16) + 4472);
        MiSetIdealProcessorThread(&Affinity);
      }
    }
    return MiMapPagesToZero(a2, v10, v3);
  }
  return result;
}

Referenced by:

MiZeroPageThread