FsRtlRemoveNodeFromTunnel

VOID __stdcall FsRtlRemoveNodeFromTunnel(TUNNEL *Cache, TUNNEL_NODE *Node, _LIST_ENTRY *FreePoolList, UINT8 *Splay){
  __int64 v7; 
  TUNNEL_NODE **v8; 

  if( Splay && *Splay )
  {
    Cache->Cache = RtlDelete((_RTL_SPLAY_LINKS *)Node);
    *Splay = 0;
  }
  else
  {
    RtlDeleteNoSplay((_RTL_SPLAY_LINKS *)Node, &Cache->Cache);
  }
  v7 = *((_QWORD *)Node + 3);
  if( *(TUNNEL_NODE **)(v7 + 8) != Node + 6 || (v8 = (TUNNEL_NODE **)*((_QWORD *)Node + 4), *v8 != Node + 6) )
    __fastfail(3u);
  *v8 = (TUNNEL_NODE *)v7;
  *(_QWORD *)(v7 + 8) = v8;
  --Cache->NumEntries;
  FsRtlFreeTunnelNode(Node);
}

Referenced by:

FsRtlDeleteKeyFromTunnelCache
FsRtlPruneTunnelCache