IopLiveDumpInitiateCorralStateChange

VOID __stdcall IopLiveDumpInitiateCorralStateChange(_LIVEDUMP_CORRAL_CONTEXT *CorralContext, UINT64 NewState){
  _QWORD *v2; 
  __int64 v3; 
  __int64 v4; 
  _QWORD *v5; 
  __int32 v6; 
  __int64 v8; 
  __int64 v9; 
  UINT64 SpinCount; 

  v3 = *(_QWORD *)CorralContext;
  v4 = 0i64;
  *v2 = 0i64;
  v5 = v2;
  v6 = NewState;
  if( (*(_DWORD *)(v3 + 80) & 0x80u) != 0 )
  {
    LODWORD(v8) = IopLiveDumpGetMillisecondCounter(0);
    v4 = v8;
  }
  _InterlockedExchange(CorralContext + 4, 0);
  _InterlockedExchange(CorralContext + 3, v6);
  if( v6 == 7 )
    _InterlockedIncrement(CorralContext + 4);
  else
    IopLiveDumpProcessCorralStateChange(CorralContext, (_LIVEDUMP_PROCESSOR_PRIVATE_CONTEXT *)(CorralContext + 28));
  LODWORD(SpinCount) = 0;
  while( CorralContext[4] != CorralContext[5] )
    KeYieldProcessorEx(&SpinCount);
  if( (*(_DWORD *)(v3 + 80) & 0x80u) != 0 )
  {
    LODWORD(v9) = IopLiveDumpGetMillisecondCounter(0);
    *v5 = v9 - v4;
  }
}

Referenced by:

IopLiveDumpCorralProcessors
IopLiveDumpStartDumpDataBuffering
IopLiveDumpUncorralProcessors