IopAddBugcheckTriageIrp
NTSTATUS __stdcall IopAddBugcheckTriageIrp(_IRP *TriageIrp, UINT8 AddDevices){
int v4;
NTSTATUS v5;
__int64 v6;
int v7;
unsigned __int64 v8;
__int64 v9;
int v10;
int v11;
char *v12;
INT64 v13;
INT64 v14;
v4 = 0;
v5 = 0;
if( !KiIsAddressRangeValid((INT64)TriageIrp, 208i64) )
return -1073741823;
v6 = *((unsigned __int16 *)TriageIrp + 1);
if( (unsigned __int16)v6 > 0x800u
|| (v7 = *((char *)TriageIrp + 66), *((char *)TriageIrp + 66) > 64)
|| (v8 = (unsigned __int64)(v6 + 7) >> 3,
v9 = *((unsigned __int16 *)TriageIrp + 1),
!KiIsAddressRangeValid((INT64)TriageIrp, 8 * v8)) )
{
IoAddTriageDumpDataBlock(TriageIrp, 0xD0ui64);
return -1073741823;
}
IoAddTriageDumpDataBlock(TriageIrp, (unsigned int)(8 * v8));
if( AddDevices == 1 )
{
v10 = 0;
v11 = v7;
if( (char)v7 > 0 )
{
v12 = (char *)TriageIrp + v9;
while( (char *)TriageIrp + 72 * (char)v10 + 280 <= v12 )
{
v13 = *((_QWORD *)TriageIrp + 9 * (char)v10 + 31);
if( v13 )
{
while( 1 )
{
++v4;
if( !KiIsAddressRangeValid(v13, 336i64) )
break;
v14 = *(_QWORD *)(v13 + 312);
if( !KiIsAddressRangeValid(v14, 112i64) )
break;
v13 = *(_QWORD *)(v14 + 48);
if( !v13 )
{
v5 = IopAddBugcheckTriageDeviceNode(*(_TRIAGE_DEVICE_NODE **)(v14 + 40));
goto LABEL_17;
}
if( v4 >= 10 )
goto LABEL_17;
}
v5 = -1073741823;
}
LABEL_17:
if( ++v10 >= v11 )
return v5;
}
return -1073741823;
}
}
return v5;
}Referenced by:
IopAddBugcheckPowerTriageData
IopAddBugcheckTriageDeviceNode
IopAddBugcheckTriageThread