IopLiveDumpAddTriageDumpData

INT8 __stdcall IopLiveDumpAddTriageDumpData(INT64 *rcx0, INT64 a2){
  KBUGCHECK_REASON_CALLBACK_RECORD *Flink; 
  INT8 result; 
  int v6; 
  INT64 v7; 
  INT64 v8; 
  __int64 i; 
  unsigned __int64 v10; 
  __int64 v11; 
  INT64 v12[2]; 
  __int128 v13; 
  __int128 v14; 
  INT64 v15; 
  LIST_ENTRY *PreviousValidEntry; 
  Flink = (KBUGCHECK_REASON_CALLBACK_RECORD *)KeBugCheckReasonCallbackListHead;
  result = 0;
  v15 = 0i64;
  *(_OWORD *)v12 = 0i64;
  v13 = 0i64;
  v14 = 0i64;
  if( KeBugCheckReasonCallbackListHead && qword_140C31EB8 )
  {
    PreviousValidEntry = (LIST_ENTRY *)&KeBugCheckReasonCallbackListHead;
    while( Flink != (KBUGCHECK_REASON_CALLBACK_RECORD *)&KeBugCheckReasonCallbackListHead )
    {
      result = KeValidateBugCheckCallbackRecord(Flink, KbCallbackTriageDumpData, &PreviousValidEntry);
      if( result )
      {
        v6 = *(_DWORD *)rcx0;
        v12[0] = 0i64;
        LODWORD(v13) = v6;
        *((_QWORD *)&v13 + 1) = rcx0[1];
        v14 = *((_OWORD *)rcx0 + 1);
        v15 = rcx0[4];
        HIDWORD(v12[1]) = 0x2000000;
        result = ((__int64(__fastcall *)(__int64, KBUGCHECK_REASON_CALLBACK_RECORD *, INT64 *))Flink->CallbackRoutine)(
                   7i64,
                   Flink,
                   v12);
        if( v12[0] )
        {
          result = KiValidateTriageDumpDataArray(v12[0], v7, 0x2000000ui64);
          if( result )
          {
            result = KiValidateComponentName((STRSAFE_PCNZCH)Flink->Component);
            if( result )
            {
              result = v12[0];
              if( *(_DWORD *)(v12[0] + 16) )
              {
                result = MmAddRangeToCrashDump(
                           (__int64(__fastcall **)(_QWORD, __int64, __int64))a2,
                           (unsigned __int64)Flink->Component,
                           1i64);
                v8 = v12[0];
                for( i = 0i64; (unsigned int)i < *(_DWORD *)(v8 + 16); i = (unsigned int)(i + 1) )
                {
                  result = 2 * (i + 3);
                  v10 = *(_QWORD *)(v8 + 16 * (i + 3));
                  if( v10 )
                  {
                    v11 = *(_QWORD *)(v8 + 16i64 * (unsigned int)i + 56);
                    if( v11 )
                    {
                      result = MmAddRangeToCrashDump((__int64(__fastcall **)(_QWORD, __int64, __int64))a2, v10, v11);
                      v8 = v12[0];
                    }
                  }
                }
              }
            }
          }
        }
      }
      else if( !PreviousValidEntry )
      {
        return result;
      }
      Flink = (KBUGCHECK_REASON_CALLBACK_RECORD *)Flink->Entry.Flink;
    }
  }
  return result;
}

Referenced by:

IopLiveDumpMarkImportantDumpData