VfCancelAdapterChannel
NTSTATUS __stdcall VfCancelAdapterChannel(ULONG_PTR DmaAdapter, _DEVICE_OBJECT *DeviceObject, VOID *DmaTransferContext){
_DMA_ADAPTER *v5;
__int64(__fastcall *RealDmaOperation)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *);
INT64 v7;
__int64(__fastcall *v8)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *);
_LIST_ENTRY *AdapterInformationInternal;
_VF_WAIT_CONTEXT_BLOCK *v10;
char v11;
_VF_WAIT_CONTEXT_BLOCK *v12;
_MAP_REGISTER_FILE *v13;
v5 = *(_DMA_ADAPTER **)&DmaAdapter;
RealDmaOperation = (__int64(__fastcall *)(_DMA_ADAPTER *, _DEVICE_OBJECT *, VOID *))ViGetRealDmaOperation(
DmaAdapter,
0xB0ui64);
LOBYTE(v7) = 1;
v8 = RealDmaOperation;
AdapterInformationInternal = ViGetAdapterInformationInternal(v5, v7);
LODWORD(v10) = v8(v5, DeviceObject, DmaTransferContext);
v11 = (char)v10;
if( AdapterInformationInternal )
{
if( (_BYTE)v10 )
{
v10 = ViRemoveChannelWcb((_ADAPTER_INFORMATION *)AdapterInformationInternal, 0i64, DmaTransferContext);
v12 = v10;
if( v10 )
{
DECREMENT_ADAPTER_CHANNELS((__int64)AdapterInformationInternal);
SUBTRACT_MAP_REGISTERS((_ADAPTER_INFORMATION *)AdapterInformationInternal, (unsigned int)v12[12]);
v13 = (_MAP_REGISTER_FILE *)*((_QWORD *)v12 + 12);
if( v13 )
ViFreeMapRegisterFile((_ADAPTER_INFORMATION *)AdapterInformationInternal, v13);
ExFreeToNPagedLookasideList(&ViHalWaitBlockLookaside, v12);
}
}
}
LOBYTE(v10) = v11;
return(int)v10;
}Referenced by:
No references.