MiZeroWithUltraSpace
VOID __fastcall MiZeroWithUltraSpace(INT64 a1, INT64 a2){
INT64 v2;
__int64 v4;
unsigned int PfnPageSizeIndex;
unsigned int v6;
__int64 v7;
_MMPTE *PteBase;
VOID *v9;
UINT64 v10;
__int64 v11;
int ProtectionPfnCompatible;
INT64 v13;
int v14;
UINT64 ValidPte;
UINT64 v16;
UINT64 v17;
__int64 v18;
unsigned __int64 UltraMapping;
v2 = a1;
LODWORD(v4) = 3;
if( (*(_QWORD *)(a2 + 40) & 0x1000000000i64) == 0 )
goto LABEL_6;
PfnPageSizeIndex = MiGetPfnPageSizeIndex(a2);
v4 = PfnPageSizeIndex;
if( PfnPageSizeIndex == -1 )
v4 = v6;
if( (unsigned int)v4 < v6 )
{
v7 = MiLargePageSizes[v4];
v18 = v7;
}
else
{
LABEL_6:
v7 = 1i64;
v18 = 1i64;
}
UltraMapping = MiGetUltraMapping((unsigned __int64 *)(v2 + 32i64 * (unsigned int)v4), v4, v7, 0);
PteBase = MmGetPteBase();
v9 = (VOID *)UltraMapping;
v10 = (UINT64)PteBase + ((UltraMapping >> 9) & 0x7FFFFFFFF8i64);
if( (unsigned int)v4 <= 1 )
{
v11 = (unsigned int)(2 - v4);
do
{
v10 = (UINT64)PteBase + ((v10 >> 9) & 0x7FFFFFFFF8i64);
--v11;
}
while( v11 );
}
ProtectionPfnCompatible = MiMakeProtectionPfnCompatible(4ui64, (_MMPFN *)a2);
v14 = -1543503872;
if( (unsigned int)v4 > 1 )
v14 = -1610612736;
ValidPte = MiMakeValidPte(v10, v13, ProtectionPfnCompatible | (unsigned int)v14);
if( (_DWORD)v4 == 2 )
{
if( v10 < v10 + 128 )
{
v16 = v10 + 128;
do
{
*(_QWORD *)v10 = ValidPte;
v10 += 8i64;
ValidPte ^= (ValidPte ^ (ValidPte + 4096)) & 0xFFFFFFFFF000i64;
}
while( v10 < v16 );
v7 = v18;
v9 = (VOID *)UltraMapping;
}
v10 -= 128i64;
}
else
{
*(_QWORD *)v10 = ValidPte;
}
MiZeroMemory(v9, v7 << 12);
if( (_DWORD)v4 == 2 )
{
v17 = v10 + 128;
while( v10 < v17 )
{
*(_QWORD *)v10 = ZeroPte;
v10 += 8i64;
}
}
else
{
*(_QWORD *)v10 = ZeroPte;
}
}Referenced by:
MiZeroInParallelWorker