IopAddBugcheckTriageDeviceNode

NTSTATUS __stdcall IopAddBugcheckTriageDeviceNode(_TRIAGE_DEVICE_NODE *TriageDevNode){
  NTSTATUS v1; 
  int v3; 
  _IRP *PendingIrp; 
  _TRIAGE_POP_FX_DEVICE *FxDevice; 
  _IRP *Irp; 
  _UNICODE_STRING TriageString; 

  v1 = 0;
  v3 = 0;
  while( 1 )
  {
    ++v3;
    if( !KiIsAddressRangeValid((INT64)TriageDevNode, 88i64) )
      break;
    IoAddTriageDumpDataBlock(TriageDevNode, (_BYTE *)0x58);
    TriageString = TriageDevNode->InstancePath;
    IopAddBugcheckTriageUnicodeString(&TriageString);
    TriageString = TriageDevNode->ServiceName;
    IopAddBugcheckTriageUnicodeString(&TriageString);
    PendingIrp = TriageDevNode->PendingIrp;
    if( PendingIrp )
      IopAddBugcheckTriageIrp(PendingIrp, 0);
    FxDevice = TriageDevNode->FxDevice;
    if( FxDevice )
    {
      if( KiIsAddressRangeValid((INT64)TriageDevNode->FxDevice, 56i64) )
      {
        IoAddTriageDumpDataBlock(FxDevice, (_BYTE *)0x38);
        Irp = FxDevice->Irp;
        if( Irp )
          IopAddBugcheckTriageIrp(Irp, 0);
      }
    }
    IopAddBugcheckTriageDevice(TriageDevNode->PhysicalDeviceObject);
    TriageDevNode = TriageDevNode->Parent;
    if( !TriageDevNode || v3 >= 10 )
      return v1;
  }
  return -1073741823;
}

Referenced by:

IopAddBugcheckPnpWatchdogTriageData
IopAddBugcheckTriageCompletionQueue
IopAddBugcheckTriageDataFromParameters
IopAddBugcheckTriageIrp