IopLiveDumpMarkRequiredDumpData
__int64 __fastcall IopLiveDumpMarkRequiredDumpData(__int64 a1, __int64 (__fastcall *a2)(_QWORD, __int64, __int64)){
int v2;
INT64 MillisecondCounter;
__int64 result;
unsigned int v7;
unsigned __int64 v8;
unsigned __int64 v9;
INT64 v10;
unsigned __int16 *v11[2];
__int16 v12;
int v13;
__int16 v14;
__int64(__fastcall *v15[5])(_QWORD, __int64, __int64);
__int64 v16;
int v17;
v2 = *(_DWORD *)(a1 + 80);
v15[3] = 0i64;
v16 = 0i64;
v13 = 0;
MillisecondCounter = 0i64;
v14 = 0;
v17 = 0;
if( (v2 & 0x80u) != 0 )
MillisecondCounter = IopLiveDumpGetMillisecondCounter(0);
LODWORD(v16) = v16 | 1;
v15[2] = (__int64(__fastcall *)(_QWORD, __int64, __int64))(a1 + 544);
v15[4] = a2;
v15[0] = (__int64(__fastcall *)(_QWORD, __int64, __int64))IoSetDumpRange;
v15[1] = 0i64;
result = MmAddRangeToCrashDump(v15, (unsigned __int64)&KdDebuggerDataBlock, 896i64);
if( (int)result >= 0 )
{
result = MmAddRangeToCrashDump(v15, (unsigned __int64)&KiProcessorBlock, 8i64 * (unsigned int)KeNumberProcessors_0);
if( (int)result >= 0 )
{
result = IopLiveDumpMarkLoadedModuleList(v15);
if( (int)result >= 0 )
{
v11[1] = (unsigned __int16 *)KeActiveProcessors.Bitmap[0];
v11[0] = (unsigned __int16 *)&KeActiveProcessors;
v12 = 0;
while( !(unsigned int)KeEnumerateNextProcessor(&v17, v11) )
{
result = IopLiveDumpMarkProcessorData(v15, v17);
if( (int)result < 0 )
return result;
}
result = MmAddPrivateDataToCrashDump(v15, 2);
if( (int)result >= 0 )
{
result = MmAddRangeToCrashDump(v15, 0xFFFFF78000000000ui64, 1824i64);
if( (int)result >= 0 )
{
result = MmAddPrivateDataToCrashDump(v15, 4);
if( (int)result >= 0 )
{
result = MmAddPrivateDataToCrashDump(v15, 8);
v7 = result;
if( (int)result >= 0 )
{
if( *(_DWORD *)a1 != 351
|| *(_QWORD *)(a1 + 8) != 2i64
|| (v8 = *(_QWORD *)(a1 + 16), result = MmAddRangeToCrashDump(v15, v8, 56i64), (int)result >= 0)
&& (result = IopLiveDumpMarkDeviceNode(v15, *(_QWORD *)(v8 + 48)), v7 = result, (int)result >= 0)
&& ((v9 = *(_QWORD *)(a1 + 32)) == 0
|| (result = IopLiveDumpMarkDeviceNode(v15, v9), v7 = result, (int)result >= 0)) )
{
if( (*(_DWORD *)(a1 + 80) & 0x80u) != 0 )
{
v10 = IopLiveDumpGetMillisecondCounter(0);
IopLiveDumpTraceMarkRequiredDumpDataDuration((GUID *)a1, v10 - MillisecondCounter);
}
return v7;
}
}
}
}
}
}
}
}
return result;
}Referenced by:
IopLiveDumpEndMirroringCallback