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