VfCancelAdapterChannel

NTSTATUS __stdcall VfCancelAdapterChannel(ULONG_PTR DmaAdapter, _DEVICE_OBJECT *DeviceObject, VOID *DmaTransferContext){
  _DMA_ADAPTER *v5; 
  __int64(__fastcall *RealDmaOperation)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *); 
  INT64 v7; 
  __int64(__fastcall *v8)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *); 
  _LIST_ENTRY *AdapterInformationInternal; 
  _VF_WAIT_CONTEXT_BLOCK *v10; 
  char v11; 
  _VF_WAIT_CONTEXT_BLOCK *v12; 
  _MAP_REGISTER_FILE *v13; 

  v5 = *(_DMA_ADAPTER **)&DmaAdapter;
  RealDmaOperation = (__int64(__fastcall *)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *))ViGetRealDmaOperation(
                                                                                         DmaAdapter,
                                                                                         0xB0ui64);
  LOBYTE(v7) = 1;
  v8 = RealDmaOperation;
  AdapterInformationInternal = ViGetAdapterInformationInternal(v5, v7);
  LODWORD(v10) = v8(v5, DeviceObject, DmaTransferContext);
  v11 = (char)v10;
  if( AdapterInformationInternal )
  {
    if( (_BYTE)v10 )
    {
      v10 = ViRemoveChannelWcb((_ADAPTER_INFORMATION *)AdapterInformationInternal, 0i64, DmaTransferContext);
      v12 = v10;
      if( v10 )
      {
        DECREMENT_ADAPTER_CHANNELS((__int64)AdapterInformationInternal);
        SUBTRACT_MAP_REGISTERS((_ADAPTER_INFORMATION *)AdapterInformationInternal, (unsigned int)v12[12]);
        v13 = (_MAP_REGISTER_FILE *)*((_QWORD *)v12 + 12);
        if( v13 )
          ViFreeMapRegisterFile((_ADAPTER_INFORMATION *)AdapterInformationInternal, v13);
        ExFreeToNPagedLookasideList(&ViHalWaitBlockLookaside, v12);
      }
    }
  }
  LOBYTE(v10) = v11;
  return(int)v10;
}

Referenced by:

No references.