MiUpdateLargePageSectionPfns
NTSTATUS __stdcall MiUpdateLargePageSectionPfns(INT64 a1, INT64 a2, INT64 a3){
char v3;
unsigned __int64 v4;
INT64 v6;
unsigned __int64 v7;
unsigned __int64 v8;
__int64 v9;
NTSTATUS PfnPageSizeIndex;
__int64 v11;
unsigned __int64 v12;
NTSTATUS result;
UINT64 v14;
INT64 v15;
INT64 v16;
unsigned __int64 v17;
unsigned __int64 v18;
int v19;
UINT8 v20;
__int64 v21;
unsigned __int64 v22;
char v23;
INT64 v24;
INT64 v25;
unsigned __int64 v26;
v25 = a2;
v3 = a3;
v4 = a2;
LODWORD(a3) = a3 | 0x80000000;
v6 = (a1 - (__int64)MmGetPfnDb()) / 48;
LODWORD(v7) = MiMakeValidPte(0i64, v6, a3);
v8 = v7;
v9 = MiSwizzleInvalidPte(32i64 * (v3 & 0x1F));
PfnPageSizeIndex = MiGetPfnPageSizeIndex(a1);
v11 = -1i64;
v26 = v4 + 8 * MiLargePageSizes[PfnPageSizeIndex];
v12 = v26;
result = MiConvertEntireLargePageToSmall((_KQUEUE *)a1, PfnPageSizeIndex, 0, (_LARGE_INTEGER *)1, 0i64, 0i64);
v14 = v4;
if( v4 < v12 )
{
v15 = a1 + 24;
do
{
if( v11 == -1 || (v14 & 0xFFF) == 0 )
{
LODWORD(v16) = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v4 >> 9) & 0x7FFFFFFFF8i64));
v24 = v16;
LODWORD(v17) = MI_READ_PTE_LOCK_FREE((INT64)&v24);
v11 = (v17 >> 12) & 0xFFFFFFFFFi64;
}
v8 ^= (v8 ^ (v6 << 12)) & 0xFFFFFFFFF000i64;
v18 = v8;
LOBYTE(v19) = MiPteInShadowRange(v14);
if( v19 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v8 & 1) != 0 )
v18 = v8 | 0x8000000000000000ui64;
*(_QWORD *)v14 = v18;
v20 = MiLockPageInline((_MMPFN *)(v15 - 24));
MiSetPfnTbFlushStamp((_MMPFN *)(v15 - 24), 0i64, 1ui64);
MiSetPfnNodeBlinkHigh((_MMPFN *)(v15 - 24), 0i64, 1ui64);
v21 = *(_QWORD *)(v15 + 16);
v22 = *(_QWORD *)v15 & 0xC000000000000001ui64;
*(_QWORD *)(v15 - 24) = 0i64;
*(_QWORD *)v15 = v22 | 1;
*(_WORD *)(v15 + 8) = 2;
*(_QWORD *)(v15 - 8) = v9;
*(_QWORD *)(v15 - 16) = v14;
v23 = *(_BYTE *)(v15 + 10);
*(_QWORD *)(v15 + 16) = v11 & 0xFFFFFFFFFi64 | v21 & 0xFFFFFFF000000000ui64 | 0x8000000000000000ui64;
*(_BYTE *)(v15 + 10) = v23 & 0xF8 | 6;
MiUnlockPage((_MMPFN *)(v15 - 24), v20);
v4 = v25;
++v6;
v15 += 48i64;
v14 += 8i64;
}
while( v14 < v26 );
}
return result;
}Referenced by:
MiCreatePagingFileMap