IopLiveDumpAddTriageDumpData

NTSTATUS __fastcall IopLiveDumpAddTriageDumpData(INT64 *rcx0, INT64 a2){
  _KBUGCHECK_REASON_CALLBACK_RECORD *Flink; 
  NTSTATUS result; 
  int v6; 
  INT64 v7; 
  INT64 v8; 
  __int64 i; 
  VOID *v10; 
  UINT64 v11; 
  INT64 v12[2]; 
  __int128 v13; 
  __int128 v14; 
  INT64 v15; 
  _LIST_ENTRY *PreviousValidEntry; 

  Flink = (_KBUGCHECK_REASON_CALLBACK_RECORD *)*(&KiSwapEvent + 46);
  result = 0;
  v15 = 0i64;
  *(_OWORD *)v12 = 0i64;
  v13 = 0i64;
  v14 = 0i64;
  if( *(&KiSwapEvent + 46) && *(&KiSwapEvent + 47) )
  {
    PreviousValidEntry = (_LIST_ENTRY *)((char *)&KiSwapEvent + 368);
    while( Flink != (_KBUGCHECK_REASON_CALLBACK_RECORD *)((char *)&KiSwapEvent + 368) )
    {
      LOBYTE(result) = KeValidateBugCheckCallbackRecord(
                         Flink,
                         KbCallbackRemovePages|KbCallbackReserved1,
                         &PreviousValidEntry);
      if( (_BYTE)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] )
        {
          LOBYTE(result) = KiValidateTriageDumpDataArray(v12[0], v7, 0x2000000ui64);
          if( (_BYTE)result )
          {
            result = KiValidateComponentName((STRSAFE_PCNZCH)Flink->Component);
            if( (_BYTE)result )
            {
              result = v12[0];
              if( *(_DWORD *)(v12[0] + 16) )
              {
                result = MmAddRangeToCrashDump((_MM_KERNEL_DUMP_CONTEXT *)a2, Flink->Component, 1ui64);
                v8 = v12[0];
                for( i = 0i64; (unsigned int)i < *(_DWORD *)(v8 + 16); i = (unsigned int)(i + 1) )
                {
                  result = 2 * (i + 3);
                  v10 = *(VOID **)(v8 + 16 * (i + 3));
                  if( v10 )
                  {
                    v11 = *(_QWORD *)(v8 + 16i64 * (unsigned int)i + 56);
                    if( v11 )
                    {
                      result = MmAddRangeToCrashDump((_MM_KERNEL_DUMP_CONTEXT *)a2, v10, v11);
                      v8 = v12[0];
                    }
                  }
                }
              }
            }
          }
        }
      }
      else if( !PreviousValidEntry )
      {
        return result;
      }
      Flink = (_KBUGCHECK_REASON_CALLBACK_RECORD *)Flink->Entry.Flink;
    }
  }
  return result;
}

Referenced by:

IopLiveDumpMarkImportantDumpData