VfGetScatterGatherListEx

NTSTATUS __stdcall VfGetScatterGatherListEx(
        _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 *DmaCompletionRoutine,
        _DMA_ADAPTER *a16,
        _DEVICE_OBJECT *a17,
        VOID *a18,
        DMA_COMPLETION_STATUS a19,
        VOID *CompletionContext,
        _SCATTER_GATHER_LIST **ScatterGatherList){
  VOID *RealDmaOperation; 
  INT64 v26; 
  UINT8 v27; 
  _LIST_ENTRY *AdapterInformationInternal; 
  ULONG_PTR v29; 
  ULONG_PTR v30; 
  int v31; 
  NTSTATUS v32; 
  UINT64 v34; 
  char v35; 
  __int64(__fastcall *v36)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *, _MDL *, UINT64, _DWORD, _DWORD, VOID *, _DEVICE_OBJECT *, char, _SCATTER_GATHER_LIST *, VOID *, VOID *); 

  RealDmaOperation = ViGetRealDmaOperation((ULONG_PTR)DmaAdapter, 0xC0ui64);
  LOBYTE(v26) = 1;
  v36 = (__int64(__fastcall *)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *, _MDL *, UINT64, _DWORD, _DWORD, VOID *, _DEVICE_OBJECT *, char, _SCATTER_GATHER_LIST *, VOID *, VOID *))RealDmaOperation;
  AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, v26);
  if( AdapterInformationInternal )
  {
    VF_ASSERT_MAX_IRQL(v27);
    _InterlockedIncrement((volatile signed __int32 *)&AdapterInformationInternal[10].Flink + 1);
    _InterlockedIncrement((volatile signed __int32 *)&AdapterInformationInternal[10].Blink);
    VERIFY_BUFFER_LOCKED(Mdl);
    v29 = ViCheckMdlLength(Mdl, Offset, (unsigned int)Length);
    if( v29 )
    {
      v30 = v29;
      ViHalPreprocessOptions(
        &unk_140C12CA0,
        (PSTR)"The provided MDL is not sufficient to satisfy the requested length",
        0x24ui64,
        v29,
        0i64,
        0i64,
        v34);
      VfReportIssueWithOptions(0xE6ui64, 0x24u, v30, 0, 0, &unk_140C12CA0);
    }
  }
  v35 = (char)a10;
  v31 = v36(
          DmaAdapter,
          DeviceObject,
          DmaTransferContext,
          Mdl,
          Offset,
          Length,
          Flags,
          ExecutionRoutine,
          a9,
          v35,
          a11,
          a12,
          Context);
  v32 = v31;
  if( AdapterInformationInternal && v31 < 0 )
    DECREMENT_SCATTER_GATHER_LISTS((__int64)AdapterInformationInternal);
  return v32;
}

Referenced by:

No references.