KiInvokeBugCheckAddTriageDumpDataCallbacks

CHAR __stdcall KiInvokeBugCheckAddTriageDumpDataCallbacks(){
  INT64 v0; 
  KBUGCHECK_REASON_CALLBACK_RECORD *Flink; 
  INT64 v2; 
  INT64 *v3; 
  INT64 v5[2]; 
  __int128 v6; 
  __int128 v7; 
  UINT64 v8; 
  LIST_ENTRY *PreviousValidEntry; 
  KBUGCHECK_REASON_CALLBACK_RECORD *v10; 
  PVOID *v11; 
  LOBYTE(v0) = 0;
  *(_OWORD *)v5 = 0i64;
  v6 = 0i64;
  v7 = 0i64;
  v8 = 0i64;
  v11 = &KeBugCheckReasonCallbackListHead;
  Flink = (KBUGCHECK_REASON_CALLBACK_RECORD *)KeBugCheckReasonCallbackListHead;
  if( KeBugCheckReasonCallbackListHead && qword_140C31EB8 )
  {
    PreviousValidEntry = (LIST_ENTRY *)&KeBugCheckReasonCallbackListHead;
    while( 1 )
    {
      v10 = Flink;
      if( Flink == (KBUGCHECK_REASON_CALLBACK_RECORD *)&KeBugCheckReasonCallbackListHead )
        break;
      LOBYTE(v0) = KeValidateBugCheckCallbackRecord(Flink, KbCallbackTriageDumpData, &PreviousValidEntry);
      if( (_BYTE)v0 )
      {
        v5[0] = 0i64;
        v5[1] = 0x200000000000001i64;
        LODWORD(v6) = KiBugCheckData;
        *((_QWORD *)&v6 + 1) = *(&KiBugCheckData + 1);
        v7 = *(_OWORD *)&xmmword_140C312D0;
        v8 = qword_140C312E0;
        LOBYTE(v0) = ((__int64(__fastcall *)(__int64, KBUGCHECK_REASON_CALLBACK_RECORD *, INT64 *))Flink->CallbackRoutine)(
                       7i64,
                       Flink,
                       v5);
        if( v5[0]
          && (LOBYTE(v0) = KiValidateTriageDumpDataArray(v5[0], v2, 0x2000000ui64), (_BYTE)v0)
          && (LOBYTE(v0) = KiValidateComponentName((STRSAFE_PCNZCH)Flink->Component), (_BYTE)v0) )
        {
          *(_QWORD *)(v5[0] + 40) = Flink->Component;
          *(_DWORD *)(v5[0] + 32) = 1;
          v0 = v5[0];
          v3 = (INT64 *)qword_140C31EC8;
          if( *(__int64 **)qword_140C31EC8 != &KeBugCheckTriageDumpDataArrayListHead )
            __fastfail(3u);
          *(_QWORD *)v5[0] = &KeBugCheckTriageDumpDataArrayListHead;
          *(_QWORD *)(v0 + 8) = v3;
          *v3 = v0;
          qword_140C31EC8 = v0;
          Flink->State = 3;
        }
        else
        {
          Flink->State = 4;
        }
      }
      else if( !PreviousValidEntry )
      {
        return v0;
      }
      Flink = (KBUGCHECK_REASON_CALLBACK_RECORD *)Flink->Entry.Flink;
    }
  }
  return v0;
}

Referenced by:

KeBugCheck2