MiTimeSingleLargePageZeroWorker

NTSTATUS __stdcall MiTimeSingleLargePageZeroWorker(INT64 a1, UINT64 a2){
  __int64 v2; 
  unsigned int v3; 
  signed __int32 v4; 
  unsigned int v5; 
  unsigned int v7; 
  unsigned __int8 CurrentIrql; 
  _MMPFN *v9; 
  _MMPFN *v10; 
  _MMPFN *v11; 
  __int64 v12; 
  int v13; 
  int v14; 
  unsigned __int64 v15; 
  _XSTATE_CONFIGURATION *v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  int v19; 
  unsigned __int64 Long; 
  __int64 v21; 
  __int64 v22; 
  unsigned __int64 v23; 
  unsigned int i; 
  __int64 v25; 
  unsigned __int64 v26; 
  unsigned __int64 v27; 
  unsigned __int64 v28; 
  unsigned __int64 v29; 
  unsigned __int64 v30; 
  unsigned __int64 v31; 
  unsigned __int64 v32; 
  __int64 *v33; 
  signed __int32 v34[8]; 
  INT64 v35; 
  INT64 v36; 
  INT64 v37; 
  INT64 v38; 
  int v39; 
  char SpinCount[20]; 
  __int64 v41; 
  _MI_COLOR_BASE ColorBase[4]; 
  VOID *PageBase; 
  __int64 v44; 
  INT64 v45; 
  unsigned __int64 v46; 
  INT64 v47[2]; 
  INT64 v48[16]; 
  __int64 v49[16]; 

  v45 = a1;
  v41 = 0i64;
  v2 = a1;
  v3 = a2;
  *(_OWORD *)v47 = 0i64;
  *(_OWORD *)&SpinCount[4] = 0i64;
  *(_OWORD *)ColorBase = 0i64;
  MiInitializeColorTable(v47, a2);
  MiInitializePageColorBase(0i64, v3 + 1, ColorBase);
  v4 = _InterlockedExchangeAdd(*(volatile signed __int32 **)ColorBase, 1u);
  v5 = ColorBase[2] & v4 | ColorBase[3];
  memset(v48, 0i64, sizeof(v48));
  if( !MiCreateUltraThreadContext((INT64)v48, v5, 2i64) )
    return 0;
  memset(v49, 0i64, sizeof(v49));
  v7 = 0;
  while( 1 )
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    v46 = __rdtsc();
    _InterlockedOr(v34, 0);
    LODWORD(v38) = 2;
    LODWORD(v36) = 1;
    LODWORD(v35) = 4;
    LODWORD(v9) = MiUnlinkNodeLargePages(v2, 1ui64, 1i64, v3, v35, v36, (INT64)v47, v38, 0i64);
    v10 = v9;
    if( v9 )
    {
      v12 = v9 - MmGetPfnDb();
      v44 = v12;
      MiMakeProtectionPfnCompatible((_BYTE *)4, v9);
      v14 = v13;
      MiGetUltraMapping((_MI_ZERO_THREAD_CONTEXT *)&v48[4], 1i64);
      PageBase = (VOID *)v15;
      v16 = (_XSTATE_CONFIGURATION *)((char *)MmGetPdeBase() + ((v15 >> 18) & 0x3FFFFFF8));
      LODWORD(v17) = MiMakeValidPte(v16, v12, v14 | 0xA4000000);
      v18 = v17;
      LOBYTE(v19) = MiPteInShadowRange((UINT64)v16);
      v39 = v19;
      if( v19 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v18 & 1) != 0 )
        v18 |= 0x8000000000000000ui64;
      v16->EnabledFeatures = v18;
      KeZeroPages(PageBase, 0x200000ui64);
      Long = ZeroPte.u.Long;
      if( v39 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
        Long = ZeroPte.u.Long | 0x8000000000000000ui64;
      v16->EnabledFeatures = Long;
      *(_DWORD *)SpinCount = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)&v10->u2, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx((UINT64 *)SpinCount);
        while( v10->u2._bf_0 < 0 );
      }
      v41 = 2i64;
      *(_QWORD *)&SpinCount[4] = v44;
      *(_QWORD *)&SpinCount[12] = 0i64;
      MiInsertLargePageInNodeList((__int64)&SpinCount[4]);
      v2 = v45;
    }
    else
    {
      __writecr8(CurrentIrql);
      LODWORD(v37) = 1;
      LODWORD(v36) = 2;
      LODWORD(v35) = 0;
      LODWORD(v11) = MiGetLargePagesDemoteAsNeeded(v2, v3, 0x200ui64, 0x200ui64, v35, v36, v37);
      v10 = v11;
      if( v11 )
      {
        MiFreeLargePageChain(v11);
        --v7;
        goto LABEL_28;
      }
    }
    _InterlockedOr(v34, 0);
    v21 = __rdtsc() - v46;
    __writecr8(CurrentIrql);
    if( !v10 )
      break;
    v49[v7] = v21;
    if( v7 >= 2 )
    {
      v22 = v7 - 2;
      v23 = 0i64;
      for( i = v22; i <= v7; v23 += v49[v25] )
        v25 = i++;
      v26 = v23 / 3;
      v27 = v23 / 3 / 0xA;
      v28 = v23 / 3 - v27;
      v29 = v27 + v26;
      if( (unsigned int)v22 > v7 )
        goto LABEL_31;
      do
      {
        v30 = v49[v22];
        if( v30 < v28 )
          break;
        if( v30 > v29 )
          break;
        v22 = (unsigned int)(v22 + 1);
      }
      while( (unsigned int)v22 <= v7 );
      if( (unsigned int)v22 > v7 )
        goto LABEL_31;
    }
LABEL_28:
    if( ++v7 >= 0x10 )
    {
      LODWORD(v26) = 0;
      goto LABEL_32;
    }
  }
  memset(v49, 0i64, sizeof(v49));
  v26 = 0i64;
LABEL_31:
  if( v26 )
    goto LABEL_37;
LABEL_32:
  v31 = 0i64;
  v32 = 0i64;
  v33 = v49;
  do
  {
    if( !*v33 )
      break;
    v31 += *v33;
    v32 = (unsigned int)(v32 + 1);
    ++v33;
  }
  while( (unsigned int)v32 < 0x10 );
  if( (_DWORD)v32 )
    v26 = v31 / v32;
LABEL_37:
  MiDeleteUltraThreadContext((INT64)v48);
  return v26;
}

Referenced by:

MiTimeSingleLargePageZero