PopInternalSaveStackToDumpFile
VOID __stdcall PopInternalSaveStackToDumpFile(DEVICE_OBJECT *DeviceObject){
DEVICE_OBJECT *v1;
__int64 v2;
void *v3;
__int64 v4;
__int64 v5;
unsigned __int16 *v6;
INT64 v7;
void *v8;
if( DeviceObject )
{
v1 = DeviceObject;
do
{
if( !KiIsAddressRangeValid((INT64)v1, 336i64) )
break;
IoAddTriageDumpDataBlock(v1, *((unsigned __int16 *)v1 + 1));
v2 = *((_QWORD *)v1 + 1);
if( v2 )
{
if( KiIsAddressRangeValid(*((_QWORD *)v1 + 1), 336i64) )
{
IoAddTriageDumpDataBlock((PVOID)v2, (unsigned int)*(__int16 *)(v2 + 2));
v3 = *(void **)(v2 + 64);
if( v3 )
IoAddTriageDumpDataBlock(v3, *(unsigned __int16 *)(v2 + 56));
}
}
v4 = *((_QWORD *)v1 + 39);
if( v4 && KiIsAddressRangeValid(*((_QWORD *)v1 + 39), 8i64) )
{
IoAddTriageDumpDataBlock((PVOID)v4, *(unsigned __int16 *)(v4 + 2));
v5 = *(_QWORD *)(v4 + 40);
if( v5 )
IoAddTriageDumpDataBlock(
(PVOID)(v5 & 0xFFFFFFFFFFFFF000ui64),
((*(_QWORD *)(v4 + 40) & 0xFFF) + 4607) & 0xFFFFF000);
v6 = *(unsigned __int16 **)(v4 + 48);
if( v6 && KiIsAddressRangeValid(*(_QWORD *)(v4 + 48), 336i64) )
IoAddTriageDumpDataBlock(v6, v6[1]);
v7 = *(_QWORD *)(v4 + 72);
if( v7 && KiIsAddressRangeValid(v7, 96i64) )
IoAddTriageDumpDataBlock(*(PVOID *)(v4 + 72), (unsigned int)*(__int16 *)(*(_QWORD *)(v4 + 72) + 2i64));
v8 = *(void **)(v4 + 24);
if( v8 )
IoAddTriageDumpDataBlock(v8, 0x60ui64);
}
v1 = (DEVICE_OBJECT *)*((_QWORD *)v1 + 3);
}
while( v1 );
}
}Referenced by:
PopInternalAddToDumpFile