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