VfFreeAdapterChannel

VOID __stdcall VfFreeAdapterChannel(_DMA_ADAPTER *DmaAdapter){
  void(__fastcall *RealDmaOperation)(_DMA_ADAPTER *); 
  INT64 v3; 
  void(__fastcall *v4)(_DMA_ADAPTER *); 
  _LIST_ENTRY *AdapterInformationInternal; 
  _VF_WAIT_CONTEXT_BLOCK *v6; 
  _MAP_REGISTER_FILE *v7; 

  VF_ASSERT_IRQL(2u);
  RealDmaOperation = (void(__fastcall *)(_DMA_ADAPTER *))ViGetRealDmaOperation((ULONG_PTR)DmaAdapter, 0x30ui64);
  LOBYTE(v3) = 1;
  v4 = RealDmaOperation;
  AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, v3);
  v4(DmaAdapter);
  if( AdapterInformationInternal )
  {
    _InterlockedExchange((volatile __int32 *)&AdapterInformationInternal[11].Blink + 1, 0);
    v6 = ViRemoveChannelWcb((_ADAPTER_INFORMATION *)AdapterInformationInternal, 0i64, 0i64);
    if( v6 )
    {
      DECREMENT_ADAPTER_CHANNELS((__int64)AdapterInformationInternal);
      SUBTRACT_MAP_REGISTERS((_ADAPTER_INFORMATION *)AdapterInformationInternal, (unsigned int)v6[12]);
      v7 = (_MAP_REGISTER_FILE *)*((_QWORD *)v6 + 12);
      if( v7 )
        ViFreeMapRegisterFile((_ADAPTER_INFORMATION *)AdapterInformationInternal, v7);
      ExFreeToNPagedLookasideList(&ViHalWaitBlockLookaside, v6);
    }
  }
}

Referenced by:

No references.