IopLiveDumpCorralProcessors

char __fastcall IopLiveDumpCorralProcessors(PVOID DeferredContext){
  GUID *v1; 
  INT64 v2; 
  INT64 MillisecondCounter; 
  unsigned __int8 CurrentIrql; 
  int v6; 
  unsigned int Data1; 
  INT64 v8; 
  unsigned int v9; 
  __int64 v11; 
  struct _GROUP_AFFINITY Affinity; 
  unsigned __int16 *v13[2]; 
  __int16 v14; 
  int v15; 
  __int16 v16; 
  int v17; 
  UINT64 SpinCount; 
  __int64 v19; 
  __int64 v20; 
  v1 = *(GUID **)DeferredContext;
  v2 = 0i64;
  *((_DWORD *)DeferredContext + 2) = 0;
  v15 = 0;
  v16 = 0;
  v17 = 0;
  MillisecondCounter = 0i64;
  LODWORD(SpinCount) = 0;
  v11 = 0i64;
  v20 = 0i64;
  v19 = 0i64;
  *((_DWORD *)DeferredContext + 3) = 0;
  *((_DWORD *)DeferredContext + 4) = 0;
  *((_DWORD *)DeferredContext + 5) = 0;
  *((_QWORD *)DeferredContext + 14) = 0i64;
  *((_DWORD *)DeferredContext + 30) = 0;
  IopLiveDumpLockPages();
  Affinity.Group = (unsigned int)KiProcessorIndexToNumberMappingTable[0] >> 6;
  *(_DWORD *)Affinity.Reserved = 0;
  Affinity.Reserved[2] = 0;
  Affinity.Mask = 1i64 << (KiProcessorIndexToNumberMappingTable[0] & 0x3F);
  KeSetSystemGroupAffinityThread(&Affinity, (PGROUP_AFFINITY)DeferredContext + 6);
  *((_QWORD *)DeferredContext + 14) = 0i64;
  *((_DWORD *)DeferredContext + 3) = 1;
  IopLiveDumpTraceSystemQuiesceStart();
  if( (v1[5].Data1 & 0x80u) != 0 )
    MillisecondCounter = IopLiveDumpGetMillisecondCounter(0);
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  *((_BYTE *)DeferredContext + 88) = CurrentIrql;
  KeInitializeDpc((PRKDPC)((char *)DeferredContext + 24), IopLiveDumpCorralDpc, DeferredContext);
  *((_BYTE *)DeferredContext + 25) = 2;
  v13[1] = (unsigned __int16 *)KeActiveProcessors.Bitmap[0];
  v13[0] = (unsigned __int16 *)&KeActiveProcessors;
  v14 = 0;
  while( !(unsigned int)KeEnumerateNextProcessor(&v17, v13) )
  {
    if( v17 == *((_DWORD *)DeferredContext + 28) )
    {
      _InterlockedAdd((volatile signed __int32 *)DeferredContext + 4, 1u);
    }
    else
    {
      v6 = *((_DWORD *)DeferredContext + 4);
      if( !*((_QWORD *)DeferredContext + 10) )
        *((_WORD *)DeferredContext + 13) = v17 + 1280;
      KeInsertQueueDpc((PRKDPC)((char *)DeferredContext + 24), 0i64, 0i64);
      LODWORD(SpinCount) = 0;
      while( v6 == *((_DWORD *)DeferredContext + 4) )
        KeYieldProcessorEx(&SpinCount);
    }
  }
  *((_DWORD *)DeferredContext + 5) = *((_DWORD *)DeferredContext + 4);
  Data1 = v1[5].Data1;
  if( (Data1 & 0x80u) != 0 )
  {
    v8 = IopLiveDumpGetMillisecondCounter(0);
    Data1 = v1[5].Data1;
    v2 = v8 - MillisecondCounter;
  }
  if( (Data1 & 0x100) == 0 )
    IopLiveDumpInitiateCorralStateChange((__int64)DeferredContext, 2, &v11);
  PoAllProcIntrDisabled = 1;
  IopLiveDumpInitiateCorralStateChange((__int64)DeferredContext, 7, &v20);
  IopLiveDumpInitiateCorralStateChange((__int64)DeferredContext, 3, &v19);
  *((_DWORD *)DeferredContext + 2) |= 1u;
  v9 = v1[5].Data1;
  if( (v9 & 0x80u) != 0 )
    LOBYTE(v9) = IopLiveDumpTraceCorralProcessorsDuration(*(GUID **)DeferredContext, v2, v11, v20, v19);
  return v9;
}

Referenced by:

IopLiveDumpEndMirroringCallback