IopLiveDumpProcessCorralStateChange

VOID __stdcall IopLiveDumpProcessCorralStateChange(
        _LIVEDUMP_CORRAL_CONTEXT *CorralContext,
        _LIVEDUMP_PROCESSOR_PRIVATE_CONTEXT *PrivateContext){
  unsigned int v4; 
  unsigned int v5; 
  unsigned int v6; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  __int16 v11; 
  UINT64 SpinCount; 

  LODWORD(SpinCount) = 0;
  while( CorralContext[3] == PrivateContext->CurrentState )
    KeYieldProcessorEx(&SpinCount);
  v4 = CorralContext[3];
  PrivateContext->CurrentState = v4;
  v5 = v4 - 2;
  if( v5 )
  {
    v6 = v5 - 1;
    if( v6 )
    {
      v7 = v6 - 1;
      if( v7 )
      {
        v8 = v7 - 1;
        if( v8 )
        {
          v9 = v8 - 1;
          if( v9 )
          {
            v10 = v9 - 1;
            if( v10 )
            {
              if( v10 == 1 && *(&PrivateContext->SavedInterruptEnableFlag + 1) )
              {
                KeRestoreSupervisorState(
                  (INT64)KeGetCurrentPrcb()->ExtendedSupervisorState,
                  KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures | 0x100);
                *(&PrivateContext->SavedInterruptEnableFlag + 1) = 0;
              }
            }
            else if( SaveSupervisorState )
            {
              KeSaveSupervisorState(
                (INT64)KeGetCurrentPrcb()->ExtendedSupervisorState,
                KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures | 0x100);
              *(&PrivateContext->SavedInterruptEnableFlag + 1) = 1;
            }
          }
          else if( PrivateContext->SavedInterruptEnableFlag )
          {
            _enable();
          }
        }
        else
        {
          KeResumeClockTimerSafe();
        }
      }
      else
      {
        IopLiveDumpBufferDumpData(CorralContext, PrivateContext);
      }
    }
    else
    {
      KeSuspendClockTimerSafe();
    }
  }
  else
  {
    _disable();
    PrivateContext->SavedInterruptEnableFlag = (v11 & 0x200) != 0;
  }
  _InterlockedIncrement(CorralContext + 4);
}

Referenced by:

IopLiveDumpCorralDpc
IopLiveDumpInitiateCorralStateChange