VfBuildScatterGatherListEx

NTSTATUS __stdcall VfBuildScatterGatherListEx(
        _DMA_ADAPTER *DmaAdapter,
        _DEVICE_OBJECT *DeviceObject,
        VOID *DmaTransferContext,
        _MDL *Mdl,
        UINT64 Offset,
        UINT64 Length,
        UINT64 Flags,
        VOID *ExecutionRoutine,
        _DEVICE_OBJECT *a9,
        _IRP *a10,
        _SCATTER_GATHER_LIST *a11,
        VOID *a12,
        VOID *Context,
        UINT8 WriteToDevice,
        VOID *ScatterGatherBuffer,
        UINT64 ScatterGatherLength,
        VOID *DmaCompletionRoutine,
        _DMA_ADAPTER *a18,
        _DEVICE_OBJECT *a19,
        VOID *a20,
        DMA_COMPLETION_STATUS a21,
        VOID *CompletionContext,
        VOID *ScatterGatherList){
  VOID *RealDmaOperation; 
  INT64 v28; 
  _LIST_ENTRY *AdapterInformationInternal; 
  ULONG_PTR v31; 
  ULONG_PTR v32; 
  int v33; 
  NTSTATUS v34; 
  UINT64 v35; 
  __int64(__fastcall *v36)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *, _MDL *, UINT64, _DWORD, _DWORD, VOID *, _DEVICE_OBJECT *, _BYTE, _SCATTER_GATHER_LIST *, _DWORD, VOID *, _QWORD, VOID *); 

  RealDmaOperation = ViGetRealDmaOperation((ULONG_PTR)DmaAdapter, 0xC8ui64);
  LOBYTE(v28) = 1;
  v36 = (__int64(__fastcall *)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *, _MDL *, UINT64, _DWORD, _DWORD, VOID *, _DEVICE_OBJECT *, _BYTE, _SCATTER_GATHER_LIST *, _DWORD, VOID *, _QWORD, VOID *))RealDmaOperation;
  AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, v28);
  if( AdapterInformationInternal )
  {
    VF_ASSERT_IRQL(2u);
    if( !Mdl )
      return -1073741811;
    _InterlockedIncrement((volatile signed __int32 *)&AdapterInformationInternal[10].Flink + 1);
    _InterlockedIncrement((volatile signed __int32 *)&AdapterInformationInternal[10].Blink);
    VERIFY_BUFFER_LOCKED(Mdl);
    v31 = ViCheckMdlLength(Mdl, Offset, (unsigned int)Length);
    if( v31 )
    {
      v32 = v31;
      ViHalPreprocessOptions(
        (UINT64 *)((char *)&qword_140C12C98 + 4),
        (PSTR)"The provided MDL is not sufficient to satisfy the requested length",
        0x24ui64,
        v31,
        0i64,
        0i64,
        v35);
      VfReportIssueWithOptions(0xE6ui64, 0x24u, v32, 0, 0, (UINT64 *)((char *)&qword_140C12C98 + 4));
    }
  }
  v33 = v36(
          DmaAdapter,
          DeviceObject,
          DmaTransferContext,
          Mdl,
          Offset,
          Length,
          Flags,
          ExecutionRoutine,
          a9,
          (_BYTE)a10,
          a11,
          (_DWORD)a12,
          Context,
          WriteToDevice,
          ScatterGatherBuffer);
  v34 = v33;
  if( AdapterInformationInternal )
  {
    if( v33 < 0 )
      DECREMENT_SCATTER_GATHER_LISTS((__int64)AdapterInformationInternal);
  }
  return v34;
}

Referenced by:

No references.