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