IopAddBugcheckTriageDataFromParameters

VOID __fastcall IopAddBugcheckTriageDataFromParameters(INT64 a1, UINT64 a2, INT64 a3, INT64 a4, INT64 Address){
  int v5; 
  UINT64 v9; 
  void *v10; 
  _ETHREAD *v11; 
  _ETHREAD *v12; 
  unsigned int v13; 
  v5 = a1;
  IoAddTriageDumpDataBlock((PVOID)(a2 & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
  IoAddTriageDumpDataBlock((PVOID)(a3 & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
  IoAddTriageDumpDataBlock((PVOID)(a4 & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
  IoAddTriageDumpDataBlock((PVOID)(Address & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
  switch( v5 )
  {
    case 205:
    case 214:
      IoAddTriageDumpDataBlock((PVOID)((a2 - 4096) & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
      break;
    case 209:
      if( !(unsigned int)MmIsSpecialPoolAddress((PVOID)a2) )
        return;
      v9 = 4096i64;
      v10 = (void *)((a2 - 4096) & 0xFFFFFFFFFFFFF000ui64);
      goto LABEL_47;
    case 335:
    case 348:
      if( KiIsAddressRangeValid(Address, 16i64) )
      {
        IoAddTriageDumpDataBlock((PVOID)Address, 0x10ui64);
        v11 = *(_ETHREAD **)(Address + 8);
        if( v11 )
          IopAddBugcheckTriageThread(v11);
      }
      break;
  }
  if( v5 == 412 )
  {
    if( !a3 || a2 - 16 > 0x40 || (((_BYTE)a2 - 16) & 0xF) != 0 )
      return;
    IopAddBugcheckTriageThread((_ETHREAD *)a3);
  }
  if( v5 == 159 )
  {
    if( a2 == 4 )
    {
      if( a4 )
        IopAddBugcheckPnpTriageData((CHAR *)a4, (CHAR ***)Address);
      return;
    }
    if( a2 != 3 )
      return;
    IopAddBugcheckPowerTriageData((_DEVICE_OBJECT *)a3, (_TRIAGE_9F_POWER *)a4, (_IRP *)Address);
  }
  if( v5 == 469 )
    IopAddBugcheckPnpWatchdogTriageData(a3);
  if( v5 == 160 )
  {
    if( a2 == 1560 )
      IopAddBugcheckTriageThread((_ETHREAD *)a4);
    if( a2 == 1561 )
    {
      IopAddBugcheckTriageDeviceNode(*(_TRIAGE_DEVICE_NODE **)(a3 + 48));
      if( !Address )
        return;
      IopAddBugcheckTriageDeviceNode((_TRIAGE_DEVICE_NODE *)Address);
    }
    if( a2 != 15 && a2 - 240 > 1 || !Address )
      return;
    IopAddBugcheckTriageThread((_ETHREAD *)Address);
  }
  if( v5 == 257 )
  {
    if( a3 || !KiIsAddressRangeValid(a4, 44800i64) )
      return;
    IoAddTriageDumpDataBlock((PVOID)a4, 0xAF00ui64);
    IoAddTriageDumpDataBlock(*(PVOID *)(a4 + 34240), 0x4D0ui64);
    v12 = *(_ETHREAD **)(a4 + 8);
    if( KiIsAddressRangeValid((INT64)v12, 2200i64) )
      IopAddBugcheckTriageThread(v12);
    IoAddTriageDumpDataBlock(
      (PVOID)((*(_QWORD *)(*(_QWORD *)(a4 + 34240) + 152i64) - 4096i64) & 0xFFFFFFFFFFFFF000ui64),
      0x2000ui64);
  }
  if( v5 == 416 )
  {
    IopAddBugcheckTriageThread((_ETHREAD *)a4);
    PopInternalAddToDumpFile(0i64, 0i64, 0i64);
  }
  if( v5 == 292 && KiIsAddressRangeValid(a3, 128i64) )
  {
    v13 = *(_DWORD *)(a3 + 20);
    v9 = 72 * (unsigned int)*(unsigned __int16 *)(a3 + 10) + 128;
    v10 = (void *)a3;
    if( v13 >= (unsigned int)v9 )
      v9 = v13;
LABEL_47:
    IoAddTriageDumpDataBlock(v10, v9);
  }
}

Referenced by:

IopUpdateMinidumpContext