📄 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 gatewaytypedef 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 0typedef 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.#endifNTSTATUSTdiOpenNetbiosAddress ( 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 + -