HalPutScatterGatherListV3

VOID __stdcall HalPutScatterGatherListV3(
        _ADAPTER_OBJECT *ChildAdapter,
        _SCATTER_GATHER_LIST *ScatterGather,
        UINT8 WriteToDevice){
  unsigned __int64 Reserved; 
  _MDL *v5; 
  _MDL *Next; 
  UINT64 Length; 
  INT64 WriteToDevicea; 

  Reserved = ScatterGather->Reserved;
  LOBYTE(WriteToDevicea) = WriteToDevice;
  LODWORD(Length) = *(_DWORD *)(Reserved + 40);
  HalFlushAdapterBuffersEx(
    ChildAdapter,
    *(_MDL **)(Reserved + 8),
    *(VOID **)(Reserved + 24),
    *(_QWORD *)(Reserved + 32)
  - *(unsigned int *)(*(_QWORD *)(Reserved + 8) + 44i64)
  - *(_QWORD *)(*(_QWORD *)(Reserved + 8) + 32i64),
    Length,
    WriteToDevicea);
  IoFreeMapRegisters(&ChildAdapter->AdapterObject.DmaHeader, *(PVOID *)(Reserved + 24), *(_DWORD *)(Reserved + 44));
  v5 = *(_MDL **)(Reserved + 16);
  if( v5 )
  {
    do
    {
      Next = v5->Next;
      if( (v5->MdlFlags & 1) != 0 )
        MmUnmapLockedPages(v5->MappedSystemVa, v5);
      IoFreeMdl(v5);
      v5 = Next;
    }
    while( Next );
  }
  if( (*(_DWORD *)Reserved & 1) == 0 )
    ExFreePoolWithTag(*(PVOID *)(Reserved + 160), 0);
}

Referenced by:

HalPutScatterGatherList