MiInitializeUnusablePfns

VOID __stdcall MiInitializeUnusablePfns(_MMPFN *Pfn1, UINT64 NumberOfPfns, UINT64 PageType, UINT64 a4){
  char v4; 
  __m128i *v6; 
  signed __int64 v7; 
  UINT64 v8; 
  __m128i *v9; 
  __int64 v10; 
  __int64 v11; 
  int v12; 
  __int64 v13; 
  unsigned int v14; 
  __int64 v15; 
  _XSTATE_CONFIGURATION *v16; 
  unsigned int v17; 
  __int64 v18; 
  __int64 v19; 
  _MMPFN *v20; 
  __int64 v21; 
  unsigned __int64 v22; 
  unsigned __int64 i; 
  __m128i v24; 
  __m128i v25; 
  int v26; 
  unsigned __int64 v27; 
  __m128i v28; 
  __m128i v29; 
  __m128i v30; 
  __m128i v31; 
  __m128i v32; 
  __m128i v33; 
  INT64 v34; 
  INT64 v35[2]; 
  __m128i v36; 
  __m128i v37; 
  UINT64 SpinCount; 
  UINT64 v39; 
  int v40; 
  __int64 v41; 
  UINT64 v42; 
  char v43; 

  v39 = NumberOfPfns;
  *(_OWORD *)v35 = 0i64;
  v4 = a4;
  v36 = 0i64;
  v6 = (__m128i *)Pfn1;
  v37 = 0i64;
  v7 = (char *)Pfn1 - (char *)MmGetPfnDb();
  v8 = 48 * NumberOfPfns;
  v9 = &v6[3 * NumberOfPfns];
  v10 = v7 / 48;
  if( (a4 & 0x1800) != 0 )
  {
    LODWORD(v34) = 0;
    MiCreateInitialLargeLeafPfns(v7 / 48, NumberOfPfns, ((unsigned int)a4 >> 11) & 1, 1, PageType, v34);
    return;
  }
  MiCreatePfnTemplate(1, (INT64)v35);
  LOBYTE(v12) = 6;
  v40 = 6;
  if( v4 >= 0 )
  {
    if( (v4 & 0x40) == 0 )
    {
      if( (v4 & 2) != 0 )
      {
        if( (v43 & 2) == 0 )
        {
          v37.m128i_i16[0] = 1;
          v36.m128i_i64[1] = v36.m128i_i64[1] & 0xC000000000000000ui64 | 1;
          goto LABEL_13;
        }
        v12 = 2;
      }
      else
      {
        v12 = 5;
      }
      v40 = v12;
      goto LABEL_13;
    }
    v35[1] = (INT64)MmGetPteBase();
  }
  else
  {
    v37.m128i_i64[1] = v37.m128i_i64[1] & 0x8FFFFFFFFFFFFFFFui64 | 0x3000000000000000i64;
    _InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 66, NumberOfPfns);
  }
LABEL_13:
  v37.m128i_i8[2] = v12 | v37.m128i_i8[2] & 0xF8;
  v37.m128i_i64[1] ^= (v37.m128i_i64[1] ^ (v11 << 39)) & 0x1FF8000000000i64;
  if( (v4 & 0xC0) != 0 )
  {
    v36.m128i_i64[1] = v36.m128i_i64[1] & 0xC000000000000000ui64 | 1;
    v36.m128i_i64[0] = MiSwizzleInvalidPte(128i64);
    v37.m128i_i64[1] = v13 & 0xFFFFFFF000000000ui64 | 0xFFFFFFFFDi64;
    MiSetPageTablePfnBuddy((INT64)v35, (INT64)KeGetCurrentThread()->ApcState.Process, 1i64);
    v36.m128i_i64[1] |= 0x4000000000000000ui64;
    v37.m128i_i16[0] = 2;
    _InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 569, NumberOfPfns);
  }
  if( (v4 & 2) != 0 )
  {
    v14 = *(unsigned __int16 *)(v41 + 32);
    v15 = MiSwizzleInvalidPte(16 * ((v41 << 12) | *(_WORD *)(v41 + 32) & 0x3E | 0x40));
    v16 = (_XSTATE_CONFIGURATION *)v42;
    v36.m128i_i64[0] = v15;
    v17 = (v14 >> 1) & 0x1F;
    v37.m128i_i64[1] = v18 | 0x8000000000000000ui64;
    LODWORD(v19) = MiGetContainingPageTable(v42);
    v20 = &MmGetPfnDb()[v19];
    v37.m128i_i64[1] = v21 ^ (v19 ^ v21) & 0xFFFFFFFFFi64;
    if( v40 == 6 )
      LODWORD(v22) = MiMakeValidPte(v16, v10, v17);
    else
      LODWORD(v22) = MiMakeTransitionPte(v10, v17);
    for( i = v22; v6 != v9; i ^= (i ^ (i + 4096)) & 0xFFFFFFFFF000i64 )
    {
      v24 = v36;
      v35[1] = (INT64)v16;
      *v6 = *(__m128i *)v35;
      v25 = v37;
      v6[1] = v24;
      v6[2] = v25;
      LOBYTE(v26) = MiPteInShadowRange((UINT64)v16);
      if( (i & 1) != 0 )
      {
        v27 = i;
        if( v26 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 )
          v27 = i | 0x8000000000000000ui64;
        v16->EnabledFeatures = v27;
      }
      else
      {
        v16->EnabledFeatures = i;
      }
      v16 = (_XSTATE_CONFIGURATION *)((char *)v16 + 8);
      v6 += 3;
    }
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)&v20->u2, 0x3Fui64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( v20->u2._bf_0 < 0 );
    }
    v20->u2._bf_0 ^= (v20->u2._bf_0 ^ (v20->u2._bf_0 + v39)) & 0x3FFFFFFFFFFFFFFFi64;
    _InterlockedAnd64(&v20->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  }
  else if( v8 <= 0x1000 )
  {
    if( v6 != v9 )
    {
      v31 = _mm_loadu_si128(&v37);
      v32 = _mm_loadu_si128(&v36);
      v33 = _mm_loadu_si128((const __m128i *)v35);
      do
      {
        *v6 = v33;
        v6[1] = v32;
        v6[2] = v31;
        v6 += 3;
      }
      while( v6 != v9 );
    }
  }
  else
  {
    if( v6 != v9 )
    {
      v28 = _mm_loadu_si128(&v37);
      v29 = _mm_loadu_si128(&v36);
      v30 = _mm_loadu_si128((const __m128i *)v35);
      do
      {
        _mm_stream_si128(v6, v30);
        _mm_stream_si128(v6 + 1, v29);
        _mm_stream_si128(v6 + 2, v28);
        v6 += 3;
      }
      while( v6 != v9 );
    }
    _mm_sfence();
  }
}

Referenced by:

MiDoGangAssignment
MiInitializeDynamicPfns
MiSwitchToPfns