MiZeroPageCalibrate

VOID __stdcall MiZeroPageCalibrate(INT64 a1, INT64 a2){
  UINT64 v4; 
  __int64 v5; 
  INT64 v6; 
  UINT64 v7; 
  VOID *PoolMm; 
  size_t v9; 
  VOID *v10; 
  VOID *v11; 
  void *v12; 
  UINT8 CalibrationResultsMemory; 
  unsigned __int64 v14; 
  char v15; 
  void *v16; 
  INT64 v17[10]; 

  memset(v17, 0i64, sizeof(v17));
  if( a2 )
  {
    v4 = *(unsigned int *)(a2 + 80);
    v5 = *(_QWORD *)(a1 + 16) + 4544 * v4;
    *(_QWORD *)(v5 + 4432) = a2;
    v6 = MmPerProcessorZeroCalibrationBytes;
    if( !MmPerProcessorZeroCalibrationBytes )
      v6 = 0x800000i64;
    v7 = v6 * *(int *)(a2 + 128);
    PoolMm = ExAllocatePoolMm(64i64, v7, 0x655A694Dui64, v4);
    *(_QWORD *)(v5 + 4408) = PoolMm;
    if( PoolMm )
      *(_QWORD *)(v5 + 4416) = v7;
    else
      *(_BYTE *)(a1 + 6400) = 1;
    v9 = 16 * *(_DWORD *)(a2 + 128);
    v10 = ExAllocatePoolMm(64i64, 16i64 * *(int *)(a2 + 128), 0x655A694Dui64, (unsigned int)v4);
    v11 = v10;
    if( v10 )
    {
      memset(v10, 0i64, v9);
      v12 = *(void **)(v5 + 4384);
      if( v12 )
        ExFreePoolWithTag(v12, 0);
      *(_QWORD *)(v5 + 4384) = v11;
      *(_DWORD *)(v5 + 4360) = *(_DWORD *)(a2 + 128);
      *(_QWORD *)(v5 + 4368) = v6;
    }
    else
    {
      *(_BYTE *)(a1 + 6400) = 1;
    }
    _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 6404), *(_DWORD *)(a2 + 128));
  }
  else
  {
    v5 = 0i64;
    v6 = 0i64;
  }
  if( _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 6408), 0xFFFFFFFF) == 1 )
  {
    if( *(_BYTE *)(a1 + 6400) != 1 )
    {
      v17[9] = a1;
      MiTimeSingleLargePageZero(a1);
      CalibrationResultsMemory = MiAllocateCalibrationResultsMemory((INT64)v17);
      v14 = CalibrationResultsMemory;
      if( CalibrationResultsMemory == 17 )
      {
        *(_BYTE *)(a1 + 6400) = 1;
        v15 = 1;
      }
      else
      {
        LODWORD(v17[1]) = *(_DWORD *)(a1 + 6404);
        v15 = *(_BYTE *)(a1 + 6400);
        v17[2] = v6;
      }
      if( v15 )
      {
        *(_BYTE *)(a1 + 6400) = 0;
      }
      else
      {
        LODWORD(v17[5]) = *(_DWORD *)(a1 + 6404);
        KeIpiGenericCall((PKIPI_BROADCAST_WORKER)MiZeroPageCalibrateIsr, (ULONG_PTR)v17);
      }
      if( (_BYTE)v14 != 17 )
        __writecr8(v14);
      if( v17[8] )
        ExFreePoolWithTag((PVOID)v17[8], 0);
      MiComputeRunTimeZeroComparisons(a1);
    }
    *(_DWORD *)(a1 + 6408) = (unsigned __int16)KeNumberNodes;
    KeSetEvent((PRKEVENT)(a1 + 6416), 0, 0);
  }
  else if( a2 )
  {
    KeWaitForSingleObject(a1 + 6416, 0, 0, 0, 0i64);
  }
  if( v5 )
  {
    v16 = *(void **)(v5 + 4408);
    if( v16 )
    {
      ExFreePoolWithTag(v16, 0);
      *(_QWORD *)(v5 + 4408) = 0i64;
    }
  }
}

Referenced by:

MiZeroBootLargePages
MiZeroNodePages