IopAddBugcheckTriageDevice
NTSTATUS __stdcall IopAddBugcheckTriageDevice(_DEVICE_OBJECT *TriageDevice){
NTSTATUS v1;
int v3;
__int64 Size;
int v5;
unsigned int v6;
_DEVOBJ_EXTENSION *DeviceObjectExtension;
_DRIVER_OBJECT *DriverObject;
_UNICODE_STRING TriageString;
v1 = 0;
v3 = 0;
while( 1 )
{
++v3;
if( !KiIsAddressRangeValid((INT64)TriageDevice, 336i64) )
break;
Size = TriageDevice->Size;
if( (unsigned __int16)Size <= 0x3000u
&& (v5 = Size + 7, KiIsAddressRangeValid((INT64)TriageDevice, (Size + 7) & 0xFFFFFFFFFFFFFFF8ui64)) )
{
v6 = v5 & 0xFFFFFFF8;
}
else
{
v6 = 336;
}
IoAddTriageDumpDataBlock(TriageDevice, (_BYTE *)v6);
DeviceObjectExtension = TriageDevice->DeviceObjectExtension;
if( KiIsAddressRangeValid((INT64)DeviceObjectExtension, 112i64) )
IoAddTriageDumpDataBlock(DeviceObjectExtension, (_BYTE *)0x70);
DriverObject = TriageDevice->DriverObject;
if( KiIsAddressRangeValid((INT64)DriverObject, 336i64) )
{
IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)0x150);
TriageString = DriverObject->DriverName;
IopAddBugcheckTriageUnicodeString(&TriageString);
}
TriageDevice = TriageDevice->AttachedDevice;
if( !TriageDevice || v3 >= 10 )
return v1;
}
return -1073741823;
}Referenced by:
IopAddBugcheckPnpWatchdogTriageData
IopAddBugcheckPowerTriageData
IopAddBugcheckTriageDeviceNode