MiInitializePrototypePtes
int __fastcall MiInitializePrototypePtes(ULONG_PTR BugCheckParameter1, __int64 a2, unsigned __int16 *a3, int a4){
INT64 SubsectionPte;
__int64 v9;
INT64 v10;
unsigned __int64 v11;
unsigned __int64 v12;
unsigned int v13;
unsigned __int64 v14;
unsigned __int64 v15;
__int64 v16;
INT64 v18[2];
INT64 v19[5];
int v20;
LODWORD(SubsectionPte) = memset((INT64)v19, 0i64);
v9 = *(_QWORD *)a3;
v10 = 1i64;
v11 = 8 * a2;
v12 = 4096i64;
if( *(_QWORD *)(*(_QWORD *)a3 + 64i64) )
{
SubsectionPte = MiMakeSubsectionPte((INT64)a3);
LABEL_3:
v14 = SubsectionPte;
goto LABEL_4;
}
v13 = 0;
if( (*(_DWORD *)(v9 + 56) & 0x1000) == 0 )
{
SubsectionPte = MiMakeDemandZeroPte((a3[16] >> 1) & 0x1F);
goto LABEL_3;
}
v14 = 0i64;
LABEL_4:
if( v11 >= v12 )
{
if( a4 )
{
v15 = v14;
if( !v14 )
v15 = MiMakeDemandZeroPte(4) & 0xFFFFFFFFFFFFFC1Fui64;
MiEncodeProtoFill(BugCheckParameter1, v11, v15 | (((v10 ^ v13) << 10) + 2));
LODWORD(SubsectionPte) = v11 & 0xFFFFF000;
BugCheckParameter1 += v11 & 0xFFFFFFFFFFFFF000ui64;
v11 &= 0xFFFu;
}
else
{
v18[0] = BugCheckParameter1;
v18[1] = v11;
MiInitializeFaultVaListCore((INT64)v19, (INT64)v18, v10, 2);
v20 = (*(_DWORD *)(v9 + 56) >> 20) & 0x3F;
LODWORD(SubsectionPte) = MmAccessFault(2ui64, (PVOID)BugCheckParameter1, 0, (PVOID)(v16 | (unsigned __int64)v19));
}
}
if( v11 )
{
LODWORD(SubsectionPte) = v14;
memset64((void *)BugCheckParameter1, v14, v11 >> 3);
}
return SubsectionPte;
}Referenced by:
MiCreatePagingFileMap
MiCreatePrototypePtes
MiExtendSection