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#include "ntddtdi.h"
 27#include "tdistat.h"
 28#include "netpnp.h"
 29
 30#ifdef __cplusplus
 31extern "C" {
 32#endif
 33
 34/* Basic types */
 35
 36typedef LONG TDI_STATUS;
 37typedef PVOID CONNECTION_CONTEXT;
 38
 39typedef 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
 48typedef 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
 59typedef struct _TDI_REQUEST_STATUS {
 60  TDI_STATUS  Status;
 61  PVOID  RequestContext;
 62  ULONG  BytesTransferred;
 63} TDI_REQUEST_STATUS, *PTDI_REQUEST_STATUS;
 64
 65typedef 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
 72typedef 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
 78typedef 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
 85typedef struct _TDI_DISCONNECT_REQUEST {
 86  TDI_REQUEST  Request;
 87  LARGE_INTEGER  Timeout;
 88} TDI_REQUEST_DISCONNECT, *PTDI_REQUEST_DISCONNECT;
 89
 90typedef struct _TDI_REQUEST_SEND {
 91  TDI_REQUEST  Request;
 92  USHORT  SendFlags;
 93} TDI_REQUEST_SEND, *PTDI_REQUEST_SEND;
 94
 95typedef struct _TDI_REQUEST_RECEIVE {
 96  TDI_REQUEST  Request;
 97  USHORT  ReceiveFlags;
 98} TDI_REQUEST_RECEIVE, *PTDI_REQUEST_RECEIVE;
 99
100typedef struct _TDI_REQUEST_SEND_DATAGRAM {
101  TDI_REQUEST  Request;
102  PTDI_CONNECTION_INFORMATION  SendDatagramInformation;
103} TDI_REQUEST_SEND_DATAGRAM, *PTDI_REQUEST_SEND_DATAGRAM;
104
105typedef 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
112typedef 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 */
147typedef 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 */
154typedef 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
160typedef TDI_REQUEST_SET_INFORMATION  TDI_REQ_SET_INFORMATION, *PTDI_REQ_SET_INFORMATION;
161
162typedef 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
196typedef 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
210typedef 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
224typedef struct _TDI_DATAGRAM_INFO {
225  ULONG  MaximumDatagramBytes;
226  ULONG  MaximumDatagramCount;
227} TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO;
228
229typedef struct _TDI_MAX_DATAGRAM_INFO {
230  ULONG  MaxDatagramSize;
231} TDI_MAX_DATAGRAM_INFO, *PTDI_MAX_DATAGRAM_INFO;
232
233typedef 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
266typedef 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
273typedef 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
322typedef 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
334typedef 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
372typedef struct _TRANSPORT_ADDRESS {
373  LONG  TAAddressCount;
374  TA_ADDRESS  Address[1];
375} TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS;
376
377typedef struct _TDI_ACTION_HEADER {
378  ULONG  TransportId;
379  USHORT  ActionCode;
380  USHORT  Reserved;
381} TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;
382
383typedef struct _TDI_ADDRESS_INFO {
384  ULONG  ActivityCount;
385  TRANSPORT_ADDRESS  Address;
386} TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;
387
388#include "pshpack1.h"
389
390typedef 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
396typedef 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
404typedef 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
412typedef 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
426typedef 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
433typedef 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
444typedef 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
451typedef 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
466typedef 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
475typedef 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
485typedef 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
494enum eNameBufferType {
495	NBT_READONLY = 0,
496	NBT_WRITEONLY,
497	NBT_READWRITE,
498	NBT_WRITTEN
499};
500
501typedef 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
510typedef 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
519typedef 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
528typedef 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
537typedef 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
546typedef 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
555typedef 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
564typedef 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
573typedef 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 */