IopLiveDumpMarkRequiredDumpData
NTSTATUS __stdcall IopLiveDumpMarkRequiredDumpData(_LIVEDUMP_CONTEXT *Context, UINT64 *MaxAdditionalPageCount){
_LIVEDUMP_CONTEXT v2;
__int64 v5;
__int64 v6;
NTSTATUS result;
int v8;
NTSTATUS v9;
_TRIAGE_DEVICE_NODE **v10;
_TRIAGE_DEVICE_NODE *v11;
__int64 v12;
_KAFFINITY_ENUMERATION_CONTEXT v13;
_MM_KERNEL_DUMP_CONTEXT Contexta[2];
__int64 v15;
_LIVEDUMP_CONTEXT *v16;
__int64 v17;
UINT64 *v18;
__int64 v19;
UINT64 ProcIndex;
v2 = Context[20];
v17 = 0i64;
v19 = 0i64;
*(_DWORD *)(&v13.CurrentIndex + 1) = 0;
v5 = 0i64;
*(&v13.CurrentIndex + 3) = 0;
LODWORD(ProcIndex) = 0;
if( (v2 & 0x80u) != 0 )
{
LODWORD(v6) = IopLiveDumpGetMillisecondCounter(0);
v5 = v6;
}
LODWORD(v19) = v19 | 1;
v16 = Context + 136;
v18 = MaxAdditionalPageCount;
*(_QWORD *)Contexta = IoSetDumpRange;
v15 = 0i64;
result = MmAddRangeToCrashDump(Contexta, &KdDebuggerDataBlock, 0x380ui64);
if( result >= 0 )
{
result = MmAddRangeToCrashDump(Contexta, &KiProcessorBlock, 8i64 * (unsigned int)KeNumberProcessors_0);
if( result >= 0 )
{
result = IopLiveDumpMarkLoadedModuleList(Contexta);
if( result >= 0 )
{
v13.CurrentMask = KeActiveProcessors.Bitmap[0];
v13.Affinity = &KeActiveProcessors;
v13.CurrentIndex = 0;
while( 1 )
{
KeEnumerateNextProcessor(&ProcIndex, &v13);
if( v8 )
break;
result = IopLiveDumpMarkProcessorData(Contexta, (unsigned int)ProcIndex);
if( result < 0 )
return result;
}
result = MmAddPrivateDataToCrashDump(Contexta, 2ui64);
if( result >= 0 )
{
result = MmAddRangeToCrashDump(Contexta, &KUSER_SHARED_DATA, 0x720ui64);
if( result >= 0 )
{
result = MmAddPrivateDataToCrashDump(Contexta, 4ui64);
if( result >= 0 )
{
result = MmAddPrivateDataToCrashDump(Contexta, 8ui64);
v9 = result;
if( result >= 0 )
{
if( *Context != 351
|| *((_QWORD *)Context + 1) != 2i64
|| (v10 = (_TRIAGE_DEVICE_NODE **)*((_QWORD *)Context + 2),
result = MmAddRangeToCrashDump(Contexta, v10, 0x38ui64),
result >= 0)
&& (result = IopLiveDumpMarkDeviceNode(Contexta, v10[6]), v9 = result, result >= 0)
&& ((v11 = (_TRIAGE_DEVICE_NODE *)*((_QWORD *)Context + 4)) == 0i64
|| (result = IopLiveDumpMarkDeviceNode(Contexta, v11), v9 = result, result >= 0)) )
{
if( (Context[20] & 0x80u) != 0 )
{
LODWORD(v12) = IopLiveDumpGetMillisecondCounter(0);
IopLiveDumpTraceMarkRequiredDumpDataDuration((_GUID *)Context, v12 - v5);
}
return v9;
}
}
}
}
}
}
}
}
return result;
}Referenced by:
IopLiveDumpEndMirroringCallback