IopAddBugcheckPowerTriageData
NTSTATUS __stdcall IopAddBugcheckPowerTriageData(
_DEVICE_OBJECT *TriagePDO,
_TRIAGE_9F_POWER *TriagePower,
_IRP *TriageIrp){
int v5;
NTSTATUS v6;
_LIST_ENTRY *IrpList;
_LIST_ENTRY *i;
_LIST_ENTRY *ThreadList;
int v10;
_LIST_ENTRY *Flink;
v5 = 0;
v6 = 0;
IopAddBugcheckTriageDevice(TriagePDO);
IopAddBugcheckTriageIrp(TriageIrp, 1u);
if( !KiIsAddressRangeValid((INT64)TriagePower, 40i64) || TriagePower->Signature != 0x8000 )
return -1073741823;
IoAddTriageDumpDataBlock(TriagePower, 0x28ui64);
IrpList = TriagePower->IrpList;
if( IrpList )
{
if( KiIsAddressRangeValid((INT64)TriagePower->IrpList, 16i64) )
{
IoAddTriageDumpDataBlock(IrpList, 0x10ui64);
for( i = IrpList->Flink; i && i != TriagePower->IrpList && v5 < 10; i = i->Flink )
{
++v5;
if( !KiIsAddressRangeValid((INT64)i, 32i64) )
goto LABEL_14;
IoAddTriageDumpDataBlock(i, 0x20ui64);
if( i->Blink != IrpList )
goto LABEL_14;
IopAddBugcheckTriageIrp((_IRP *)i[1].Flink, 1u);
IopAddBugcheckTriageDevice((_DEVICE_OBJECT *)i[1].Blink);
IrpList = i;
}
}
else
{
LABEL_14:
v6 = -1073741823;
}
}
ThreadList = TriagePower->ThreadList;
if( ThreadList )
{
v10 = 0;
if( KiIsAddressRangeValid((INT64)TriagePower->ThreadList, 16i64) )
{
IoAddTriageDumpDataBlock(ThreadList, 0x10ui64);
Flink = ThreadList->Flink;
if( ThreadList->Flink )
{
while( Flink != TriagePower->ThreadList && v10 < 10 )
{
++v10;
if( !KiIsAddressRangeValid((INT64)Flink, 24i64) )
goto LABEL_24;
IoAddTriageDumpDataBlock(Flink, 0x18ui64);
if( Flink->Blink != ThreadList )
goto LABEL_24;
ThreadList = Flink;
v6 = IopAddBugcheckTriageThread((_ETHREAD *)Flink[1].Flink);
Flink = Flink->Flink;
if( !Flink )
break;
}
}
}
else
{
LABEL_24:
v6 = -1073741823;
}
}
IopAddBugcheckTriageWorkQueue((CHAR **)TriagePower->DelayedWorkQueue);
return v6;
}Referenced by:
IopAddBugcheckTriageDataFromParameters