IopAddBugcheckTriageDevice
NTSTATUS __stdcall IopAddBugcheckTriageDevice(_DEVICE_OBJECT *TriageDevice){
NTSTATUS v1;
int v3;
__int64 v4;
int v5;
unsigned int v6;
void *v7;
INT64 v8;
UNICODE_STRING TriageString;
v1 = 0;
v3 = 0;
while( 1 )
{
++v3;
if( !KiIsAddressRangeValid((INT64)TriageDevice, 336i64) )
break;
v4 = *((unsigned __int16 *)TriageDevice + 1);
if( (unsigned __int16)v4 <= 0x3000u
&& (v5 = v4 + 7, KiIsAddressRangeValid((INT64)TriageDevice, (v4 + 7) & 0xFFFFFFFFFFFFFFF8ui64)) )
{
v6 = v5 & 0xFFFFFFF8;
}
else
{
v6 = 336;
}
IoAddTriageDumpDataBlock(TriageDevice, v6);
v7 = (void *)*((_QWORD *)TriageDevice + 39);
if( KiIsAddressRangeValid((INT64)v7, 112i64) )
IoAddTriageDumpDataBlock(v7, 0x70ui64);
v8 = *((_QWORD *)TriageDevice + 1);
if( KiIsAddressRangeValid(v8, 336i64) )
{
IoAddTriageDumpDataBlock((PVOID)v8, 0x150ui64);
TriageString = *(UNICODE_STRING *)(v8 + 56);
IopAddBugcheckTriageUnicodeString(&TriageString);
}
TriageDevice = (_DEVICE_OBJECT *)*((_QWORD *)TriageDevice + 3);
if( !TriageDevice || v3 >= 10 )
return v1;
}
return -1073741823;
}Referenced by:
IopAddBugcheckPnpWatchdogTriageData
IopAddBugcheckPowerTriageData
IopAddBugcheckTriageDeviceNode