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