MiEncodeProtoFill

INT64 __fastcall MiEncodeProtoFill(unsigned __int64 a1, unsigned __int64 a2, __int64 a3){
  _MMPTE *PteBase; 
  unsigned __int64 v5; 
  UINT64 v6; 
  _QWORD *v7; 
  CHAR *AnyMultiplexedVm; 
  UINT8 v9; 
  UINT8 v11; 
  PteBase = MmGetPteBase();
  v5 = (unsigned __int64)PteBase + ((a1 >> 9) & 0x7FFFFFFFF8i64);
  v6 = 0i64;
  v7 = (_QWORD *)(v5 + 8 * (a2 >> 12));
  AnyMultiplexedVm = MiGetAnyMultiplexedVm(2i64);
  v11 = MiLockWorkingSetShared((INT64)AnyMultiplexedVm);
  v9 = v11;
  if( v5 >= (unsigned __int64)v7 )
    return MiUnlockWorkingSetShared((INT64)AnyMultiplexedVm, v9);
  do
  {
    if( v6 )
    {
      if( (v5 & 0xFFF) != 0 )
        goto LABEL_4;
      MiUnlockPageTableInternal((INT64)AnyMultiplexedVm, v6);
    }
    v6 = (UINT64)PteBase + ((v5 >> 9) & 0x7FFFFFFFF8i64);
    MiLockPageTableInternal((INT64)AnyMultiplexedVm, v6, 0i64);
LABEL_4:
    *(_QWORD *)v5 = a3;
    v5 += 8i64;
    PteBase = MmGetPteBase();
  }
  while( v5 < (unsigned __int64)v7 );
  v9 = v11;
  if( v6 )
    MiUnlockPageTableInternal((INT64)AnyMultiplexedVm, v6);
  return MiUnlockWorkingSetShared((INT64)AnyMultiplexedVm, v9);
}

Referenced by:

MiInitializePrototypePtes