PopInternalSaveStackToDumpFile
VOID __stdcall PopInternalSaveStackToDumpFile(_DEVICE_OBJECT *DeviceObject){
_DEVICE_OBJECT *v1;
_DRIVER_OBJECT *DriverObject;
wchar_t *Buffer;
_DEVOBJ_EXTENSION *DeviceObjectExtension;
unsigned __int64 DeviceNode;
unsigned __int16 *AttachedTo;
INT64 Vpb;
_DEVICE_OBJECT_POWER_EXTENSION *Dope;
if( DeviceObject )
{
v1 = DeviceObject;
do
{
if( !KiIsAddressRangeValid((INT64)v1, 336i64) )
break;
IoAddTriageDumpDataBlock(v1, (_BYTE *)v1->Size);
DriverObject = v1->DriverObject;
if( DriverObject )
{
if( KiIsAddressRangeValid((INT64)v1->DriverObject, 336i64) )
{
IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)(unsigned int)DriverObject->Size);
Buffer = DriverObject->DriverName.Buffer;
if( Buffer )
IoAddTriageDumpDataBlock(Buffer, (_BYTE *)DriverObject->DriverName.Length);
}
}
DeviceObjectExtension = v1->DeviceObjectExtension;
if( DeviceObjectExtension && KiIsAddressRangeValid((INT64)v1->DeviceObjectExtension, 8i64) )
{
IoAddTriageDumpDataBlock(DeviceObjectExtension, (_BYTE *)DeviceObjectExtension->Size);
DeviceNode = (unsigned __int64)DeviceObjectExtension->DeviceNode;
if( DeviceNode )
IoAddTriageDumpDataBlock(
(VOID *)(DeviceNode & 0xFFFFFFFFFFFFF000ui64),
(_BYTE *)((((__int64)DeviceObjectExtension->DeviceNode & 0xFFF) + 4607) & 0xFFFFF000));
AttachedTo = (unsigned __int16 *)DeviceObjectExtension->AttachedTo;
if( AttachedTo && KiIsAddressRangeValid((INT64)DeviceObjectExtension->AttachedTo, 336i64) )
IoAddTriageDumpDataBlock(AttachedTo, (_BYTE *)AttachedTo[1]);
Vpb = (INT64)DeviceObjectExtension->Vpb;
if( Vpb && KiIsAddressRangeValid(Vpb, 96i64) )
IoAddTriageDumpDataBlock(DeviceObjectExtension->Vpb, (_BYTE *)(unsigned int)DeviceObjectExtension->Vpb->Size);
Dope = DeviceObjectExtension->Dope;
if( Dope )
IoAddTriageDumpDataBlock(Dope, (_BYTE *)0x60);
}
v1 = v1->AttachedDevice;
}
while( v1 );
}
}Referenced by:
PopInternalAddToDumpFile