MiScrubProcesses
INT64 __stdcall MiScrubProcesses(_MI_PARTITION *Partition, KEVENT *StopEvent, UINT64 *PagesScrubbed){
INT64 v5;
void *i;
__int64 v7;
_KPROCESS *v8;
_EPROCESS *NextProcess;
INT64 v10;
INT64 OpaqueParameter;
int v12;
INT64 result[26];
_KAPC_STATE ApcState;
memset(&ApcState, 0, sizeof(ApcState));
memset((INT64)result, 0i64);
v12 = -1;
OpaqueParameter = (INT64)Partition;
v5 = MiInitializeScrubPacket((__int64)&OpaqueParameter);
if( (int)v5 >= 0 )
{
for( i = 0i64; ; i = (void *)v10 )
{
NextProcess = (_EPROCESS *)PsGetNextProcess(i);
v10 = (INT64)NextProcess;
if( !NextProcess )
break;
MiGetProcessPartition(NextProcess);
if( v7 == *((_QWORD *)Partition + 6) )
{
if( MiScrubInterrupted((INT64)&OpaqueParameter) )
break;
if( MiProcessHasAwePrivatePages(v10) || *(_DWORD *)(v10 + 2140) )
{
KiStackAttachProcess((_KPROCESS *)v8, 0i64, &ApcState);
MiScrubProcessLargePages((UINT64 *)&OpaqueParameter);
MiScrubProcessPhysicalPages(&OpaqueParameter);
KiUnstackDetachProcess(&ApcState, 0i64);
}
}
}
*(_QWORD *)&StopEvent->Header.Lock = *(INT64 *)((char *)&result[24] + 4);
MiReleaseScrubPacket((__int64)&OpaqueParameter);
return 0i64;
}
return v5;
}Referenced by:
MmScrubMemory