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.