MiUpdateLargePageSectionPfns

INT64 __fastcall MiUpdateLargePageSectionPfns(INT64 a1, INT64 a2, INT64 a3){
  char v3; 
  unsigned __int64 v4; 
  INT64 v6; 
  UINT64 ValidPte; 
  INT64 v8; 
  int PfnPageSizeIndex; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  INT64 result; 
  unsigned __int64 v13; 
  INT64 v14; 
  UINT8 v15; 
  __int64 v16; 
  unsigned __int64 v17; 
  char v18; 
  INT64 v19; 
  INT64 v20; 
  unsigned __int64 v21; 
  v20 = a2;
  v3 = a3;
  v4 = a2;
  LODWORD(a3) = a3 | 0x80000000;
  v6 = (a1 - (__int64)MmGetPfnDb()) / 48;
  ValidPte = MiMakeValidPte(0i64, v6, a3);
  v8 = MiSwizzleInvalidPte(32i64 * (v3 & 0x1F));
  PfnPageSizeIndex = MiGetPfnPageSizeIndex(a1);
  v10 = -1i64;
  v21 = v4 + 8 * MiLargePageSizes[PfnPageSizeIndex];
  v11 = v21;
  result = MiConvertEntireLargePageToSmall((KQUEUE *)a1, PfnPageSizeIndex, 0, (LARGE_INTEGER *)1, 0i64, 0i64);
  v13 = v4;
  if( v4 < v11 )
  {
    v14 = a1 + 24;
    do
    {
      if( v10 == -1i64 || (v13 & 0xFFF) == 0 )
      {
        v19 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v4 >> 9) & 0x7FFFFFFFF8i64));
        v10 = ((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v19) >> 12) & 0xFFFFFFFFFi64;
      }
      ValidPte ^= (ValidPte ^ (v6 << 12)) & 0xFFFFFFFFF000i64;
      *(_QWORD *)v13 = ValidPte;
      v15 = MiLockPageInline(v14 - 24);
      MiSetPfnTbFlushStamp((_MMPFN *)(v14 - 24), 0i64, 1ui64);
      MiSetPfnNodeBlinkHigh((_MMPFN *)(v14 - 24), 0i64, 1ui64);
      v16 = *(_QWORD *)(v14 + 16);
      v17 = *(_QWORD *)v14 & 0xC000000000000001ui64;
      *(_QWORD *)(v14 - 24) = 0i64;
      *(_QWORD *)v14 = v17 | 1;
      *(_WORD *)(v14 + 8) = 2;
      *(_QWORD *)(v14 - 8) = v8;
      *(_QWORD *)(v14 - 16) = v13;
      v18 = *(_BYTE *)(v14 + 10);
      *(_QWORD *)(v14 + 16) = v10 & 0xFFFFFFFFFi64 | v16 & 0xFFFFFFF000000000ui64 | 0x8000000000000000ui64;
      *(_BYTE *)(v14 + 10) = v18 & 0xF8 | 6;
      MiUnlockPage((_MMPFN *)(v14 - 24), v15);
      v4 = v20;
      ++v6;
      v14 += 48i64;
      v13 += 8i64;
    }
    while( v13 < v21 );
  }
  return result;
}

Referenced by:

MiCreatePagingFileMap