📄 tdi.h
字号:
typedef struct _TDI_REQUEST_SET_INFORMATION {
TDI_REQUEST Request;
ULONG SetType; // class of information to be set.
PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
} TDI_REQUEST_SET_INFORMATION, *PTDI_REQUEST_SET_INFORMATION;
//
// This is the old name, do not use it.
//
typedef TDI_REQUEST_SET_INFORMATION TDI_REQ_SET_INFORMATION, *PTDI_REQ_SET_INFORMATION;
//
// Convenient universal request type.
//
typedef union _TDI_REQUEST_TYPE {
TDI_REQUEST_ACCEPT TdiAccept;
TDI_REQUEST_CONNECT TdiConnect;
TDI_REQUEST_DISCONNECT TdiDisconnect;
TDI_REQUEST_LISTEN TdiListen;
TDI_REQUEST_QUERY_INFORMATION TdiQueryInformation;
TDI_REQUEST_RECEIVE TdiReceive;
TDI_REQUEST_RECEIVE_DATAGRAM TdiReceiveDatagram;
TDI_REQUEST_SEND TdiSend;
TDI_REQUEST_SEND_DATAGRAM TdiSendDatagram;
TDI_REQUEST_SET_EVENT_HANDLER TdiSetEventHandler;
TDI_REQUEST_SET_INFORMATION TdiSetInformation;
} TDI_REQUEST_TYPE, *PTDI_REQUEST_TYPE;
//
// Query information types
//
//
// Generic query info types, must be supported by all transports.
//
#define TDI_QUERY_BROADCAST_ADDRESS 0x00000001
#define TDI_QUERY_PROVIDER_INFORMATION 0x00000002 // temp, renamed ...
#define TDI_QUERY_PROVIDER_INFO 0x00000002 // ... to this
#define TDI_QUERY_ADDRESS_INFO 0x00000003
#define TDI_QUERY_CONNECTION_INFO 0x00000004
#define TDI_QUERY_PROVIDER_STATISTICS 0x00000005
#define TDI_QUERY_DATAGRAM_INFO 0x00000006
#define TDI_QUERY_DATA_LINK_ADDRESS 0x00000007
#define TDI_QUERY_NETWORK_ADDRESS 0x00000008
//
// netbios specific query information types, must be supported by netbios
// providers. Query adapter status returns the ADAPTER_STATUS struture defined
// in the file NB30.H. Query session status returns the SESSION_HEADER/
// SESSION_BUFFER structures defined in NB30.H. Query find name returns
// the FIND_NAME_HEADER/FIND_NAME_BUFFER structures defined in NB30.H.
//
#define TDI_QUERY_ADAPTER_STATUS 0x00000100
#define TDI_QUERY_SESSION_STATUS 0x00000200
#define TDI_QUERY_FIND_NAME 0x00000300
//
// The following structures are returned by TdiQueryInformation and are read
// by TdiSetInformation. Note that a provider with netbios support will also
// return the adapter status
//
typedef struct _TDI_ENDPOINT_INFO {
ULONG State; // current state of the endpoint.
ULONG Event; // last event at the endpoint.
ULONG TransmittedTsdus; // TSDUs sent from this endpoint.
ULONG ReceivedTsdus; // TSDUs received at this endpoint.
ULONG TransmissionErrors; // TSDUs transmitted in error.
ULONG ReceiveErrors; // TSDUs received in error.
ULONG MinimumLookaheadData; // guaranteed min size of lookahead data.
ULONG MaximumLookaheadData; // maximum size of lookahead data.
ULONG PriorityLevel; // priority class assigned to outgoing data.
ULONG SecurityLevel; // security level assigned to outgoing data.
ULONG SecurityCompartment; // security compartment assigned to outgoing data.
} TDI_ENDPOINT_INFO, *PTDI_ENDPOINT_INFO;
typedef struct _TDI_CONNECTION_INFO {
ULONG State; // current state of the connection.
ULONG Event; // last event on the connection.
ULONG TransmittedTsdus; // TSDUs sent on this connection.
ULONG ReceivedTsdus; // TSDUs received on this connection.
ULONG TransmissionErrors; // TSDUs transmitted in error/this connection.
ULONG ReceiveErrors; // TSDUs received in error/this connection.
LARGE_INTEGER Throughput; // estimated throughput on this connection.
LARGE_INTEGER Delay; // estimated delay on this connection.
ULONG SendBufferSize; // size of buffer for sends - only
// meaningful for internal buffering
// protocols like tcp
ULONG ReceiveBufferSize; // size of buffer for receives - only
// meaningful for internal buffering
// protocols like tcp
BOOLEAN Unreliable; // is this connection "unreliable".
} TDI_CONNECTION_INFO, *PTDI_CONNECTION_INFO;
typedef struct _TDI_ADDRESS_INFO {
ULONG ActivityCount; // outstanding open file objects/this address.
TRANSPORT_ADDRESS Address; // the actual address & its components.
} TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;
typedef struct _TDI_DATAGRAM_INFO {
ULONG MaximumDatagramBytes;
ULONG MaximumDatagramCount;
} TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO;
typedef struct _TDI_PROVIDER_INFO {
ULONG Version; // TDI version: 0xaabb, aa=major, bb=minor
ULONG MaxSendSize; // max size of user send.
ULONG MaxConnectionUserData; // max size of user-specified connect data.
ULONG MaxDatagramSize; // max datagram length in bytes.
ULONG ServiceFlags; // service options, defined below.
ULONG MinimumLookaheadData; // guaranteed min size of lookahead data.
ULONG MaximumLookaheadData; // maximum size of lookahead data.
ULONG NumberOfResources; // how many TDI_RESOURCE_STATS for provider.
LARGE_INTEGER StartTime; // when the provider became active.
} TDI_PROVIDER_INFO, *PTDI_PROVIDER_INFO;
#define TDI_SERVICE_CONNECTION_MODE 0x00000001 // connection mode supported.
#define TDI_SERVICE_ORDERLY_RELEASE 0x00000002 // orderly release supported.
#define TDI_SERVICE_CONNECTIONLESS_MODE 0x00000004 // connectionless mode supported.
#define TDI_SERVICE_ERROR_FREE_DELIVERY 0x00000008 // error free delivery supported.
#define TDI_SERVICE_SECURITY_LEVEL 0x00000010 // security wrapper supported.
#define TDI_SERVICE_BROADCAST_SUPPORTED 0x00000020 // broadcast datagrams supported.
#define TDI_SERVICE_MULTICAST_SUPPORTED 0x00000040 // multicast datagrams supported.
#define TDI_SERVICE_DELAYED_ACCEPTANCE 0x00000080 // use of TDI_ACCEPT_OR_REJECT is supported.
#define TDI_SERVICE_EXPEDITED_DATA 0x00000100 // expedited data supported.
#define TDI_SERVICE_INTERNAL_BUFFERING 0x00000200 // protocol does internal buffering
#define TDI_SERVICE_ROUTE_DIRECTED 0x00000400 // directed packets may go further than MC.
#define TDI_SERVICE_NO_ZERO_LENGTH 0x00000800 // zero-length sends NOT supported
#define TDI_SERVICE_POINT_TO_POINT 0x00001000 // transport is functioning as a RAS gateway
typedef struct _TDI_PROVIDER_RESOURCE_STATS {
ULONG ResourceId; // identifies resource in question.
ULONG MaximumResourceUsed; // maximum number in use at once.
ULONG AverageResourceUsed; // average number in use.
ULONG ResourceExhausted; // number of times resource not available.
} TDI_PROVIDER_RESOURCE_STATS, *PTDI_PROVIDER_RESOURCE_STATS;
typedef struct _TDI_PROVIDER_STATISTICS {
ULONG Version; // TDI version: 0xaabb, aa=major, bb=minor
ULONG OpenConnections; // currently active connections.
ULONG ConnectionsAfterNoRetry; // successful connections, no retries.
ULONG ConnectionsAfterRetry; // successful connections after retry.
ULONG LocalDisconnects; // connection disconnected locally.
ULONG RemoteDisconnects; // connection disconnected by remote.
ULONG LinkFailures; // connections dropped, link failure.
ULONG AdapterFailures; // connections dropped, adapter failure.
ULONG SessionTimeouts; // connections dropped, session timeout.
ULONG CancelledConnections; // connect attempts cancelled.
ULONG RemoteResourceFailures; // connections failed, remote resource problems.
ULONG LocalResourceFailures; // connections failed, local resource problems.
ULONG NotFoundFailures; // connections failed, remote not found.
ULONG NoListenFailures; // connections rejected, we had no listens.
ULONG DatagramsSent;
LARGE_INTEGER DatagramBytesSent;
ULONG DatagramsReceived;
LARGE_INTEGER DatagramBytesReceived;
ULONG PacketsSent; // total packets given to NDIS.
ULONG PacketsReceived; // total packets received from NDIS.
ULONG DataFramesSent;
LARGE_INTEGER DataFrameBytesSent;
ULONG DataFramesReceived;
LARGE_INTEGER DataFrameBytesReceived;
ULONG DataFramesResent;
LARGE_INTEGER DataFrameBytesResent;
ULONG DataFramesRejected;
LARGE_INTEGER DataFrameBytesRejected;
ULONG ResponseTimerExpirations; // e.g. T1 for Netbios
ULONG AckTimerExpirations; // e.g. T2 for Netbios
ULONG MaximumSendWindow; // in bytes
ULONG AverageSendWindow; // in bytes
ULONG PiggybackAckQueued; // attempts to wait to piggyback ack.
ULONG PiggybackAckTimeouts; // times that wait timed out.
LARGE_INTEGER WastedPacketSpace; // total amount of "wasted" packet space.
ULONG WastedSpacePackets; // how many packets contributed to that.
ULONG NumberOfResources; // how many TDI_RESOURCE_STATS follow.
TDI_PROVIDER_RESOURCE_STATS ResourceStats[1]; // variable array of them.
} TDI_PROVIDER_STATISTICS, *PTDI_PROVIDER_STATISTICS;
#if 0
typedef struct _TDI_NETMAN_INFO {
OFFSET VariableName; // name of variable (a FLAT_STRING).
OFFSET VariableValue; // value of variable (a TDI_NETMAN_VARIABLE).
} TDI_NETMAN_INFO, *PTDI_NETMAN_INFO;
typedef struct _TDI_NETMAN_VARIABLE {
ULONG VariableType; // selector for union, below.
union {
ULONG LongValue;
HARDWARE_ADDRESS HardwareAddressValue;
FLAT_STRING StringValue;
} Value;
} TDI_NETMAN_VARIABLE, *PTDI_NETMAN_VARIABLE;
#define NETMAN_VARTYPE_ULONG 0 // type is a ULONG.
#define NETMAN_VARTYPE_HARDWARE_ADDRESS 1 // type is a HARDWARE_ADDRESS.
#define NETMAN_VARTYPE_STRING 2 // type is a FLAT_STRING.
typedef union _TDI_INFO_BUFFER {
TDI_ENDPOINT_INFO EndpointInfo;
TDI_CONNECTION_INFO ConnectionInfo;
TDI_ADDRESS_INFO AddressInfo;
TDI_PROVIDER_INFO ProviderInfo;
TDI_NETMAN_INFO NetmanVariable;
} TDI_INFO_BUFFER, *PTDI_INFO_BUFFER;
#define TDI_INFO_CLASS_ENDPOINT 0 // endpoint information class.
#define TDI_INFO_CLASS_CONNECTION 1 // connection information class.
#define TDI_INFO_CLASS_ADDRESS 2 // address information class.
#define TDI_INFO_CLASS_PROVIDER 3 // provider information class.
#define TDI_INFO_CLASS_NETMAN 4 // network management info class.
#endif
NTSTATUS
TdiOpenNetbiosAddress (
IN OUT PHANDLE FileHandle,
IN PUCHAR Buffer,
IN PVOID DeviceName,
IN PVOID Name
);
#define IOCTL_TDI_MAGIC_BULLET _TDI_CONTROL_CODE( 0x7f, METHOD_NEITHER )
//
// NtDeviceIoControlFile InputBuffer/OutputBuffer record structures for
// this device.
//
#if 0
//
// These are the old definitions
//
typedef struct _TDI_REQUEST_USER_ASSOCIATE {
HANDLE AddressHandle;
} TDI_REQUEST_USER_ASSOCIATE, *PTDI_REQUEST_USER_ASSOCIATE;
typedef struct _TDI_REQUEST_USER_CONNECT {
TDI_CONNECTION_INFORMATION CallInformation;
//CHAR UserData[CallInformation.UserDataLength];
//CHAR Options[CallInformation.OptionsLength];
//CHAR RemoteAddress[CallInformation.RemoteAddressLength];
} TDI_REQUEST_USER_CONNECT, *PTDI_REQUEST_USER_CONNECT;
typedef struct _TDI_REQUEST_USER_QUERY_INFO {
LONG QueryType;
} TDI_REQUEST_USER_QUERY_INFO, *PTDI_REQUEST_USER_QUERY_INFO;
#else
//
// Define these to match the kernel ones for compatibility
//
typedef TDI_REQUEST_ASSOCIATE_ADDRESS TDI_REQUEST_USER_ASSOCIATE, *PTDI_REQUEST_USER_ASSOCIATE;
typedef TDI_REQUEST_CONNECT TDI_REQUEST_USER_CONNECT, *PTDI_REQUEST_USER_CONNECT;
typedef TDI_REQUEST_QUERY_INFORMATION TDI_REQUEST_USER_QUERY_INFO, *PTDI_REQUEST_USER_QUERY_INFO;
#endif
//
// The header in the OutputBuffer passed to TdiAction
//
typedef struct _TDI_ACTION_HEADER {
ULONG TransportId;
USHORT ActionCode;
USHORT Reserved;
} TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;
typedef struct _STREAMS_TDI_ACTION {
TDI_ACTION_HEADER Header;
BOOLEAN DatagramOption;
ULONG BufferLength;
CHAR Buffer[1];
} STREAMS_TDI_ACTION, *PSTREAMS_TDI_ACTION;
#endif // ndef _TDI_USER_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -