MiGetPagesToZero
INT64 __fastcall MiGetPagesToZero(INT64 a1, UINT64 a2, UINT64 a3){
unsigned int v3;
INT64 result;
char v7;
unsigned int v8;
UINT64 v9;
INT64 v10;
__int64 v11;
__int64 v12;
INT64 v13;
INT64 v14;
INT64 v15;
struct _GROUP_AFFINITY Affinity;
v3 = a3;
if( !(_DWORD)a3 && *(_BYTE *)(a2 + 80) )
return MiGetHugePageToZero(a1, a2);
v7 = byte_140C4DBCC;
v8 = *(_DWORD *)(a2 + 260);
*(_QWORD *)(a2 + 32) = 0i64;
v9 = v8 >> v7;
*(_BYTE *)(a2 + 69) = 0;
if( (unsigned int)a3 >= 3 )
{
result = (INT64)MiGetSinglePageToZero(a1, (RTL_BALANCED_NODE *)a2);
}
else
{
LODWORD(v15) = 64;
LODWORD(v14) = 1;
LODWORD(v13) = 4;
result = MiUnlinkNodeLargePages(a1, (unsigned int)a3, 1i64, v9, v13, v14, a2 + 248, v15, a2);
}
v10 = result;
if( result )
{
if( !*(_BYTE *)(a2 + 80) )
{
LODWORD(v11) = MiSearchNumaNodeTable((PVOID)((result - (__int64)MmGetPfnDb()) / 48));
v12 = *(unsigned int *)(v11 + 8);
if( *(_DWORD *)(a2 + 268) != (_DWORD)v12 )
{
*(_DWORD *)(a2 + 268) = v12;
Affinity = *(struct _GROUP_AFFINITY *)(4544 * v12 + *(_QWORD *)(a1 + 16) + 4472);
MiSetIdealProcessorThread(&Affinity);
}
}
return MiMapPagesToZero(a2, v10, v3);
}
return result;
}Referenced by:
MiZeroPageThread