MiInitializeUnusablePfns

CHAR __fastcall MiInitializeUnusablePfns(__m128i *rcx0, INT64 rdx0, UINT16 a3, UINT64 a4, INT64 a5, UINT64 a1, CHAR a7){
  char v7; 
  __m128i *v9; 
  signed __int64 v10; 
  unsigned __int64 v11; 
  __m128i *v12; 
  __int64 v13; 
  CHAR result; 
  __int64 v15; 
  int v16; 
  __int64 v17; 
  unsigned int v18; 
  INT64 v19; 
  _QWORD *v20; 
  unsigned int v21; 
  __int64 v22; 
  UINT64 ContainingPageTable; 
  UINT64 v24; 
  char *v25; 
  __int64 v26; 
  UINT64 ValidPte; 
  unsigned __int64 i; 
  __m128i v29; 
  __m128i v30; 
  BOOL v31; 
  unsigned __int64 v32; 
  __m128i v33; 
  __m128i v34; 
  __m128i v35; 
  __m128i v36; 
  __m128i v37; 
  __m128i v38; 
  INT64 v39; 
  INT64 a2[2]; 
  __m128i v41; 
  __m128i v42; 
  UINT64 SpinCount; 
  INT64 v44; 
  int v45; 
  v44 = rdx0;
  *(_OWORD *)a2 = 0i64;
  v7 = a4;
  v41 = 0i64;
  v9 = rcx0;
  v42 = 0i64;
  v10 = (char *)rcx0 - (char *)MmGetPfnDb();
  v11 = 48 * rdx0;
  v12 = &v9[3 * rdx0];
  v13 = v10 / 48;
  if( (a4 & 0x1800) != 0 )
  {
    LODWORD(v39) = 0;
    return MiCreateInitialLargeLeafPfns(v10 / 48, rdx0, ((unsigned int)a4 >> 11) & 1, 1, a3, v39);
  }
  MiCreatePfnTemplate(1, (INT64)a2);
  LOBYTE(v16) = 6;
  v45 = 6;
  if( v7 >= 0 )
  {
    if( (v7 & 0x40) == 0 )
    {
      if( (v7 & 2) != 0 )
      {
        if( (a7 & 2) == 0 )
        {
          v42.m128i_i16[0] = 1;
          v41.m128i_i64[1] = v41.m128i_i64[1] & 0xC000000000000000ui64 | 1;
          goto LABEL_13;
        }
        v16 = 2;
      }
      else
      {
        v16 = 5;
      }
      v45 = v16;
      goto LABEL_13;
    }
    a2[1] = (INT64)MmGetPteBase();
  }
  else
  {
    v42.m128i_i64[1] = v42.m128i_i64[1] & 0x8FFFFFFFFFFFFFFFui64 | 0x3000000000000000i64;
    _InterlockedExchangeAdd64(&qword_140C4DD40, rdx0);
  }
LABEL_13:
  v42.m128i_i8[2] = v16 | v42.m128i_i8[2] & 0xF8;
  result = 0;
  v42.m128i_i64[1] ^= (v42.m128i_i64[1] ^ (v15 << 39)) & 0x1FF8000000000i64;
  if( (v7 & 0xC0) != 0 )
  {
    v41.m128i_i64[1] = v41.m128i_i64[1] & 0xC000000000000000ui64 | 1;
    v41.m128i_i64[0] = MiSwizzleInvalidPte(128i64);
    v42.m128i_i64[1] = v17 & 0xFFFFFFF000000000ui64 | 0xFFFFFFFFDi64;
    MiSetPageTablePfnBuddy((INT64)a2, *((_QWORD *)KeGetCurrentThread() + 23), 1i64);
    v41.m128i_i64[1] |= 0x4000000000000000ui64;
    v42.m128i_i16[0] = 2;
    result = _InterlockedExchangeAdd64(&qword_140C4ECF8, rdx0);
  }
  if( (v7 & 2) != 0 )
  {
    v18 = *(unsigned __int16 *)(a5 + 32);
    v19 = MiSwizzleInvalidPte(16 * ((a5 << 12) | *(_WORD *)(a5 + 32) & 0x3E | 0x40));
    v20 = (_QWORD *)a1;
    v41.m128i_i64[0] = v19;
    v21 = (v18 >> 1) & 0x1F;
    v42.m128i_i64[1] = v22 | 0x8000000000000000ui64;
    ContainingPageTable = MiGetContainingPageTable(a1);
    v25 = (char *)MmGetPfnDb() + 48 * ContainingPageTable;
    v42.m128i_i64[1] = v26 ^ (ContainingPageTable ^ v26) & 0xFFFFFFFFFi64;
    if( v45 == 6 )
      ValidPte = MiMakeValidPte((UINT64)v20, v13, v21);
    else
      ValidPte = MiMakeTransitionPte(v13, v21, v24);
    for( i = ValidPte; v9 != v12; i ^= (i ^ (i + 4096)) & 0xFFFFFFFFF000i64 )
    {
      v29 = v41;
      a2[1] = (INT64)v20;
      *v9 = *(__m128i *)a2;
      v30 = v42;
      v9[1] = v29;
      v9[2] = v30;
      v31 = MiPteInShadowRange((UINT64)v20);
      if( (i & 1) != 0 )
      {
        v32 = i;
        if( v31 && (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0 )
          v32 = i | 0x8000000000000000ui64;
        *v20 = v32;
      }
      else
      {
        *v20 = i;
      }
      ++v20;
      v9 += 3;
    }
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)v25 + 6, 0x3Fui64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( *((__int64 *)v25 + 3) < 0 );
    }
    result = -1;
    *((_QWORD *)v25 + 3) ^= (*((_QWORD *)v25 + 3) ^ (*((_QWORD *)v25 + 3) + v44)) & 0x3FFFFFFFFFFFFFFFi64;
    _InterlockedAnd64((volatile signed __int64 *)v25 + 3, 0x7FFFFFFFFFFFFFFFui64);
  }
  else if( v11 <= 0x1000 )
  {
    if( v9 != v12 )
    {
      v36 = _mm_loadu_si128(&v42);
      v37 = _mm_loadu_si128(&v41);
      v38 = _mm_loadu_si128((const __m128i *)a2);
      do
      {
        *v9 = v38;
        v9[1] = v37;
        v9[2] = v36;
        v9 += 3;
      }
      while( v9 != v12 );
    }
  }
  else
  {
    if( v9 != v12 )
    {
      v33 = _mm_loadu_si128(&v42);
      v34 = _mm_loadu_si128(&v41);
      v35 = _mm_loadu_si128((const __m128i *)a2);
      do
      {
        _mm_stream_si128(v9, v35);
        _mm_stream_si128(v9 + 1, v34);
        _mm_stream_si128(v9 + 2, v33);
        v9 += 3;
      }
      while( v9 != v12 );
    }
    _mm_sfence();
  }
  return result;
}

Referenced by:

MiDoGangAssignment
MiInitializeDynamicPfns
MiSwitchToPfns