IopAddBugcheckTriageIrp
VOID __fastcall IopAddBugcheckTriageIrp(_IRP *TriageIrp, UINT8 AddDevices){
int v4;
__int64 Size;
int StackCount;
unsigned __int64 v7;
__int64 v8;
int v9;
int v10;
_IRP *v11;
INT64 v12;
INT64 v13;
v4 = 0;
if( KiIsAddressRangeValid((INT64)TriageIrp, 208i64) )
{
Size = TriageIrp->Size;
if( (unsigned __int16)Size <= 0x800u
&& (StackCount = TriageIrp->StackCount, TriageIrp->StackCount <= 64)
&& (v7 = (unsigned __int64)(Size + 7) >> 3, v8 = TriageIrp->Size, KiIsAddressRangeValid((INT64)TriageIrp, 8 * v7)) )
{
IoAddTriageDumpDataBlock(TriageIrp, (_BYTE *)(unsigned int)(8 * v7));
if( AddDevices == 1 )
{
v9 = 0;
v10 = StackCount;
if( (char)StackCount > 0 )
{
v11 = (_IRP *)((char *)TriageIrp + v8);
do
{
if( &TriageIrp[1].UserIosb + 9 * (char)v9 > (_IO_STATUS_BLOCK **)v11 )
break;
v12 = *((_QWORD *)&TriageIrp[1].ThreadListEntry.Blink + 9 * (char)v9);
if( v12 )
{
do
{
++v4;
if( !KiIsAddressRangeValid(v12, 336i64) )
break;
v13 = *(_QWORD *)(v12 + 312);
if( !KiIsAddressRangeValid(v13, 112i64) )
break;
v12 = *(_QWORD *)(v13 + 48);
if( !v12 )
{
IopAddBugcheckTriageDeviceNode(*(_TRIAGE_DEVICE_NODE **)(v13 + 40));
break;
}
}
while( v4 < 10 );
}
++v9;
}
while( v9 < v10 );
}
}
}
else
{
IoAddTriageDumpDataBlock(TriageIrp, (_BYTE *)0xD0);
}
}
}Referenced by:
IopAddBugcheckPowerTriageData
IopAddBugcheckTriageDeviceNode
IopAddBugcheckTriageThread