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