Connection Engine Management

In RDBSS, the connection engine is designed to map and emulate the TDI specifications as closely as possible. This provides an efficient mechanism that fully exploits the underlying TDI implementation for use by network mini-redirectors.

While the RDBSS connection engine does abstract TDI, network redirectors are also free to communicate directly with TDI instead of using these RDBSS connection engine routines. The existing RDBSS connection engine routines that provide wrappers for TDI were developed to support Microsoft Networks, so they are very Windows-centric and may not be appropriate for other network directors. Also, the connection engine routines in RDBSS are to be removed from Windows operating systems released after Windows Server 2003. In the future, each network redirector will be responsible for developing the connection engine routines needed (to TDI or some other transport). For example, a WebDAV redirector could talk to some user-mode reflector process to send out HTTP packets (standard TCP/IP) rather than TDI.

The RDBSS connection engine routines deal with the following entities:

  • Transports

  • Transport addresses

  • Transport connections

  • Virtual circuits on a connection

The transports are bindings to the various transport service providers on any system. The transport addresses are the local connection end points. The connections are transport connections between endpoints. Each connection encapsulates a number of virtual circuits (typically one).

The following important data structures are created and manipulated by the various connection engine routines associated with RDBSS:

  • RXCE_TRANSPORT--encapsulates all of the parameters for a transport

  • RXCE_ADDRESS--encapsulates all of the parameters for a transport address

  • RXCE_CONNECTION--encapsulates all of the parameters for a transport connection

  • RXCE_VC--encapsulates all of the parameters for a virtual circuit on a transport connection

Network mini-redirector drivers can use these data structures and invoke the routines provided for each type to build and tear down the connection engine portions. These routines do not allocate or free the memory associated with these structures. This provides a flexible mechanism for mini-redirector drivers to manage instances of these connection engine data structures.

The four connection engine types described above are tagged at the beginning of each data structure with a special RXCE_SIGNATURE signature that is used extensively by RDBSS for validation.

RDBSS provides the following connection engine routines that can be used by network mini-redirector drivers.

Routine Description

RxCeAllocateIrpWithMDL

This routine allocates an IRP for use by the connection engine and associates an MDL with the IRP.

This routine is only available on Windows XP.

RxCeBuildAddress

This routine associates a transport address with a transport binding.

RxCeBuildConnection

This routine establishes a connection between a local RDBSS connection address and a given remote address. This routine should be called in the context of a system worker thread.

RxCeBuildConnectionOverMultipleTransports

This routine establishes a connection between a local RDBSS connection address and a given remote address and supports multiple transports. A set of local addresses are specified and this routine attempts to connect to the target server through all of the transports associated with the local addresses. One connection is chosen as the winner depending on the connect options. This routine must be called in the context of a system worker thread.

RxCeBuildTransport

This routine binds an RDBSS transport to a specified transport name.

RxCeBuildVC

This routine adds a virtual circuit to a specified connection.

RxCeCancelConnectRequest

This routine cancels a previously issued connection request.

Note that this routine is not currently implemented.

RxCeFreeIrp

This routine frees an IRP used by the connection engine.

This routine is only available on Windows XP.

RxCeInitiateVCDisconnect

This routine initiates a disconnect on the virtual circuit. This routine must be called in the context of a system worker thread.

RxCeQueryAdapterStatus

This routine returns the ADAPTER_STATUS structure for a given transport.

RxCeQueryInformation

This routine queries information that pertains to a connection.

RxCeQueryTransportInformation

This routine returns the transport information about the connection count and quality of service for a given transport.

RxCeSend

This routine sends a TSDU along the specified connection on a virtual circuit.

RxCeSendDatagram

This routine sends a TSDU to a specified transport address.

RxCeTearDownAddress

This routine removes a transport address from a transport binding.

RxCeTearDownConnection

This routine tears down a given connection.

RxCeTearDownTransport

This routine unbinds from the transport specified.

RxCeTearDownVC

This routine tears down a virtual connection.

Note   TDI will not be supported in Microsoft Windows versions after Windows Vista. Use Windows Filtering Platform or Winsock Kernel instead.