IopAddBugcheckPowerTriageData

NTSTATUS __stdcall IopAddBugcheckPowerTriageData(
        _DEVICE_OBJECT *TriagePDO,
        _TRIAGE_9F_POWER *TriagePower,
        _IRP *TriageIrp){
  int v5; 
  NTSTATUS v6; 
  _LIST_ENTRY *IrpList; 
  _LIST_ENTRY *i; 
  _LIST_ENTRY *ThreadList; 
  int v10; 
  _LIST_ENTRY *Flink; 
  v5 = 0;
  v6 = 0;
  IopAddBugcheckTriageDevice(TriagePDO);
  IopAddBugcheckTriageIrp(TriageIrp, 1u);
  if( !KiIsAddressRangeValid((INT64)TriagePower, 40i64) || TriagePower->Signature != 0x8000 )
    return -1073741823;
  IoAddTriageDumpDataBlock(TriagePower, 0x28ui64);
  IrpList = TriagePower->IrpList;
  if( IrpList )
  {
    if( KiIsAddressRangeValid((INT64)TriagePower->IrpList, 16i64) )
    {
      IoAddTriageDumpDataBlock(IrpList, 0x10ui64);
      for( i = IrpList->Flink; i && i != TriagePower->IrpList && v5 < 10; i = i->Flink )
      {
        ++v5;
        if( !KiIsAddressRangeValid((INT64)i, 32i64) )
          goto LABEL_14;
        IoAddTriageDumpDataBlock(i, 0x20ui64);
        if( i->Blink != IrpList )
          goto LABEL_14;
        IopAddBugcheckTriageIrp((_IRP *)i[1].Flink, 1u);
        IopAddBugcheckTriageDevice((_DEVICE_OBJECT *)i[1].Blink);
        IrpList = i;
      }
    }
    else
    {
LABEL_14:
      v6 = -1073741823;
    }
  }
  ThreadList = TriagePower->ThreadList;
  if( ThreadList )
  {
    v10 = 0;
    if( KiIsAddressRangeValid((INT64)TriagePower->ThreadList, 16i64) )
    {
      IoAddTriageDumpDataBlock(ThreadList, 0x10ui64);
      Flink = ThreadList->Flink;
      if( ThreadList->Flink )
      {
        while( Flink != TriagePower->ThreadList && v10 < 10 )
        {
          ++v10;
          if( !KiIsAddressRangeValid((INT64)Flink, 24i64) )
            goto LABEL_24;
          IoAddTriageDumpDataBlock(Flink, 0x18ui64);
          if( Flink->Blink != ThreadList )
            goto LABEL_24;
          ThreadList = Flink;
          v6 = IopAddBugcheckTriageThread((_ETHREAD *)Flink[1].Flink);
          Flink = Flink->Flink;
          if( !Flink )
            break;
        }
      }
    }
    else
    {
LABEL_24:
      v6 = -1073741823;
    }
  }
  IopAddBugcheckTriageWorkQueue((CHAR **)TriagePower->DelayedWorkQueue);
  return v6;
}

Referenced by:

IopAddBugcheckTriageDataFromParameters