IopUpdateMinidumpContext
VOID __stdcall IopUpdateMinidumpContext(
UINT64 BugCheckCode,
UINT64 BugCheckParameter1,
UINT64 BugCheckParameter2,
UINT64 BugCheckParameter3,
UINT64 BugCheckParameter4,
_CONTEXT *ContextSave,
_KTHREAD *Thread,
_KTRAP_FRAME *TrapFrame){
struct _KPRCB *CurrentPrcb;
char v9;
UINT64 v11;
unsigned int v12;
UINT64 v13;
unsigned __int64 v14;
void *v15;
UINT64 v16;
unsigned int MaxValidMemorySize;
__int64 v18;
unsigned __int64 v19;
unsigned int v20;
unsigned int v21;
unsigned __int64 v22;
unsigned __int64 *v23;
void *v24;
unsigned __int64 v25;
unsigned int v26;
unsigned int v27;
__int64 v28;
__int64 v29;
_QWORD *v30;
_QWORD *i;
void *v32;
void *v33;
UINT64 v34;
unsigned int v35;
PVOID *j;
__int64 v37;
_OWORD *v38;
__int128 v39;
unsigned int v40;
v40 = BugCheckCode;
CurrentPrcb = KeGetCurrentPrcb();
v9 = 0;
v11 = BugCheckParameter1;
v12 = BugCheckCode;
if( (_DWORD)BugCheckCode != 126 )
{
if( (_DWORD)BugCheckCode == 127 )
{
v13 = (UINT64)ContextSave;
if( BugCheckParameter1 == 8 )
{
ContextSave->Rbp = *(_QWORD *)(BugCheckParameter2 + 344);
ContextSave->Rip = *(_QWORD *)(BugCheckParameter2 + 360);
ContextSave->Rsp = *(_QWORD *)(BugCheckParameter2 + 384);
}
goto LABEL_5;
}
LABEL_8:
v13 = (UINT64)ContextSave;
goto LABEL_9;
}
if( !BugCheckParameter4 )
goto LABEL_8;
v13 = BugCheckParameter4;
LABEL_5:
v9 = 1;
LABEL_9:
v14 = *((_QWORD *)KeGetPcr() + 1618) + 80i64;
v15 = *(void **)(v13 + 152);
if( v14 - (unsigned int)KeKernelStackSize <= (unsigned __int64)v15 && (unsigned __int64)v15 < v14 )
{
if( v14 - (unsigned __int64)v15 >= 0x7FFF )
v16 = 0x7FFFi64;
else
v16 = (unsigned int)(v14 - (_DWORD)v15);
MaxValidMemorySize = IopGetMaxValidMemorySize(*(PVOID *)(v13 + 152), v16);
IoAddTriageDumpDataBlock(v15, MaxValidMemorySize);
}
v18 = 2i64;
if( *((_BYTE *)CurrentPrcb + 32408) > 2u )
{
v19 = *((_QWORD *)KeGetPcr() + 4331);
if( v19 - 24576 <= (unsigned __int64)v15 && (unsigned __int64)v15 < v19 )
{
if( v19 - (unsigned __int64)v15 >= 0x7FFF )
v20 = 0x7FFF;
else
v20 = v19 - (_DWORD)v15;
v21 = IopGetMaxValidMemorySize(v15, v20);
IoAddTriageDumpDataBlock(v15, v21);
}
}
if( v12 == 307 )
{
if( (*((_BYTE *)KeGetPcr() + 12972) & 1) != 0 && Thread != *((_ETHREAD **)CurrentPrcb + 3) )
{
v22 = *((_QWORD *)KeGetPcr() + 1618) + 80i64;
v23 = (unsigned __int64 *)(*((_QWORD *)KeGetPcr() + 4331) - 8i64);
v24 = (void *)(v22 - (unsigned int)KeKernelStackSize);
if( KiIsAddressRangeValid((INT64)v23, 8i64) )
{
v25 = *v23;
if( KiIsAddressRangeValid(v25, 8i64) )
{
if( (unsigned __int64)v24 <= v25 && v25 < v22 )
v24 = (void *)v25;
}
}
if( v22 - (unsigned __int64)v24 >= 0x7FFF )
v26 = 0x7FFF;
else
v26 = v22 - (_DWORD)v24;
v27 = IopGetMaxValidMemorySize(v24, v26);
IoAddTriageDumpDataBlock(v24, v27);
}
KeGetPrcb(*((unsigned int *)Thread + 134));
v29 = v28;
v30 = (_QWORD *)(v28 + 12480);
do
{
for( i = (_QWORD *)*v30; i; i = (_QWORD *)*i )
{
IoAddTriageDumpDataBlock(i - 1, 0x40ui64);
v32 = (void *)i[6];
if( v32 != (void *)1 )
IoAddTriageDumpDataBlock(v32, 0x60ui64);
}
v30 += 5;
--v18;
}
while( v18 );
v33 = *(void **)(v29 + 33960);
if( v33 && v33 != *(void **)(v29 + 33968) )
{
v34 = (unsigned int)(8 * dword_140CFA32C);
v35 = *(_DWORD *)(v29 + 33968) - (_DWORD)v33;
if( v35 <= (unsigned int)v34 )
v34 = v35;
IoAddTriageDumpDataBlock(v33, v34);
}
v12 = v40;
v11 = BugCheckParameter1;
}
for( j = (PVOID *)PopThermal; j != &PopThermal; j = (PVOID *)*j )
IoAddTriageDumpDataBlock(j, 0x420ui64);
IopAddBugcheckTriageDataFromParameters(v12, v11, BugCheckParameter2, BugCheckParameter3, BugCheckParameter4);
if( v9 && CrashdmpDumpBlock )
{
*(_DWORD *)(CrashdmpDumpBlock + 24) |= 0x10000000u;
v37 = 9i64;
v38 = (_OWORD *)(CrashdmpDumpBlock + 64);
do
{
*v38 = *(_OWORD *)v13;
v38[1] = *(_OWORD *)(v13 + 16);
v38[2] = *(_OWORD *)(v13 + 32);
v38[3] = *(_OWORD *)(v13 + 48);
v38[4] = *(_OWORD *)(v13 + 64);
v38[5] = *(_OWORD *)(v13 + 80);
v38[6] = *(_OWORD *)(v13 + 96);
v38 += 8;
v39 = *(_OWORD *)(v13 + 112);
v13 += 128i64;
*(v38 - 1) = v39;
--v37;
}
while( v37 );
*v38 = *(_OWORD *)v13;
v38[1] = *(_OWORD *)(v13 + 16);
v38[2] = *(_OWORD *)(v13 + 32);
v38[3] = *(_OWORD *)(v13 + 48);
v38[4] = *(_OWORD *)(v13 + 64);
}
}Referenced by:
IoWriteCrashDump
IopAddMiniDumpPagesToPartialKernelDump
IopWriteCapsuleTriageDumpToFirmware