ViRemoveChannelWcb

_VF_WAIT_CONTEXT_BLOCK *__stdcall ViRemoveChannelWcb(
        _ADAPTER_INFORMATION *AdapterInformation,
        _MAP_REGISTER_FILE *MapRegisterFile,
        VOID *DmaTransferContext){
  char v6; 
  UINT64 *v8; 
  unsigned __int64 v9; 
  _ADAPTER_INFORMATION *v10; 
  __int64 i; 
  __int64 v12; 
  __int64 v13; 
  _QWORD *v14; 

  v6 = 0;
  if( MapRegisterFile && DmaTransferContext )
    return 0i64;
  v8 = (UINT64 *)(AdapterInformation + 36);
  v9 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)AdapterInformation + 18);
  v10 = AdapterInformation + 32;
  for( i = *((_QWORD *)AdapterInformation + 16); ; i = *(_QWORD *)(v12 + 72) )
  {
    v12 = i - 72;
    if( v10 == (_ADAPTER_INFORMATION *)(v12 + 72) )
      break;
    if( MapRegisterFile
      && (*(_MAP_REGISTER_FILE **)(v12 + 96) == MapRegisterFile || *(_MAP_REGISTER_FILE **)(v12 + 88) == MapRegisterFile)
      || DmaTransferContext && *(VOID **)(v12 + 40) == DmaTransferContext
      || *(_DWORD *)(v12 + 52) <= 1u )
    {
      v13 = *(_QWORD *)(v12 + 72);
      v14 = *(_QWORD **)(v12 + 80);
      if( *(_QWORD *)(v13 + 8) != v12 + 72 || *v14 != v12 + 72 )
        __fastfail(3u);
      *v14 = v13;
      v6 = 1;
      *(_QWORD *)(v13 + 8) = v14;
      break;
    }
  }
  KxReleaseSpinLock(v8);
  __writecr8(v9);
  if( v6 != 1 )
    return 0i64;
  return(_VF_WAIT_CONTEXT_BLOCK *)v12;
}

Referenced by:

VfCancelAdapterChannel
VfFreeAdapterChannel
VfFreeMapRegisters