MiZeroPageCalibrate

VOID __fastcall MiZeroPageCalibrate(INT64 a1, INT64 a2){
  UINT64 v4; 
  __int64 v5; 
  __int64 v6; 
  UINT64 v7; 
  VOID *PoolMm; 
  VOID *v9; 
  VOID *v10; 
  void *v11; 
  UINT8 CalibrationResultsMemory; 
  unsigned __int64 v13; 
  char v14; 
  void *v15; 
  ULONG_PTR Context; 
  int v17; 
  __int64 v18; 
  int v19; 
  PVOID P; 
  INT64 v21; 
  memset((INT64)&Context, 0i64);
  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 = ExAllocatePoolMm(64i64, 16i64 * *(int *)(a2 + 128), 0x655A694Dui64, (unsigned int)v4);
    v10 = v9;
    if( v9 )
    {
      memset((INT64)v9, 0i64);
      v11 = *(void **)(v5 + 4384);
      if( v11 )
        ExFreePoolWithTag(v11, 0);
      *(_QWORD *)(v5 + 4384) = v10;
      *(_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 )
    {
      v21 = a1;
      MiTimeSingleLargePageZero(a1);
      CalibrationResultsMemory = MiAllocateCalibrationResultsMemory((INT64)&Context);
      v13 = CalibrationResultsMemory;
      if( CalibrationResultsMemory == 17 )
      {
        *(_BYTE *)(a1 + 6400) = 1;
        v14 = 1;
      }
      else
      {
        v17 = *(_DWORD *)(a1 + 6404);
        v14 = *(_BYTE *)(a1 + 6400);
        v18 = v6;
      }
      if( v14 )
      {
        *(_BYTE *)(a1 + 6400) = 0;
      }
      else
      {
        v19 = *(_DWORD *)(a1 + 6404);
        KeIpiGenericCall((PKIPI_BROADCAST_WORKER)MiZeroPageCalibrateIsr, &Context);
      }
      if( (_BYTE)v13 != 17 )
        __writecr8(v13);
      if( P )
        ExFreePoolWithTag(P, 0);
      MiComputeRunTimeZeroComparisons(a1);
    }
    *(_DWORD *)(a1 + 6408) = (unsigned __int16)KeNumberNodes;
    KeSetEvent((PRKEVENT)(a1 + 6416), 0);
  }
  else if( a2 )
  {
    KeWaitForSingleObject((PVOID)(a1 + 6416), Executive, 0, 0, 0i64);
  }
  if( v5 )
  {
    v15 = *(void **)(v5 + 4408);
    if( v15 )
    {
      ExFreePoolWithTag(v15, 0);
      *(_QWORD *)(v5 + 4408) = 0i64;
    }
  }
}

Referenced by:

MiZeroBootLargePages
MiZeroNodePages