VfMapTransferEx

NTSTATUS __stdcall VfMapTransferEx(
        _DMA_ADAPTER *DmaAdapter,
        _MDL *Mdl,
        VOID *MapRegisterBase,
        UINT64 Offset,
        UINT64 DeviceOffset,
        UINT64 *Length,
        UINT64 WriteToDevice,
        _SCATTER_GATHER_LIST *ScatterGatherBuffer,
        UINT64 ScatterGatherBufferLength,
        VOID *DmaCompletionRoutine,
        _DMA_ADAPTER *a11,
        _DEVICE_OBJECT *a12,
        VOID *a13,
        DMA_COMPLETION_STATUS a14,
        VOID *CompletionContext){
  _MDL *v15; 
  UINT8 v19; 
  _LIST_ENTRY *AdapterInformationInternal; 
  ULONG_PTR v21; 
  ULONG_PTR v22; 
  VOID *RealDmaOperation; 
  int v24; 
  NTSTATUS v25; 
  UINT64 v27; 

  v15 = Mdl;
  LOBYTE(Mdl) = 1;
  AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, (INT64)Mdl);
  if( AdapterInformationInternal )
  {
    VF_ASSERT_MAX_IRQL(v19);
    VERIFY_BUFFER_LOCKED(v15);
    ViCheckAdapterBuffers((INT64)AdapterInformationInternal);
    v21 = ViCheckMdlLength(v15, Offset, *(unsigned int *)Length);
    if( v21 )
    {
      v22 = v21;
      ViHalPreprocessOptions(
        (UINT64 *)((char *)&qword_140C12C90 + 4),
        (PSTR)"The provided MDL is not sufficient to satisfy the requested length",
        0x24ui64,
        v21,
        0i64,
        0i64,
        v27);
      VfReportIssueWithOptions(0xE6ui64, 0x24u, v22, 0, 0, (UINT64 *)((char *)&qword_140C12C90 + 4));
    }
  }
  RealDmaOperation = ViGetRealDmaOperation((ULONG_PTR)DmaAdapter, 0xB8ui64);
  LOBYTE(v27) = WriteToDevice;
  v24 = ((__int64(__fastcall *)(_DMA_ADAPTER *, _MDL *, VOID *, UINT64, _DWORD, UINT64 *, _DWORD, _SCATTER_GATHER_LIST *, _DWORD, VOID *, _DMA_ADAPTER *))RealDmaOperation)(
          DmaAdapter,
          v15,
          MapRegisterBase,
          Offset,
          DeviceOffset,
          Length,
          v27,
          ScatterGatherBuffer,
          ScatterGatherBufferLength,
          DmaCompletionRoutine,
          a11);
  v25 = v24;
  if( AdapterInformationInternal && v24 >= 0 )
    INCREASE_MAPPED_TRANSFER_BYTE_COUNT((_ADAPTER_INFORMATION *)AdapterInformationInternal, *(unsigned int *)Length, 1u);
  return v25;
}

Referenced by:

No references.