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