MxCreatePfns

VOID __stdcall MxCreatePfns(MMPTE *PointerPxe, MMPTE *EndPxe, UINT64 PagingLevel, _LOADER_PARAMETER_BLOCK *LoaderBlock){
  _MMPTE *PteBase; 
  int v6; 
  unsigned __int64 v8; 
  INT64 v9; 
  UINT64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  UINT64 v13; 
  __int64 v14; 
  char *v15; 
  unsigned __int64 v16; 
  unsigned __int16 v17; 
  __int64 v18; 
  __int64 v19; 
  UINT64 v20; 
  unsigned __int64 v21; 
  unsigned __int16 v22; 
  __int64 v23; 
  __int64 v24; 
  UINT64 v25; 
  unsigned __int64 v26; 
  unsigned __int64 v27; 
  UINT64 v28; 
  UINT64 v29; 
  int v30; 
  if( PointerPxe <= EndPxe )
  {
    v30 = PagingLevel;
    PteBase = MmGetPteBase();
    v6 = PagingLevel;
    v8 = (unsigned __int64)PointerPxe;
    while( 1 )
    {
      v9 = MI_READ_PTE_LOCK_FREE(v8);
      v28 = v9;
      v10 = v9;
      if( (v9 & 1) != 0 )
        break;
LABEL_13:
      v8 += 8i64;
      if( v8 > (unsigned __int64)EndPxe )
        return;
    }
    v11 = v9;
    MiPteInShadowRange((UINT64)&v28);
    v12 = (v11 >> 12) & 0xFFFFFFFFFi64;
    v29 = MI_READ_PTE_LOCK_FREE((INT64)PteBase + ((v8 >> 9) & 0x7FFFFFFFF8i64));
    v13 = v29;
    MiPteInShadowRange((UINT64)&v29);
    v14 = (v13 >> 12) & 0xFFFFFFFFFi64;
    v15 = (char *)MmGetPfnDb() + 48 * v14;
    *((_QWORD *)v15 + 3) ^= (*((_QWORD *)v15 + 3) ^ (*((_QWORD *)v15 + 3) + 1i64)) & 0x3FFFFFFFFFFFFFFFi64;
    if( v6 )
    {
      if( (v10 & 0x80u) == 0i64 )
      {
        MxCreatePfn(v12, (_MMPTE *)v8, v10, v14);
        if( (_MMPTE *)v8 != MmGetPxeSelfRef() )
        {
          PteBase = MmGetPteBase();
          MxCreatePfns(
            (MMPTE *)((__int64)((v8 << 25) - ((_QWORD)PteBase << 25)) >> 16),
            (MMPTE *)(((__int64)((v8 << 25) - ((_QWORD)PteBase << 25)) >> 16) + 4088),
            (unsigned int)(v6 - 1),
            LoaderBlock);
          goto LABEL_13;
        }
        goto LABEL_12;
      }
      v21 = v10 & 0xFFFFFFFFFFFFFFFBui64;
      v22 = v21 | 0x800;
      if( (v21 & 0x42) == 0 )
        v22 = v21;
      v23 = v21 | 0x800;
      v24 = ((unsigned __int16)((unsigned __int8)word_140C4DD48 << 8) ^ v22) & 0x100;
      if( (v21 & 0x42) == 0 )
        v23 = v21;
      v25 = v23 ^ v24;
      MiWriteValidPteNewProtection((INT64 *)v8, v25);
      v26 = (__int64)((v8 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
      v27 = v26 + 4096;
      while( v26 < v27 )
      {
        if( (unsigned int)MiIsRegularMemory(LoaderBlock, v12) )
          MxCreatePfn(v12, (_MMPTE *)v26, v25, v14);
        ++v12;
        v26 += 8i64;
      }
    }
    else
    {
      v16 = v10 & 0xFFFFFFFFFFFFFFFBui64;
      v17 = v16 | 0x800;
      if( (v16 & 0x42) == 0 )
        v17 = v16;
      v18 = v16 | 0x800;
      v19 = ((unsigned __int16)((unsigned __int8)word_140C4DD48 << 8) ^ v17) & 0x100;
      if( (v16 & 0x42) == 0 )
        v18 = v16;
      v20 = v18 ^ v19;
      MiWriteValidPteNewProtection((INT64 *)v8, v20);
      if( (unsigned int)MiIsRegularMemory(LoaderBlock, v12) )
        MxCreatePfn(v12, (_MMPTE *)v8, v20, v14);
    }
    v6 = v30;
LABEL_12:
    PteBase = MmGetPteBase();
    goto LABEL_13;
  }
}

Referenced by:

MiInitializePfnsForValidMappings
MxCreatePfns