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