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