TDI_DISASSOCIATE_ADDRESS

When a kernel-mode client makes a TDI_DISASSOCIATE_ADDRESS request, it asks the underlying TDI transport driver to break an established association between a particular local-node address and a connection endpoint.

IRP

The transport calls IoGetCurrentIrpStackLocation with the given Irp to get a pointer to its own I/O stack location in the IRP, shown in the following list as IrpSp. IRP members relevant to this request include the following:

IoStatus.Status
Specifies the final status of the disassociate-address request. The transport sets this member before it completes the IRP, possibly to one of the following:

STATUS_SUCCESS
STATUS_INVALID_CONNECTION

IrpSp->MajorFunction
Specifies IRP_MJ_INTERNAL_DEVICE_CONTROL. The transport can ignore this member if it exports a TdiDispatchInternalDeviceControl routine that handles only TDI_XXX requests.
IrpSp->MinorFunction
Specifies TDI_DISASSOCIATE_ADDRESS.
IrpSp->FileObject
Points to an open file object representing the connection endpoint to be disassociated from a local-node address. The transport uses the FsContext and, possibly, FsContext2 fields to access the state it maintains about the connection.

Comments

A client makes this request to disassociate a connection endpoint for an inactive connection from the associated local-node address, whether that client initiated the disconnection from its remote-node peer or vice versa.

After the address has been disassociated, the client can reassociate it with another connection endpoint or reassociate the connection endpoint with another open local-node address by making another TDI_ASSOCIATE_ADDRESS request. Consequently, the transport cannot assume that the file objects representing such an address and connection endpoint will be closed following the completion of the TDI_DISASSOCIATE_ADDRESS request.

TdiBuildDisassociateAddress is the macro a client uses to fill in this IRP.

See Also

TDI_ASSOCIATE_ADDRESS, TdiBuildDisassociateAddress, TDI_DISCONNECT, TdiDispatchInternalDeviceControl