IopAddBugcheckPowerTriageData

VOID __fastcall IopAddBugcheckPowerTriageData(
        _DEVICE_OBJECT *TriagePDO,
        _TRIAGE_9F_POWER *TriagePower,
        _IRP *TriageIrp){
  int v5; 
  _LIST_ENTRY *IrpList; 
  INT64 i; 
  _LIST_ENTRY *ThreadList; 
  int v9; 
  INT64 j; 

  v5 = 0;
  IopAddBugcheckTriageDevice(TriagePDO);
  IopAddBugcheckTriageIrp(TriageIrp, 1u);
  if( KiIsAddressRangeValid((INT64)TriagePower, 40i64) && TriagePower->Signature == 0x8000 )
  {
    IoAddTriageDumpDataBlock(TriagePower, (_BYTE *)0x28);
    IrpList = TriagePower->IrpList;
    if( IrpList && KiIsAddressRangeValid((INT64)TriagePower->IrpList, 16i64) )
    {
      IoAddTriageDumpDataBlock(IrpList, (_BYTE *)0x10);
      for( i = (INT64)IrpList->Flink; i; i = *(_QWORD *)i )
      {
        if( (_LIST_ENTRY *)i == TriagePower->IrpList )
          break;
        if( v5 >= 10 )
          break;
        ++v5;
        if( !KiIsAddressRangeValid(i, 32i64) )
          break;
        IoAddTriageDumpDataBlock((VOID *)i, (_BYTE *)0x20);
        if( *(_LIST_ENTRY **)(i + 8) != IrpList )
          break;
        IopAddBugcheckTriageIrp(*(_IRP **)(i + 16), 1u);
        IopAddBugcheckTriageDevice(*(_DEVICE_OBJECT **)(i + 24));
        IrpList = (_LIST_ENTRY *)i;
      }
    }
    ThreadList = TriagePower->ThreadList;
    if( ThreadList )
    {
      v9 = 0;
      if( KiIsAddressRangeValid((INT64)TriagePower->ThreadList, 16i64) )
      {
        IoAddTriageDumpDataBlock(ThreadList, (_BYTE *)0x10);
        for( j = (INT64)ThreadList->Flink; j; j = *(_QWORD *)j )
        {
          if( (_LIST_ENTRY *)j == TriagePower->ThreadList )
            break;
          if( v9 >= 10 )
            break;
          ++v9;
          if( !KiIsAddressRangeValid(j, 24i64) )
            break;
          IoAddTriageDumpDataBlock((VOID *)j, (_BYTE *)0x18);
          if( *(_LIST_ENTRY **)(j + 8) != ThreadList )
            break;
          ThreadList = (_LIST_ENTRY *)j;
          IopAddBugcheckTriageThread(*(_ETHREAD **)(j + 16));
        }
      }
    }
    IopAddBugcheckTriageWorkQueue(TriagePower->DelayedWorkQueue);
  }
}

Referenced by:

IopAddBugcheckTriageDataFromParameters