IopAddBugcheckTriageDataFromParameters
VOID __fastcall IopAddBugcheckTriageDataFromParameters(INT64 a1, UINT64 a2, INT64 a3, INT64 a4, INT64 Address){
int v5;
UINT64 v9;
void *v10;
_ETHREAD *v11;
_ETHREAD *v12;
unsigned int v13;
v5 = a1;
IoAddTriageDumpDataBlock((PVOID)(a2 & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
IoAddTriageDumpDataBlock((PVOID)(a3 & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
IoAddTriageDumpDataBlock((PVOID)(a4 & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
IoAddTriageDumpDataBlock((PVOID)(Address & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
switch( v5 )
{
case 205:
case 214:
IoAddTriageDumpDataBlock((PVOID)((a2 - 4096) & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
break;
case 209:
if( !(unsigned int)MmIsSpecialPoolAddress((PVOID)a2) )
return;
v9 = 4096i64;
v10 = (void *)((a2 - 4096) & 0xFFFFFFFFFFFFF000ui64);
goto LABEL_47;
case 335:
case 348:
if( KiIsAddressRangeValid(Address, 16i64) )
{
IoAddTriageDumpDataBlock((PVOID)Address, 0x10ui64);
v11 = *(_ETHREAD **)(Address + 8);
if( v11 )
IopAddBugcheckTriageThread(v11);
}
break;
}
if( v5 == 412 )
{
if( !a3 || a2 - 16 > 0x40 || (((_BYTE)a2 - 16) & 0xF) != 0 )
return;
IopAddBugcheckTriageThread((_ETHREAD *)a3);
}
if( v5 == 159 )
{
if( a2 == 4 )
{
if( a4 )
IopAddBugcheckPnpTriageData((CHAR *)a4, (CHAR ***)Address);
return;
}
if( a2 != 3 )
return;
IopAddBugcheckPowerTriageData((_DEVICE_OBJECT *)a3, (_TRIAGE_9F_POWER *)a4, (_IRP *)Address);
}
if( v5 == 469 )
IopAddBugcheckPnpWatchdogTriageData(a3);
if( v5 == 160 )
{
if( a2 == 1560 )
IopAddBugcheckTriageThread((_ETHREAD *)a4);
if( a2 == 1561 )
{
IopAddBugcheckTriageDeviceNode(*(_TRIAGE_DEVICE_NODE **)(a3 + 48));
if( !Address )
return;
IopAddBugcheckTriageDeviceNode((_TRIAGE_DEVICE_NODE *)Address);
}
if( a2 != 15 && a2 - 240 > 1 || !Address )
return;
IopAddBugcheckTriageThread((_ETHREAD *)Address);
}
if( v5 == 257 )
{
if( a3 || !KiIsAddressRangeValid(a4, 44800i64) )
return;
IoAddTriageDumpDataBlock((PVOID)a4, 0xAF00ui64);
IoAddTriageDumpDataBlock(*(PVOID *)(a4 + 34240), 0x4D0ui64);
v12 = *(_ETHREAD **)(a4 + 8);
if( KiIsAddressRangeValid((INT64)v12, 2200i64) )
IopAddBugcheckTriageThread(v12);
IoAddTriageDumpDataBlock(
(PVOID)((*(_QWORD *)(*(_QWORD *)(a4 + 34240) + 152i64) - 4096i64) & 0xFFFFFFFFFFFFF000ui64),
0x2000ui64);
}
if( v5 == 416 )
{
IopAddBugcheckTriageThread((_ETHREAD *)a4);
PopInternalAddToDumpFile(0i64, 0i64, 0i64);
}
if( v5 == 292 && KiIsAddressRangeValid(a3, 128i64) )
{
v13 = *(_DWORD *)(a3 + 20);
v9 = 72 * (unsigned int)*(unsigned __int16 *)(a3 + 10) + 128;
v10 = (void *)a3;
if( v13 >= (unsigned int)v9 )
v9 = v13;
LABEL_47:
IoAddTriageDumpDataBlock(v10, v9);
}
}Referenced by:
IopUpdateMinidumpContext