MiGetKernelStackSwapSupport
INT64 __fastcall MiGetKernelStackSwapSupport(INT64 a1, INT64 a2){
unsigned int v2;
unsigned int v3;
__int64 v5;
unsigned int v6;
__int64 *v7;
__int64 v8;
unsigned int v9;
__int64 v10;
INT64 v11;
_MMPTE *v12;
unsigned int v14;
unsigned int v15;
v2 = -1;
v3 = 0;
v5 = *(_QWORD *)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a2 + 1838));
v6 = *(_DWORD *)(v5 + 6936);
if( !v6 )
return 3221225799i64;
v7 = (__int64 *)(v5 + 6944);
do
{
v8 = *v7;
if( (*(_BYTE *)(*v7 + 204) & 0x50) == 0 )
{
if( v2 == -1
|| (v14 = MiPageFileLargestBitmapsRun(*(_QWORD *)(v5 + 8i64 * v2 + 6944)),
(unsigned int)MiPageFileLargestBitmapsRun(v8) > v14) )
{
v2 = v3;
}
}
++v3;
++v7;
}
while( v3 < v6 );
if( v2 == -1 )
return 3221225799i64;
v9 = *(_DWORD *)(a2 + 1520);
if( !v9 )
return 3221225738i64;
if( v9 > 0x2AAAAAAA )
v9 = 715827882;
LODWORD(v10) = MiAllocateWorkingSetSwapSupport(2 * v9);
*(_QWORD *)(a1 + 56) = v10;
if( !v10 )
return 3221225626i64;
v11 = MiSwizzleInvalidPte(0i64);
*(_QWORD *)v12 = ((unsigned __int64)(v2 & 0xF) << 12) | v11 & 0xFFFFFFFFFFFF0FFFui64;
*(_DWORD *)(a1 + 72) = MiFindFreePageFileSpace((_MI_PARTITION *)v5, v12, 6 * v9, 0x21u, v15);
return 0i64;
}Referenced by:
MmOutSwapWorkingSet