VfFreeAdapterChannel

VOID __stdcall VfFreeAdapterChannel(DMA_ADAPTER *DmaAdapter){
  void(__fastcall *v2)(DMA_ADAPTER *); 
  INT64 v3; 
  void(__fastcall *v4)(DMA_ADAPTER *); 
  LIST_ENTRY *AdapterInformationInternal; 
  INT64 v6; 
  struct _SLIST_ENTRY *v7; 
  VF_ASSERT_IRQL(2u);
  LODWORD(v2) = ViGetRealDmaOperation(DmaAdapter, 0x30ui64);
  LOBYTE(v3) = 1;
  v4 = v2;
  AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, v3);
  v4(DmaAdapter);
  if( AdapterInformationInternal )
  {
    _InterlockedExchange((volatile __int32 *)&AdapterInformationInternal[11].Blink + 1, 0);
    v6 = ViRemoveChannelWcb((INT64)AdapterInformationInternal, 0i64, 0i64);
    if( v6 )
    {
      DECREMENT_ADAPTER_CHANNELS((__int64)AdapterInformationInternal);
      SUBTRACT_MAP_REGISTERS((INT64)AdapterInformationInternal, *(unsigned int *)(v6 + 48));
      v7 = *(struct _SLIST_ENTRY **)(v6 + 96);
      if( v7 )
        ViFreeMapRegisterFile((__int64)AdapterInformationInternal, v7);
      ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViHalWaitBlockLookaside, (PVOID)v6);
    }
  }
}

Referenced by:

No references.