MiScrubProcesses

NTSTATUS __stdcall MiScrubProcesses(_MI_PARTITION *Partition, _KEVENT *StopEvent, UINT64 *PagesScrubbed){
  UINT64 v5; 
  _KEVENT *v6; 
  _MISCRUB_PACKET *v7; 
  NTSTATUS result; 
  _EPROCESS *i; 
  int v10; 
  int v11; 
  void *v12; 
  _LIST_ENTRY *NextProcess; 
  _EPROCESS *v14; 
  INT64 v15; 
  INT64 OpaqueParameter; 
  int v17; 
  _DWORD v18[53]; 
  _KAPC_STATE ApcState; 

  memset(&ApcState, 0, sizeof(ApcState));
  memset(v18, 0i64, sizeof(v18));
  v17 = -1;
  OpaqueParameter = (INT64)Partition;
  result = MiInitializeScrubPacket((_MI_PARTITION *)&OpaqueParameter, v5, v6, v7);
  if( result >= 0 )
  {
    for( i = 0i64; ; i = (_EPROCESS *)v15 )
    {
      NextProcess = PsGetNextProcess(i);
      v15 = (INT64)NextProcess;
      if( !NextProcess )
        break;
      if( MiGetProcessPartition(NextProcess, v14) == (_MI_PARTITION *)Partition->Core.PfnUnmapWorkItem.List.Flink )
      {
        LOBYTE(v10) = MiScrubInterrupted((INT64)&OpaqueParameter);
        if( v10 )
          break;
        LOBYTE(v11) = MiProcessHasAwePrivatePages(v15);
        if( v11 || *(_DWORD *)(v15 + 2140) )
        {
          KiStackAttachProcess(v12, 0i64, &ApcState);
          MiScrubProcessLargePages((SECONDARY_INTERRUPT_MASK *)&OpaqueParameter);
          MiScrubProcessPhysicalPages(&OpaqueParameter);
          KiUnstackDetachProcess(&ApcState, 0i64);
        }
      }
    }
    *(_QWORD *)StopEvent = *(_QWORD *)&v18[49];
    MiReleaseScrubPacket((_MISCRUB_PACKET *)&OpaqueParameter);
    return 0;
  }
  return result;
}

Referenced by:

No references.