MiGetKernelStackSwapSupport
__int64 __fastcall MiGetKernelStackSwapSupport(__int64 a1, __int64 a2){
unsigned int v2;
unsigned int v3;
_MI_PARTITION *v5;
volatile unsigned int NumberOfPagingFiles;
_MMPAGING_FILE **PagingFile;
_MMPAGING_FILE *v8;
unsigned int v9;
_MI_WS_SWAP_SUPPORT *WorkingSetSwapSupport;
__int64 v11;
_MMPTE *v12;
unsigned int v14;
v2 = -1;
v3 = 0;
v5 = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8i64 * *(unsigned __int16 *)(a2 + 1838));
NumberOfPagingFiles = v5->Vp.NumberOfPagingFiles;
if( !NumberOfPagingFiles )
return 3221225799i64;
PagingFile = v5->Vp.PagingFile;
do
{
v8 = *PagingFile;
if( ((*PagingFile)->_bf_cc & 0x50) == 0 )
{
if( v2 == -1 || (v14 = MiPageFileLargestBitmapsRun(v5->Vp.PagingFile[v2]), MiPageFileLargestBitmapsRun(v8) > v14) )
v2 = v3;
}
++v3;
++PagingFile;
}
while( v3 < NumberOfPagingFiles );
if( v2 == -1 )
return 3221225799i64;
v9 = *(_DWORD *)(a2 + 1520);
if( !v9 )
return 3221225738i64;
if( v9 > 0x2AAAAAAA )
v9 = 715827882;
WorkingSetSwapSupport = MiAllocateWorkingSetSwapSupport(2 * v9);
*(_QWORD *)(a1 + 56) = WorkingSetSwapSupport;
if( !WorkingSetSwapSupport )
return 3221225626i64;
v11 = MiSwizzleInvalidPte(0i64);
v12->u.Long = ((unsigned __int64)(v2 & 0xF) << 12) | v11 & 0xFFFFFFFFFFFF0FFFui64;
*(_DWORD *)(a1 + 72) = MiFindFreePageFileSpace(v5, v12, 6 * v9, 0x21ui64);
return 0i64;
}Referenced by:
MmOutSwapWorkingSet