home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / ddk / tdi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  17.9 KB  |  598 lines

  1. /*
  2.  * tdi.h
  3.  *
  4.  * TDI user mode definitions
  5.  *
  6.  * This file is part of the w32api package.
  7.  *
  8.  * Contributors:
  9.  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10.  *
  11.  * THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  * This source code is offered for use in the public domain. You may
  14.  * use, modify or distribute it freely.
  15.  *
  16.  * This code is distributed in the hope that it will be useful but
  17.  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  * DISCLAIMED. This includes but is not limited to warranties of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  */
  22.  
  23. #ifndef __TDI_H
  24. #define __TDI_H
  25.  
  26. #if __GNUC__ >=3
  27. #pragma GCC system_header
  28. #endif
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. #pragma pack(push,4)
  35.  
  36. #include "ntddk.h"
  37. #include "ntddtdi.h"
  38. #include "tdistat.h"
  39. #include "netpnp.h"
  40.  
  41.  
  42. /* Basic types */
  43.  
  44. typedef LONG TDI_STATUS;
  45. typedef PVOID CONNECTION_CONTEXT;
  46.  
  47. typedef struct _TDI_CONNECTION_INFORMATION {
  48.   LONG  UserDataLength;
  49.   PVOID  UserData;
  50.   LONG  OptionsLength;
  51.   PVOID  Options;
  52.   LONG  RemoteAddressLength;
  53.   PVOID  RemoteAddress;
  54. } TDI_CONNECTION_INFORMATION, *PTDI_CONNECTION_INFORMATION;
  55.  
  56. typedef struct _TDI_REQUEST {
  57.   union {
  58.     HANDLE  AddressHandle;
  59.     CONNECTION_CONTEXT  ConnectionContext;
  60.     HANDLE  ControlChannel;
  61.   } Handle;
  62.   PVOID  RequestNotifyObject;
  63.   PVOID  RequestContext;
  64.   TDI_STATUS  TdiStatus;
  65. } TDI_REQUEST, *PTDI_REQUEST;
  66.  
  67. typedef struct _TDI_REQUEST_STATUS {
  68.   TDI_STATUS  Status;
  69.   PVOID  RequestContext;
  70.   ULONG  BytesTransferred;
  71. } TDI_REQUEST_STATUS, *PTDI_REQUEST_STATUS;
  72.  
  73. typedef struct _TA_ADDRESS {
  74.   USHORT  AddressLength;
  75.   USHORT  AddressType;
  76.   UCHAR  Address[1];
  77. } TA_ADDRESS, *PTA_ADDRESS;
  78.  
  79. #define TDI_ADDRESS_TYPE_UNSPEC             0
  80. #define TDI_ADDRESS_TYPE_UNIX               1
  81. #define TDI_ADDRESS_TYPE_IP                 2
  82. #define TDI_ADDRESS_TYPE_IMPLINK            3
  83. #define TDI_ADDRESS_TYPE_PUP                4
  84. #define TDI_ADDRESS_TYPE_CHAOS              5
  85. #define TDI_ADDRESS_TYPE_NS                 6
  86. #define TDI_ADDRESS_TYPE_IPX                6
  87. #define TDI_ADDRESS_TYPE_NBS                7
  88. #define TDI_ADDRESS_TYPE_ECMA               8
  89. #define TDI_ADDRESS_TYPE_DATAKIT            9
  90. #define TDI_ADDRESS_TYPE_CCITT              10
  91. #define TDI_ADDRESS_TYPE_SNA                11
  92. #define TDI_ADDRESS_TYPE_DECnet             12
  93. #define TDI_ADDRESS_TYPE_DLI                13
  94. #define TDI_ADDRESS_TYPE_LAT                14
  95. #define TDI_ADDRESS_TYPE_HYLINK             15
  96. #define TDI_ADDRESS_TYPE_APPLETALK          16
  97. #define TDI_ADDRESS_TYPE_NETBIOS            17
  98. #define TDI_ADDRESS_TYPE_8022               18
  99. #define TDI_ADDRESS_TYPE_OSI_TSAP           19
  100. #define TDI_ADDRESS_TYPE_NETONE             20
  101. #define TDI_ADDRESS_TYPE_VNS                21
  102. #define TDI_ADDRESS_TYPE_NETBIOS_EX         22
  103. #define TDI_ADDRESS_TYPE_IP6                23
  104. #define TDI_ADDRESS_TYPE_NETBIOS_UNICODE_EX 24
  105.  
  106. #define TdiTransportAddress               "TransportAddress"
  107. #define TdiConnectionContext              "ConnectionContext"
  108. #define TDI_TRANSPORT_ADDRESS_LENGTH      (sizeof(TdiTransportAddress) - 1)
  109. #define TDI_CONNECTION_CONTEXT_LENGTH     (sizeof(TdiConnectionContext) - 1)
  110.  
  111. typedef struct _TRANSPORT_ADDRESS {
  112.   LONG  TAAddressCount;
  113.   TA_ADDRESS  Address[1];
  114. } TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS;
  115.  
  116. typedef struct _TDI_ADDRESS_INFO {
  117.   ULONG  ActivityCount;
  118.   TRANSPORT_ADDRESS  Address;
  119. } TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;
  120.  
  121. typedef struct _TDI_ACTION_HEADER {
  122.   ULONG  TransportId;
  123.   USHORT  ActionCode;
  124.   USHORT  Reserved;
  125. } TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;
  126.  
  127. typedef struct _TDI_ADDRESS_8022 {
  128.   UCHAR  MACAddress[6];
  129. } TDI_ADDRESS_8022, *PTDI_ADDRESS_8022;
  130.  
  131. #define TDI_ADDRESS_LENGTH_8022           sizeof(TDI_ADDRESS_8022);
  132.  
  133. typedef struct _TDI_ADDRESS_APPLETALK {
  134.   USHORT  Network;
  135.   UCHAR  Node;
  136.   UCHAR  Socket;
  137. } TDI_ADDRESS_APPLETALK, *PTDI_ADDRESS_APPLETALK;
  138.  
  139. #define TDI_ADDRESS_LENGTH_APPLETALK      sizeof(TDI_ADDRESS_APPLETALK)
  140.  
  141. typedef struct _TDI_ADDRESS_IP {
  142.   USHORT  sin_port;
  143.   ULONG  in_addr;
  144.   UCHAR  sin_zero[8];
  145. } TDI_ADDRESS_IP, *PTDI_ADDRESS_IP;
  146.  
  147. #define TDI_ADDRESS_LENGTH_IP             sizeof(TDI_ADDRESS_IP)
  148.  
  149. typedef struct _TDI_ADDRESS_IPX {
  150.   ULONG  NetworkAddress;
  151.   UCHAR  NodeAddress[6];
  152.   USHORT  Socket;
  153. } TDI_ADDRESS_IPX, *PTDI_ADDRESS_IPX;
  154.  
  155. #define TDI_ADDRESS_LENGTH_IPX            sizeof(TDI_ADDRESS_IPX)
  156.  
  157. /* TDI_ADDRESS_NETBIOS.NetbiosNameType constants */
  158. #define TDI_ADDRESS_NETBIOS_TYPE_UNIQUE       0x0000
  159. #define TDI_ADDRESS_NETBIOS_TYPE_GROUP        0x0001
  160. #define TDI_ADDRESS_NETBIOS_TYPE_QUICK_UNIQUE 0x0002
  161. #define TDI_ADDRESS_NETBIOS_TYPE_QUICK_GROUP  0x0003
  162.  
  163. typedef struct _TDI_ADDRESS_NETBIOS {
  164.   USHORT  NetbiosNameType;
  165.   UCHAR  NetbiosName[16];
  166. } TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS;
  167.  
  168. #define TDI_ADDRESS_LENGTH_NETBIOS        sizeof(TDI_ADDRESS_NETBIOS)
  169.  
  170. typedef struct _TDI_ADDRESS_NETBIOS_EX {
  171.   UCHAR  EndpointName[16];
  172.   TDI_ADDRESS_NETBIOS  NetbiosAddress;
  173. } TDI_ADDRESS_NETBIOS_EX, *PTDI_ADDRESS_NETBIOS_EX;
  174.  
  175. #define TDI_ADDRESS_LENGTH_NETBIOS_EX     sizeof(TDI_ADDRESS_NETBIOS_EX)
  176.  
  177. /* TDI_ADDRESS_NETONE.NetoneNameType constants */
  178. #define TDI_ADDRESS_NETONE_TYPE_UNIQUE    0x0000
  179. #define TDI_ADDRESS_NETONE_TYPE_ROTORED   0x0001
  180.  
  181. typedef struct _TDI_ADDRESS_NETONE {
  182.   USHORT  NetoneNameType;
  183.   UCHAR  NetoneName[20];
  184. } TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE;
  185.  
  186. #define TDI_ADDRESS_LENGTH_NETONE         sizeof(TDI_ADDRESS_NETONE)
  187.  
  188. typedef struct _TDI_ADDRESS_NS
  189. {
  190.     ULONG   NetworkAddress;
  191.     UCHAR   NodeAddress[6];
  192.     USHORT  Socket;
  193. } TDI_ADDRESS_NS, *PTDI_ADDRESS_NS;
  194.  
  195. #define TDI_ADDRESS_LENGTH_NS             sizeof(TDI_ADDRESS_NS)
  196.  
  197. #define ISO_MAX_ADDR_LENGTH               64
  198.  
  199. /* TDI_ADDRESS_OSI_TSAP.tp_addr_type constants */
  200. #define ISO_HIERARCHICAL                  0
  201. #define ISO_NON_HIERARCHICAL              1
  202.  
  203. typedef struct _TDI_ADDRESS_OSI_TSAP {
  204.   USHORT  tp_addr_type;
  205.   USHORT  tp_taddr_len;
  206.   USHORT  tp_tsel_len;
  207.   UCHAR  tp_addr[ISO_MAX_ADDR_LENGTH];
  208. } TDI_ADDRESS_OSI_TSAP, *PTDI_ADDRESS_OSI_TSAP;
  209.  
  210. #define TDI_ADDRESS_LENGTH_OSI_TSAP       sizeof(TDI_ADDRESS_OSI_TSAP)
  211.  
  212. typedef struct _TDI_ADDRESS_VNS {
  213.   UCHAR  net_address[4];
  214.   UCHAR  subnet_addr[2];
  215.   UCHAR  port[2];
  216.   UCHAR  hops;
  217.   UCHAR  filler[5];
  218. } TDI_ADDRESS_VNS, *PTDI_ADDRESS_VNS;
  219.  
  220. #define TDI_ADDRESS_LENGTH_VNS            sizeof(TDI_ADDRESS_VNS)
  221.  
  222. typedef struct _TDI_ADDRESS_IP6 {
  223.   USHORT  sin6_port;
  224.   ULONG  sin6_flowinfo;
  225.   USHORT  sin6_addr[8];
  226.   ULONG  sin6_scope_id;
  227. } TDI_ADDRESS_IP6, *PTDI_ADDRESS_IP6;
  228.  
  229. #define TDI_ADDRESS_LENGTH_IP6            sizeof(TDI_ADDRESS_IP6)
  230.  
  231. enum eNameBufferType {
  232.     NBT_READONLY = 0,
  233.     NBT_WRITEONLY,
  234.     NBT_READWRITE,
  235.     NBT_WRITTEN
  236. };
  237.  
  238. typedef struct _TDI_ADDRESS_NETBIOS_UNICODE_EX {
  239.   USHORT  NetbiosNameType;
  240.   enum eNameBufferType  NameBufferType;
  241.   UNICODE_STRING  EndpointName;
  242.   UNICODE_STRING  RemoteName;
  243.   WCHAR  EndpointBuffer[17];
  244.   WCHAR  RemoteNameBuffer[1];
  245. } TDI_ADDRESS_NETBIOS_UNICODE_EX, *PTDI_ADDRESS_NETBIOS_UNICODE_EX;
  246.  
  247.  
  248. typedef struct _TDI_CONNECT_REQUEST {
  249.     TDI_REQUEST  Request;
  250.     PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
  251.     PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
  252.     LARGE_INTEGER  Timeout;
  253. } TDI_REQUEST_CONNECT, *PTDI_REQUEST_CONNECT;
  254.  
  255. typedef struct _TDI_REQUEST_ACCEPT {
  256.   TDI_REQUEST  Request;
  257.   PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
  258.   PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
  259. } TDI_REQUEST_ACCEPT, *PTDI_REQUEST_ACCEPT;
  260.  
  261. typedef struct _TDI_REQUEST_LISTEN {
  262.   TDI_REQUEST  Request;
  263.   PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
  264.   PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
  265.   USHORT  ListenFlags;
  266. } TDI_REQUEST_LISTEN, *PTDI_REQUEST_LISTEN;
  267.  
  268. typedef struct _TDI_DISCONNECT_REQUEST {
  269.   TDI_REQUEST  Request;
  270.   LARGE_INTEGER  Timeout;
  271. } TDI_REQUEST_DISCONNECT, *PTDI_REQUEST_DISCONNECT;
  272.  
  273. typedef struct _TDI_REQUEST_SEND {
  274.   TDI_REQUEST  Request;
  275.   USHORT  SendFlags;
  276. } TDI_REQUEST_SEND, *PTDI_REQUEST_SEND;
  277.  
  278. typedef struct _TDI_REQUEST_RECEIVE {
  279.   TDI_REQUEST  Request;
  280.   USHORT  ReceiveFlags;
  281. } TDI_REQUEST_RECEIVE, *PTDI_REQUEST_RECEIVE;
  282.  
  283. typedef struct _TDI_REQUEST_SEND_DATAGRAM {
  284.   TDI_REQUEST  Request;
  285.   PTDI_CONNECTION_INFORMATION  SendDatagramInformation;
  286. } TDI_REQUEST_SEND_DATAGRAM, *PTDI_REQUEST_SEND_DATAGRAM;
  287.  
  288. typedef struct _TDI_REQUEST_RECEIVE_DATAGRAM {
  289.   TDI_REQUEST  Request;
  290.   PTDI_CONNECTION_INFORMATION  ReceiveDatagramInformation;
  291.   PTDI_CONNECTION_INFORMATION  ReturnInformation;
  292.   USHORT  ReceiveFlags;
  293. } TDI_REQUEST_RECEIVE_DATAGRAM, *PTDI_REQUEST_RECEIVE_DATAGRAM;
  294.  
  295. typedef struct _TDI_REQUEST_SET_EVENT {
  296.   TDI_REQUEST  Request;
  297.   LONG  EventType;
  298.   PVOID  EventHandler;
  299.   PVOID  EventContext;
  300. } TDI_REQUEST_SET_EVENT_HANDLER, *PTDI_REQUEST_SET_EVENT_HANDLER;
  301.  
  302. #define TDI_RECEIVE_BROADCAST             0x00000004
  303. #define TDI_RECEIVE_MULTICAST             0x00000008
  304. #define TDI_RECEIVE_PARTIAL               0x00000010
  305. #define TDI_RECEIVE_NORMAL                0x00000020
  306. #define TDI_RECEIVE_EXPEDITED             0x00000040
  307. #define TDI_RECEIVE_PEEK                  0x00000080
  308. #define TDI_RECEIVE_NO_RESPONSE_EXP       0x00000100
  309. #define TDI_RECEIVE_COPY_LOOKAHEAD        0x00000200
  310. #define TDI_RECEIVE_ENTIRE_MESSAGE        0x00000400
  311. #define TDI_RECEIVE_AT_DISPATCH_LEVEL     0x00000800
  312. #define TDI_RECEIVE_CONTROL_INFO          0x00001000
  313.  
  314. /* Listen flags */
  315. #define TDI_QUERY_ACCEPT                  0x00000001
  316.  
  317. /* Options used for both SendOptions and ReceiveIndicators */
  318. #define TDI_SEND_EXPEDITED                0x0020
  319. #define TDI_SEND_PARTIAL                  0x0040
  320. #define TDI_SEND_NO_RESPONSE_EXPECTED     0x0080
  321. #define TDI_SEND_NON_BLOCKING             0x0100
  322. #define TDI_SEND_AND_DISCONNECT           0x0200
  323.  
  324. /* Disconnect Flags */
  325. #define TDI_DISCONNECT_WAIT               0x0001
  326. #define TDI_DISCONNECT_ABORT              0x0002
  327. #define TDI_DISCONNECT_RELEASE            0x0004
  328.  
  329. /* TdiRequest structure for TdiQueryInformation request */
  330. typedef struct _TDI_REQUEST_QUERY_INFORMATION {
  331.   TDI_REQUEST  Request;
  332.   ULONG  QueryType;
  333.   PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
  334. } TDI_REQUEST_QUERY_INFORMATION, *PTDI_REQUEST_QUERY_INFORMATION;
  335.  
  336. /* TdiRequest structure for TdiSetInformation request */
  337. typedef struct _TDI_REQUEST_SET_INFORMATION {
  338.   TDI_REQUEST  Request;
  339.   ULONG  SetType;
  340.   PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
  341. } TDI_REQUEST_SET_INFORMATION, *PTDI_REQUEST_SET_INFORMATION;
  342.  
  343. typedef TDI_REQUEST_SET_INFORMATION  TDI_REQ_SET_INFORMATION, *PTDI_REQ_SET_INFORMATION;
  344.  
  345. typedef union _TDI_REQUEST_TYPE {
  346.   TDI_REQUEST_ACCEPT  TdiAccept;
  347.   TDI_REQUEST_CONNECT  TdiConnect;
  348.   TDI_REQUEST_DISCONNECT  TdiDisconnect;
  349.   TDI_REQUEST_LISTEN  TdiListen;
  350.   TDI_REQUEST_QUERY_INFORMATION  TdiQueryInformation;
  351.   TDI_REQUEST_RECEIVE  TdiReceive;
  352.   TDI_REQUEST_RECEIVE_DATAGRAM  TdiReceiveDatagram;
  353.   TDI_REQUEST_SEND  TdiSend;
  354.   TDI_REQUEST_SEND_DATAGRAM  TdiSendDatagram;
  355.   TDI_REQUEST_SET_EVENT_HANDLER  TdiSetEventHandler;
  356.   TDI_REQUEST_SET_INFORMATION   TdiSetInformation;
  357. } TDI_REQUEST_TYPE, *PTDI_REQUEST_TYPE;
  358.  
  359.  
  360. /* Query information types */
  361.  
  362. /* Generic query info types that must be supported by all transports */
  363. #define TDI_QUERY_BROADCAST_ADDRESS     0x00000001
  364. #define TDI_QUERY_PROVIDER_INFO         0x00000002
  365. #define TDI_QUERY_ADDRESS_INFO          0x00000003
  366. #define TDI_QUERY_CONNECTION_INFO       0x00000004
  367. #define TDI_QUERY_PROVIDER_STATISTICS   0x00000005
  368. #define TDI_QUERY_DATAGRAM_INFO         0x00000006
  369. #define TDI_QUERY_DATA_LINK_ADDRESS     0x00000007
  370. #define TDI_QUERY_NETWORK_ADDRESS       0x00000008
  371. #define TDI_QUERY_MAX_DATAGRAM_INFO     0x00000009
  372.  
  373. /* Netbios specific query information types */
  374. #define TDI_QUERY_ADAPTER_STATUS        0x00000100
  375. #define TDI_QUERY_SESSION_STATUS        0x00000200
  376. #define TDI_QUERY_FIND_NAME             0x00000300
  377.  
  378. typedef struct _TA_APPLETALK_ADDR {
  379.   LONG  TAAddressCount;
  380.   struct _AddrAtalk {
  381.     USHORT  AddressLength;
  382.     USHORT  AddressType;
  383.     TDI_ADDRESS_APPLETALK  Address[1];
  384.   } Address[1];
  385. } TA_APPLETALK_ADDRESS, *PTA_APPLETALK_ADDRESS;
  386.  
  387. typedef struct _TA_ADDRESS_IP {
  388.   LONG  TAAddressCount;
  389.   struct _AddrIp {
  390.     USHORT  AddressLength;
  391.     USHORT  AddressType;
  392.     TDI_ADDRESS_IP  Address[1];
  393.   } Address[1];
  394. } TA_ADDRESS_IP, *PTA_ADDRESS_IP;
  395.  
  396. typedef struct _TA_ADDRESS_IPX {
  397.   LONG  TAAddressCount;
  398.   struct _AddrIpx {
  399.     USHORT  AddressLength;
  400.     USHORT  AddressType;
  401.     TDI_ADDRESS_IPX  Address[1];
  402.   } Address[1];
  403. } TA_IPX_ADDRESS, *PTA_IPX_ADDRESS;
  404.  
  405. typedef struct _TA_NETBIOS_ADDRESS {
  406.   LONG  TAAddressCount;
  407.   struct _Addr{
  408.     USHORT  AddressLength;
  409.     USHORT  AddressType;
  410.     TDI_ADDRESS_NETBIOS  Address[1];
  411.   } Address[1];
  412. } TA_NETBIOS_ADDRESS, *PTA_NETBIOS_ADDRESS;
  413.  
  414. typedef struct _TA_ADDRESS_NS {
  415.   LONG  TAAddressCount;
  416.   struct  _AddrNs {
  417.     USHORT  AddressLength;
  418.     USHORT  AddressType;
  419.     TDI_ADDRESS_NS  Address[1];
  420.   } Address[1];
  421. } TA_NS_ADDRESS, *PTA_NS_ADDRESS;
  422.  
  423. typedef struct _TA_ADDRESS_VNS {
  424.   LONG  TAAddressCount;
  425.   struct  _AddrVns {
  426.     USHORT  AddressLength;
  427.     USHORT  AddressType;
  428.     TDI_ADDRESS_VNS  Address[1];
  429.   } Address[1];
  430. } TA_VNS_ADDRESS, *PTA_VNS_ADDRESS;
  431.  
  432. typedef struct _TA_ADDRESS_IP6 {
  433.   LONG  TAAddressCount;
  434.   struct _AddrIp6 {
  435.     USHORT  AddressLength;
  436.     USHORT  AddressType;
  437.     TDI_ADDRESS_IP6  Address[1];
  438.   } Address [1];
  439. } TA_IP6_ADDRESS, *PTA_IP6_ADDRESS;
  440.  
  441. typedef struct _TA_ADDRESS_NETBIOS_UNICODE_EX {
  442.   LONG  TAAddressCount;
  443.   struct _AddrNetbiosWCharEx {
  444.     USHORT  AddressLength;
  445.     USHORT  AddressType;
  446.     TDI_ADDRESS_NETBIOS_UNICODE_EX  Address[1];
  447.   } Address [1];
  448. } TA_NETBIOS_UNICODE_EX_ADDRESS, *PTA_NETBIOS_UNICODE_EX_ADDRESS;
  449.  
  450.  
  451. /* Structures used for TdiQueryInformation and TdiSetInformation */
  452.  
  453. typedef struct _TDI_ENDPOINT_INFO {
  454.   ULONG  State;
  455.   ULONG  Event;
  456.   ULONG  TransmittedTsdus;
  457.   ULONG  ReceivedTsdus;
  458.   ULONG  TransmissionErrors;
  459.   ULONG  ReceiveErrors;
  460.   ULONG  MinimumLookaheadData;
  461.   ULONG  MaximumLookaheadData;
  462.   ULONG  PriorityLevel;
  463.   ULONG  SecurityLevel;
  464.   ULONG  SecurityCompartment;
  465. } TDI_ENDPOINT_INFO, *PTDI_ENDPOINT_INFO;
  466.  
  467. typedef struct _TDI_CONNECTION_INFO {
  468.   ULONG  State;
  469.   ULONG  Event; 
  470.   ULONG  TransmittedTsdus;
  471.   ULONG  ReceivedTsdus;
  472.   ULONG  TransmissionErrors;
  473.   ULONG  ReceiveErrors;
  474.   LARGE_INTEGER  Throughput;
  475.   LARGE_INTEGER  Delay;
  476.   ULONG  SendBufferSize;
  477.   ULONG  ReceiveBufferSize;
  478.   BOOLEAN  Unreliable;
  479. } TDI_CONNECTION_INFO, *PTDI_CONNECTION_INFO;
  480.  
  481. typedef struct _TDI_DATAGRAM_INFO {
  482.   ULONG  MaximumDatagramBytes;
  483.   ULONG  MaximumDatagramCount;
  484. } TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO;
  485.  
  486. typedef struct _TDI_MAX_DATAGRAM_INFO {
  487.   ULONG  MaxDatagramSize;
  488. } TDI_MAX_DATAGRAM_INFO, *PTDI_MAX_DATAGRAM_INFO;
  489.  
  490. typedef struct _TDI_PROVIDER_INFO {
  491.   ULONG  Version;
  492.   ULONG  MaxSendSize;
  493.   ULONG  MaxConnectionUserData;
  494.   ULONG  MaxDatagramSize;
  495.   ULONG  ServiceFlags;
  496.   ULONG  MinimumLookaheadData;
  497.   ULONG  MaximumLookaheadData;
  498.   ULONG  NumberOfResources;
  499.   LARGE_INTEGER  StartTime;
  500. } TDI_PROVIDER_INFO, *PTDI_PROVIDER_INFO;
  501.  
  502. #define TDI_SERVICE_CONNECTION_MODE     0x00000001
  503. #define TDI_SERVICE_ORDERLY_RELEASE     0x00000002
  504. #define TDI_SERVICE_CONNECTIONLESS_MODE 0x00000004
  505. #define TDI_SERVICE_ERROR_FREE_DELIVERY 0x00000008
  506. #define TDI_SERVICE_SECURITY_LEVEL      0x00000010
  507. #define TDI_SERVICE_BROADCAST_SUPPORTED 0x00000020
  508. #define TDI_SERVICE_MULTICAST_SUPPORTED 0x00000040
  509. #define TDI_SERVICE_DELAYED_ACCEPTANCE  0x00000080
  510. #define TDI_SERVICE_EXPEDITED_DATA      0x00000100
  511. #define TDI_SERVICE_INTERNAL_BUFFERING  0x00000200
  512. #define TDI_SERVICE_ROUTE_DIRECTED      0x00000400
  513. #define TDI_SERVICE_NO_ZERO_LENGTH      0x00000800
  514. #define TDI_SERVICE_POINT_TO_POINT      0x00001000
  515. #define TDI_SERVICE_MESSAGE_MODE        0x00002000
  516. #define TDI_SERVICE_HALF_DUPLEX         0x00004000
  517. #define TDI_SERVICE_DGRAM_CONNECTION    0x00008000
  518. #define TDI_SERVICE_FORCE_ACCESS_CHECK  0x00010000
  519. #define TDI_SERVICE_SEND_AND_DISCONNECT 0x00020000
  520. #define TDI_SERVICE_DIRECT_ACCEPT       0x00040000
  521. #define TDI_SERVICE_ACCEPT_LOCAL_ADDR   0x00080000
  522.  
  523. typedef struct _TDI_PROVIDER_RESOURCE_STATS {
  524.   ULONG  ResourceId;
  525.   ULONG  MaximumResourceUsed;
  526.   ULONG  AverageResourceUsed;
  527.   ULONG  ResourceExhausted;
  528. } TDI_PROVIDER_RESOURCE_STATS, *PTDI_PROVIDER_RESOURCE_STATS;
  529.  
  530. typedef struct _TDI_PROVIDER_STATISTICS {
  531.   ULONG  Version;
  532.   ULONG  OpenConnections;
  533.   ULONG  ConnectionsAfterNoRetry;
  534.   ULONG  ConnectionsAfterRetry;
  535.   ULONG  LocalDisconnects;
  536.   ULONG  RemoteDisconnects;
  537.   ULONG  LinkFailures;
  538.   ULONG  AdapterFailures;
  539.   ULONG  SessionTimeouts;
  540.   ULONG  CancelledConnections;
  541.   ULONG  RemoteResourceFailures;
  542.   ULONG  LocalResourceFailures;
  543.   ULONG  NotFoundFailures;
  544.   ULONG  NoListenFailures;
  545.   ULONG  DatagramsSent;
  546.   LARGE_INTEGER  DatagramBytesSent;
  547.   ULONG  DatagramsReceived;
  548.   LARGE_INTEGER  DatagramBytesReceived;
  549.   ULONG  PacketsSent;
  550.   ULONG  PacketsReceived;
  551.   ULONG  DataFramesSent;
  552.   LARGE_INTEGER  DataFrameBytesSent;
  553.   ULONG  DataFramesReceived;
  554.   LARGE_INTEGER  DataFrameBytesReceived;
  555.   ULONG  DataFramesResent;
  556.   LARGE_INTEGER  DataFrameBytesResent;
  557.   ULONG  DataFramesRejected;
  558.   LARGE_INTEGER  DataFrameBytesRejected;
  559.   ULONG  ResponseTimerExpirations;
  560.   ULONG  AckTimerExpirations;
  561.   ULONG  MaximumSendWindow;
  562.   ULONG  AverageSendWindow;
  563.   ULONG  PiggybackAckQueued;
  564.   ULONG  PiggybackAckTimeouts;
  565.   LARGE_INTEGER  WastedPacketSpace;
  566.   ULONG  WastedSpacePackets;
  567.   ULONG  NumberOfResources;
  568.   TDI_PROVIDER_RESOURCE_STATS  ResourceStats[1];
  569. } TDI_PROVIDER_STATISTICS, *PTDI_PROVIDER_STATISTICS;
  570.  
  571. #define TDI_EVENT_CONNECT                 0
  572. #define TDI_EVENT_DISCONNECT              1
  573. #define TDI_EVENT_ERROR                   2
  574. #define TDI_EVENT_RECEIVE                 3
  575. #define TDI_EVENT_RECEIVE_DATAGRAM        4
  576. #define TDI_EVENT_RECEIVE_EXPEDITED       5
  577. #define TDI_EVENT_SEND_POSSIBLE           6
  578.  
  579. typedef struct _TDI_REQUEST_ASSOCIATE {
  580.   TDI_REQUEST  Request;
  581.   HANDLE  AddressHandle;
  582. } TDI_REQUEST_ASSOCIATE_ADDRESS, *PTDI_REQUEST_ASSOCIATE_ADDRESS;
  583.  
  584. #define NDIS_PACKET_POOL_TAG_FOR_NWLNKIPX   'iPDN'
  585. #define NDIS_PACKET_POOL_TAG_FOR_NWLNKSPX   'sPDN'
  586. #define NDIS_PACKET_POOL_TAG_FOR_NWLNKNB    'nPDN'
  587. #define NDIS_PACKET_POOL_TAG_FOR_TCPIP      'tPDN'
  588. #define NDIS_PACKET_POOL_TAG_FOR_NBF        'bPDN'
  589. #define NDIS_PACKET_POOL_TAG_FOR_APPLETALK  'aPDN'
  590.  
  591. #pragma pack(pop)
  592.  
  593. #ifdef __cplusplus
  594. }
  595. #endif
  596.  
  597. #endif /* __TDI_H */
  598.