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.