PiGetDmaAdapterFromBusInterface
INT64 PiGetDmaAdapterFromBusInterface(void){
__int64 v0;
ULONG_PTR v1;
__int64 v2;
__int64 v3;
__int64 v4;
ULONG_PTR v5;
INT64 v6;
__int64 v7;
__int16 *v9;
_WORD *v10;
PVOID *v11;
PVOID *v12;
__int64 v13;
_WORD *v14;
__int64 v15;
_WORD *v16;
__int64 v17;
INTERFACE Interface;
__int64(__fastcall *v19)(void *, __int64, __int64);
v3 = v0;
v4 = v2;
v5 = v1;
memset((INT64)&Interface, 0i64);
v6 = 0i64;
if( !v5 )
goto LABEL_20;
v7 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64);
if( !v7 || (*(_DWORD *)(v7 + 396) & 0x20000) != 0 )
{
IoAddTriageDumpDataBlock((PVOID)v5, *(unsigned __int16 *)(v5 + 2));
v9 = *(__int16 **)(v5 + 8);
if( v9 )
{
IoAddTriageDumpDataBlock(v9, (unsigned int)v9[1]);
v10 = (_WORD *)(*(_QWORD *)(v5 + 8) + 56i64);
if( *v10 )
{
IoAddTriageDumpDataBlock(v10, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(v5 + 8) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(v5 + 8) + 56i64));
}
}
v11 = *(PVOID **)(*(_QWORD *)(v5 + 312) + 40i64);
if( v11 )
{
v12 = v11 + 5;
IoAddTriageDumpDataBlock(v11, 0x310ui64);
if( *(_WORD *)v12 )
{
IoAddTriageDumpDataBlock(v12, 2ui64);
IoAddTriageDumpDataBlock(v12[1], *(unsigned __int16 *)v12);
}
v13 = *(_QWORD *)(v5 + 312);
v14 = (_WORD *)(*(_QWORD *)(v13 + 40) + 56i64);
if( *v14 )
{
IoAddTriageDumpDataBlock(v14, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64) + 56i64));
v13 = *(_QWORD *)(v5 + 312);
}
v15 = *(_QWORD *)(*(_QWORD *)(v13 + 40) + 16i64);
if( v15 )
{
v16 = (_WORD *)(v15 + 56);
if( *v16 )
{
IoAddTriageDumpDataBlock(v16, 2ui64);
v17 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64) + 16i64);
IoAddTriageDumpDataBlock(*(PVOID *)(v17 + 64), *(unsigned __int16 *)(v17 + 56));
}
}
}
LABEL_20:
KeBugCheckEx(0xCAu, 2ui64, v5, 0i64, 0i64);
}
if( PnpQueryInterface((DEVICE_OBJECT *)v5, &GUID_BUS_INTERFACE_STANDARD, 1u, 0x40u, 0i64, &Interface) >= 0 )
{
if( v19 )
v6 = v19(Interface.Context, v3, v4);
Interface.InterfaceDereference(Interface.Context);
}
return v6;
}Referenced by:
IoGetDmaAdapter