TDI_SET_INFORMATION

When a kernel-mode client makes a TDI_SET_INFORMATION request, it asks the underlying TDI transport driver to set information of a client-specified type on a particular address, connection, or control channel.

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 set-information request. The transport sets this member before it completes the IRP, possibly to one of the following:

STATUS_SUCCESS
STATUS_INVALID_ADDRESS_COMPONENT
STATUS_INVALID_CONNECTION
STATUS_INVALID_DEVICE_REQUEST
STATUS_INVALID_PARAMETER
STATUS_INSUFFICIENT_RESOURCES
STATUS_NOT_IMPLEMENTED

IoStatus.Information

Specifies the number of bytes of client-supplied data the driver used from the buffer mapped at Irp->MdlAddress.

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_SET_INFORMATION.

IrpSp->FileObject

Points to an open file object representing a local-node address, connection endpoint, or control channel. The transport uses the FsContext and, possibly, FsContext2 fields to access the state it maintains about this address, connection, or control channel.

IrpSp->Parameters

Points to a TDI_REQUEST_KERNEL_SET_INFORMATION structure, defined as follows:

struct _TDI_REQUEST_KERNEL_SET_INFO {

LONG SetType;

PTDI_CONNECTION_INFORMATION RequestConnectionInformation;

} TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;

The transport uses the members of this structure as follows:

SetType

Specifies the type of set operation to carry out (see Comments).

RequestConnectionInformation

Points to a TDI_CONNECTION_INFORMATION structure containing input connection information if the given file object represents a connection. Otherwise, this member is NULL.

MdlAddress

Points to an MDL mapping a client-supplied buffer containing the data to be set. The format and contents of this buffer depend on the value of SetType.

Comments

When a client calls TdiBuildSetInformation to set up this IRP, it must specify the type of set operation it wants done and must provide a buffer containing appropriate data. The transport finds this information at IrpSp->Parameters in the SetType member. On input, SetType can be any of the following subset of the system-defined TDI_QUERY_XXX:

TDI_QUERY_ADDRESS_INFO

Set information for an address. The client-supplied buffer mapped at MdlAddress contains data formatted as a TDI_ADDRESS_INFO structure.

TDI_QUERY_CONNECTION_INFO

Set information for a connection endpoint. The client-supplied buffer mapped at MdlAddress contains data formatted as a TDI_CONNECTION_INFO structure.

TDI_QUERY_PROVIDER_INFO

Set information for a control channel. The client-supplied buffer mapped at MdlAddress contains data formatted as a TDI_PROVIDER_INFO structure.

TDI_QUERY_PROVIDER_STATISTICS

Set statistics information for a control channel. The client-supplied buffer mapped at MdlAddress contains data formatted as a TDI_PROVIDER_STATISTICS structure.

A transport can extend this interface at the discretion of the driver writer to support additional set operations for its clients. Such a transport must define TDI_QUERY_XXX codes in which the most significant bit is set.

The transport must fail any set-information request in which the given file object is inappropriate to the specified SetType.

The transport also can fail any set-information request for which the client supplies values that exceed a driver-determined limit. For example, most transports do not allow their clients to reset the MaxDatagramSize or MaxSendSize with TDI_QUERY_PROVIDER_INFO-type set-information requests.

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

See Also

TDI_ADDRESS_INFO, TDI_CONNECTION_INFO, TDI_CONNECTION_INFORMATION, TdiBuildSetInformation, TdiDispatchInternalDeviceControl, TDI_PROVIDER_INFO, TDI_PROVIDER_STATISTICS