TdiAction
---------

TdiAction is a generic service which may accomodate any extensions to the
TDI interface.

TDI_STATUS
TdiAction(
    IN PTDI_REQ 	    TdiReqInfo,
    IN PVOID		    ActionParametersBlock,
    IN UINT		    ActionParametersBlockLength,
    OUT PTDI_REQ_STATUS     Status
    );

Parameters:
-----------

    TdiReqInfo - A pointer to a TDI_REQ structure. In this structure the
    Handle field contains the handle of the address object, the control
    channel or the connection id on which the action will be performed.

    ActionParametersBlock - A pointer to a structure with the action
    in/out parameters. The structure format is dependent of the action code.

    The action parameter block structure is a contiguous input/output buffer
    which contains all the parameters involved in the required action.
    The buffer starts with a common header followed by the action specific
    parameters.

    The header is described by the following structure:

    typedef struct _ACTION_HEADER {
	ULONG	    TransportID;
	USHORT	    ActionCode;
	USHORT	    Reserved;
	} ACTION_HEADER;

    The ACTION_HEADER fields:

     TransportID - Four bytes identifing the transport provider. May be used
		   to check the validity of the request by the transport.
		   We can use the following convention:

		   All strings starting with M identify MS transports:

		   M\0\0\0 - All transports
		   MNBF   - NBF
		   MABF   - AsyBEUI
		   MXNS   - XNS, etc.

      ActionCode - identifies the action
      Reserved	 - future extensions (e.g. version nr, etc.)

    ActionParametersBlockLength - Length of the action parameters block
    structure.

    Status - A pointer to a TDI_REQ_STATUS structure. This structure is used
    to return information about the final completion status of the
    asynchronous commands. The BytesXfer field in this structure represents
    the number of bytes transfered from/into the ActionDataBuffer.

The kernel level implementation of the TdiAction request is as follows:

Relevant IRP Components:
------------------------

IoStatus.Status - Returns the final status of the command.

IrpSp->MajorFunction - IRP_MJ_INTERNAL_DEVICE_CONTROL.

IrpSp->MinorFunction - TDI_ACTION.

IrpSp->FileObject - A pointer to a file object representing the address object
    (control channel, connection) on which the action will be performed.

MdlAddress - A pointer to a chain of Memory Descriptor Lists (MDLs) describing
    the action parameters block buffer.
