PnpWatchdogExtractTriageInformation

_QWORD *__fastcall PnpWatchdogExtractTriageInformation(INT64 a1, _QWORD *a2, _QWORD *a3, _QWORD *a4, _QWORD *a5){
  int v5; 
  __int64 v6; 
  __int64 v7; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  __int64 v12; 
  _QWORD *v13; 
  _QWORD *v14; 
  __int64 v15; 
  _QWORD *result; 
  v5 = *(_DWORD *)(a1 + 16);
  v6 = 0i64;
  *a2 = 0i64;
  v7 = 0i64;
  v8 = v5 - 1;
  if( v8 )
  {
    v9 = v8 - 1;
    if( v9 )
    {
      v10 = v9 - 1;
      if( v10 )
      {
        v11 = v10 - 1;
        if( v11 )
        {
          if( v11 != 1 )
            __fastfail(5u);
          v12 = *(_QWORD *)(a1 + 24);
          v6 = *(_QWORD *)(v12 + 8);
          *a3 = *(_QWORD *)(v12 + 16);
        }
        else
        {
          v13 = *(_QWORD **)(a1 + 24);
          v6 = v13[2];
          *a3 = v13[3];
          *a2 = v13[1];
        }
      }
      else
      {
        v14 = *(_QWORD **)(a1 + 24);
        *a3 = PnpDelayedRemoveWorkerThread;
        v7 = v14[1];
        *a2 = *v14;
      }
    }
    else
    {
      *a3 = *(_QWORD *)PnpDeviceActionThread;
      v15 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 16i64);
      *a2 = v15;
      if( v15 )
        v7 = *(_QWORD *)(v15 + 32);
    }
  }
  else
  {
    *a3 = PnpDeviceEventThread;
    v7 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 152i64);
    if( v7 )
      *a2 = *(_QWORD *)(*(_QWORD *)(v7 + 312) + 40i64);
  }
  if( a4 )
    *a4 = v7;
  result = a5;
  if( a5 )
    *a5 = v6;
  return result;
}

Referenced by:

PnpWatchdogBugcheck
PnpWatchdogEtwWrite