MiZeroBootLargePages

NTSTATUS __stdcall MiZeroBootLargePages(INT64 a1){
  CHAR v2; 
  unsigned int v3; 
  __int64 **p_P; 
  NTSTATUS v5; 
  int v6; 
  unsigned int v7; 
  _QWORD *Pool; 
  __int64 **v9; 
  __int64 *v10; 
  NTSTATUS v11; 
  VOID *v12; 
  __int64 *v14; 
  __int64 *P; 
  __int64 **v16; 
  VOID *Handle; 
  __int128 v18; 

  Handle = 0i64;
  v18 = 0i64;
  KeQueryPerformanceCounter((_LARGE_INTEGER *)&stru_140C4DB30 + 36);
  if( !MiComputeMemoryNodeProcessorAssignments(a1) )
    return -1073741823;
  *(_WORD *)(a1 + 6416) = 0;
  *(_DWORD *)(a1 + 6420) = 0;
  v3 = (unsigned __int16)KeNumberNodes;
  p_P = &P;
  *(_QWORD *)(a1 + 6432) = a1 + 6424;
  v5 = 0;
  *(_QWORD *)(a1 + 6424) = a1 + 6424;
  v6 = 0;
  *(_BYTE *)(a1 + 6418) = 6;
  *(_DWORD *)(a1 + 6348) = 0;
  v7 = 0;
  *(_QWORD *)(a1 + 6360) = a1 + 6352;
  *(_QWORD *)(a1 + 6352) = a1 + 6352;
  v16 = &P;
  *(_WORD *)(a1 + 6344) = 263;
  *(_BYTE *)(a1 + 6346) = 6;
  P = (__int64 *)&P;
  if( v3 )
  {
    while( 1 )
    {
      v18 = *(_OWORD *)(4544i64 * v7 + *(_QWORD *)(a1 + 16) + 4472);
      Pool = MiAllocatePool(64i64, 0x138ui64, 0x20206D4Dui64);
      if( !Pool )
        break;
      Pool[38] = MiAllocateZeroPageDecisionTraceBuffer(a1, v7);
      *((_DWORD *)Pool + 20) = v7;
      Pool[9] = a1;
      v9 = v16;
      if( *v16 != (__int64 *)&P )
LABEL_25:
        __fastfail(3u);
      Pool[1] = v16;
      *Pool = &P;
      ++v6;
      ++v7;
      *v9 = Pool;
      v16 = (__int64 **)Pool;
      if( v7 >= v3 )
        goto LABEL_6;
    }
    v5 = -1073741670;
    *(_BYTE *)(a1 + 6400) = 1;
LABEL_6:
    p_P = (__int64 **)P;
  }
  *(_DWORD *)(a1 + 6336) = v6;
  *(_DWORD *)(a1 + 6408) = v6;
  while( p_P != &P )
  {
    if( p_P[1] != (__int64 *)&P )
      goto LABEL_25;
    v10 = *p_P;
    if( (__int64 **)(*p_P)[1] != p_P )
      goto LABEL_25;
    P = *p_P;
    v10[1] = (__int64)&P;
    *(_OWORD *)p_P = 0i64;
    p_P[2] = 0i64;
    if( v5 < 0 )
    {
      v12 = 0i64;
      Handle = 0i64;
    }
    else
    {
      v18 = *(_OWORD *)(4544i64 * *((unsigned int *)p_P + 20) + *(_QWORD *)(a1 + 16) + 4472);
      v11 = PsCreateSystemThreadEx(
              (__int64)&Handle,
              0x1FFFFF,
              0i64,
              0i64,
              0i64,
              MiZeroNodePages,
              (INT64)p_P,
              &v18,
              0i64);
      v12 = Handle;
      v5 = v11;
    }
    if( v5 < 0 )
    {
      *(_BYTE *)(a1 + 6400) = 1;
      MiNodeCompletedBootZeroing(a1);
      MiZeroPageCalibrate(a1, 0i64);
      v14 = p_P[38];
      if( v14 )
        ExFreePoolWithTag(v14, 0);
      ExFreePoolWithTag(p_P, 0);
    }
    else
    {
      ObCloseHandle(v12, 0);
    }
    p_P = (__int64 **)P;
  }
  KeWaitForGate((_KGATE *)(a1 + 6344), Executive, v2);
  if( *(_BYTE *)(a1 + 6400) )
    return -1073741823;
  return v5;
}

Referenced by:

MiZeroPageThread