IopAddBugcheckTriageDataFromParameters
VOID __stdcall IopAddBugcheckTriageDataFromParameters(INT64 a1, UINT64 a2, INT64 a3, INT64 a4, INT64 Address){
int v5;
__int64 v9;
VOID *v10;
_ETHREAD *v11;
_ETHREAD *v12;
unsigned int v13;
v5 = a1;
IoAddTriageDumpDataBlock((VOID *)(a2 & 0xFFFFFFFFFFFFF000ui64), (_BYTE *)0x1000);
IoAddTriageDumpDataBlock((VOID *)(a3 & 0xFFFFFFFFFFFFF000ui64), (_BYTE *)0x1000);
IoAddTriageDumpDataBlock((VOID *)(a4 & 0xFFFFFFFFFFFFF000ui64), (_BYTE *)0x1000);
IoAddTriageDumpDataBlock((VOID *)(Address & 0xFFFFFFFFFFFFF000ui64), (_BYTE *)0x1000);
switch( v5 )
{
case 205:
case 214:
IoAddTriageDumpDataBlock((VOID *)((a2 - 4096) & 0xFFFFFFFFFFFFF000ui64), (_BYTE *)0x1000);
break;
case 209:
if( !MmIsSpecialPoolAddress((VOID *)a2) )
return;
v9 = 4096i64;
v10 = (VOID *)((a2 - 4096) & 0xFFFFFFFFFFFFF000ui64);
goto LABEL_47;
case 335:
case 348:
if( KiIsAddressRangeValid(Address, 16i64) )
{
IoAddTriageDumpDataBlock((VOID *)Address, (_BYTE *)0x10);
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((_ETHREAD *)a4, (_TRIAGE_9F_PNP *)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((VOID *)a4, (_BYTE *)0xAF00);
IoAddTriageDumpDataBlock(*(VOID **)(a4 + 34240), (_BYTE *)0x4D0);
v12 = *(_ETHREAD **)(a4 + 8);
if( KiIsAddressRangeValid((INT64)v12, 2200i64) )
IopAddBugcheckTriageThread(v12);
IoAddTriageDumpDataBlock(
(VOID *)((*(_QWORD *)(*(_QWORD *)(a4 + 34240) + 152i64) - 4096i64) & 0xFFFFFFFFFFFFF000ui64),
(_BYTE *)0x2000);
}
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, (_BYTE *)v9);
}
}Referenced by:
IopUpdateMinidumpContext