Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers tdi.h Source File

tdi.h

00001 /*
00002  * tdi.h
00003  *
00004  * TDI user mode definitions
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __TDI_H
00024 #define __TDI_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 #include "ntddtdi.h"
00036 #include "tdistat.h"
00037 #include "netpnp.h"
00038 
00039 /* Basic types */
00040 
00041 typedef LONG TDI_STATUS;
00042 typedef PVOID CONNECTION_CONTEXT;
00043 
00044 typedef struct _TDI_CONNECTION_INFORMATION {
00045   LONG  UserDataLength;
00046   PVOID  UserData;
00047   LONG  OptionsLength;
00048   PVOID  Options;
00049   LONG  RemoteAddressLength;
00050   PVOID  RemoteAddress;
00051 } TDI_CONNECTION_INFORMATION, *PTDI_CONNECTION_INFORMATION;
00052 
00053 typedef struct _TDI_REQUEST {
00054   union {
00055     HANDLE  AddressHandle;
00056     CONNECTION_CONTEXT  ConnectionContext;
00057     HANDLE  ControlChannel;
00058   } Handle;
00059   PVOID  RequestNotifyObject;
00060   PVOID  RequestContext;
00061   TDI_STATUS  TdiStatus;
00062 } TDI_REQUEST, *PTDI_REQUEST;
00063 
00064 typedef struct _TDI_REQUEST_STATUS {
00065   TDI_STATUS  Status;
00066   PVOID  RequestContext;
00067   ULONG  BytesTransferred;
00068 } TDI_REQUEST_STATUS, *PTDI_REQUEST_STATUS;
00069 
00070 typedef struct _TDI_CONNECT_REQUEST {
00071     TDI_REQUEST  Request;
00072     PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
00073     PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
00074     LARGE_INTEGER  Timeout;
00075 } TDI_REQUEST_CONNECT, *PTDI_REQUEST_CONNECT;
00076 
00077 typedef struct _TDI_REQUEST_ACCEPT {
00078   TDI_REQUEST  Request;
00079   PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
00080   PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
00081 } TDI_REQUEST_ACCEPT, *PTDI_REQUEST_ACCEPT;
00082 
00083 typedef struct _TDI_REQUEST_LISTEN {
00084   TDI_REQUEST  Request;
00085   PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
00086   PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
00087   USHORT  ListenFlags;
00088 } TDI_REQUEST_LISTEN, *PTDI_REQUEST_LISTEN;
00089 
00090 typedef struct _TDI_DISCONNECT_REQUEST {
00091   TDI_REQUEST  Request;
00092   LARGE_INTEGER  Timeout;
00093 } TDI_REQUEST_DISCONNECT, *PTDI_REQUEST_DISCONNECT;
00094 
00095 typedef struct _TDI_REQUEST_SEND {
00096   TDI_REQUEST  Request;
00097   USHORT  SendFlags;
00098 } TDI_REQUEST_SEND, *PTDI_REQUEST_SEND;
00099 
00100 typedef struct _TDI_REQUEST_RECEIVE {
00101   TDI_REQUEST  Request;
00102   USHORT  ReceiveFlags;
00103 } TDI_REQUEST_RECEIVE, *PTDI_REQUEST_RECEIVE;
00104 
00105 typedef struct _TDI_REQUEST_SEND_DATAGRAM {
00106   TDI_REQUEST  Request;
00107   PTDI_CONNECTION_INFORMATION  SendDatagramInformation;
00108 } TDI_REQUEST_SEND_DATAGRAM, *PTDI_REQUEST_SEND_DATAGRAM;
00109 
00110 typedef struct _TDI_REQUEST_RECEIVE_DATAGRAM {
00111   TDI_REQUEST  Request;
00112   PTDI_CONNECTION_INFORMATION  ReceiveDatagramInformation;
00113   PTDI_CONNECTION_INFORMATION  ReturnInformation;
00114   USHORT  ReceiveFlags;
00115 } TDI_REQUEST_RECEIVE_DATAGRAM, *PTDI_REQUEST_RECEIVE_DATAGRAM;
00116 
00117 typedef struct _TDI_REQUEST_SET_EVENT {
00118   TDI_REQUEST  Request;
00119   LONG  EventType;
00120   PVOID  EventHandler;
00121   PVOID  EventContext;
00122 } TDI_REQUEST_SET_EVENT_HANDLER, *PTDI_REQUEST_SET_EVENT_HANDLER;
00123 
00124 #define TDI_RECEIVE_BROADCAST             0x00000004
00125 #define TDI_RECEIVE_MULTICAST             0x00000008
00126 #define TDI_RECEIVE_PARTIAL               0x00000010
00127 #define TDI_RECEIVE_NORMAL                0x00000020
00128 #define TDI_RECEIVE_EXPEDITED             0x00000040
00129 #define TDI_RECEIVE_PEEK                  0x00000080
00130 #define TDI_RECEIVE_NO_RESPONSE_EXP       0x00000100
00131 #define TDI_RECEIVE_COPY_LOOKAHEAD        0x00000200
00132 #define TDI_RECEIVE_ENTIRE_MESSAGE        0x00000400
00133 #define TDI_RECEIVE_AT_DISPATCH_LEVEL     0x00000800
00134 #define TDI_RECEIVE_CONTROL_INFO          0x00001000
00135 
00136 /* Listen flags */
00137 #define TDI_QUERY_ACCEPT                  0x00000001
00138 
00139 /* Options used for both SendOptions and ReceiveIndicators */
00140 #define TDI_SEND_EXPEDITED                0x0020
00141 #define TDI_SEND_PARTIAL                  0x0040
00142 #define TDI_SEND_NO_RESPONSE_EXPECTED     0x0080
00143 #define TDI_SEND_NON_BLOCKING             0x0100
00144 #define TDI_SEND_AND_DISCONNECT           0x0200
00145 
00146 /* Disconnect Flags */
00147 #define TDI_DISCONNECT_WAIT               0x0001
00148 #define TDI_DISCONNECT_ABORT              0x0002
00149 #define TDI_DISCONNECT_RELEASE            0x0004
00150 
00151 /* TdiRequest structure for TdiQueryInformation request */
00152 typedef struct _TDI_REQUEST_QUERY_INFORMATION {
00153   TDI_REQUEST  Request;
00154   ULONG  QueryType;
00155   PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
00156 } TDI_REQUEST_QUERY_INFORMATION, *PTDI_REQUEST_QUERY_INFORMATION;
00157 
00158 /* TdiRequest structure for TdiSetInformation request */
00159 typedef struct _TDI_REQUEST_SET_INFORMATION {
00160   TDI_REQUEST  Request;
00161   ULONG  SetType;
00162   PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
00163 } TDI_REQUEST_SET_INFORMATION, *PTDI_REQUEST_SET_INFORMATION;
00164 
00165 typedef TDI_REQUEST_SET_INFORMATION  TDI_REQ_SET_INFORMATION, *PTDI_REQ_SET_INFORMATION;
00166 
00167 typedef union _TDI_REQUEST_TYPE {
00168   TDI_REQUEST_ACCEPT  TdiAccept;
00169   TDI_REQUEST_CONNECT  TdiConnect;
00170   TDI_REQUEST_DISCONNECT  TdiDisconnect;
00171   TDI_REQUEST_LISTEN  TdiListen;
00172   TDI_REQUEST_QUERY_INFORMATION  TdiQueryInformation;
00173   TDI_REQUEST_RECEIVE  TdiReceive;
00174   TDI_REQUEST_RECEIVE_DATAGRAM  TdiReceiveDatagram;
00175   TDI_REQUEST_SEND  TdiSend;
00176   TDI_REQUEST_SEND_DATAGRAM  TdiSendDatagram;
00177   TDI_REQUEST_SET_EVENT_HANDLER  TdiSetEventHandler;
00178   TDI_REQUEST_SET_INFORMATION   TdiSetInformation;
00179 } TDI_REQUEST_TYPE, *PTDI_REQUEST_TYPE;
00180 
00181 /* Query information types */
00182 
00183 /* Generic query info types that must be supported by all transports */
00184 #define TDI_QUERY_BROADCAST_ADDRESS     0x00000001
00185 #define TDI_QUERY_PROVIDER_INFO         0x00000002
00186 #define TDI_QUERY_ADDRESS_INFO          0x00000003
00187 #define TDI_QUERY_CONNECTION_INFO       0x00000004
00188 #define TDI_QUERY_PROVIDER_STATISTICS   0x00000005
00189 #define TDI_QUERY_DATAGRAM_INFO         0x00000006
00190 #define TDI_QUERY_DATA_LINK_ADDRESS     0x00000007
00191 #define TDI_QUERY_NETWORK_ADDRESS       0x00000008
00192 #define TDI_QUERY_MAX_DATAGRAM_INFO     0x00000009
00193 
00194 /* Netbios specific query information types */
00195 #define TDI_QUERY_ADAPTER_STATUS        0x00000100
00196 #define TDI_QUERY_SESSION_STATUS        0x00000200
00197 #define TDI_QUERY_FIND_NAME             0x00000300
00198 
00199 /* Structures used for TdiQueryInformation and TdiSetInformation */
00200 
00201 typedef struct _TDI_ENDPOINT_INFO {
00202   ULONG  State;
00203   ULONG  Event;
00204   ULONG  TransmittedTsdus;
00205   ULONG  ReceivedTsdus;
00206   ULONG  TransmissionErrors;
00207   ULONG  ReceiveErrors;
00208   ULONG  MinimumLookaheadData;
00209   ULONG  MaximumLookaheadData;
00210   ULONG  PriorityLevel;
00211   ULONG  SecurityLevel;
00212   ULONG  SecurityCompartment;
00213 } TDI_ENDPOINT_INFO, *PTDI_ENDPOINT_INFO;
00214 
00215 typedef struct _TDI_CONNECTION_INFO {
00216   ULONG  State;
00217   ULONG  Event; 
00218   ULONG  TransmittedTsdus;
00219   ULONG  ReceivedTsdus;
00220   ULONG  TransmissionErrors;
00221   ULONG  ReceiveErrors;
00222   LARGE_INTEGER  Throughput;
00223   LARGE_INTEGER  Delay;
00224   ULONG  SendBufferSize;
00225   ULONG  ReceiveBufferSize;
00226   BOOLEAN  Unreliable;
00227 } TDI_CONNECTION_INFO, *PTDI_CONNECTION_INFO;
00228 
00229 typedef struct _TDI_DATAGRAM_INFO {
00230   ULONG  MaximumDatagramBytes;
00231   ULONG  MaximumDatagramCount;
00232 } TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO;
00233 
00234 typedef struct _TDI_MAX_DATAGRAM_INFO {
00235   ULONG  MaxDatagramSize;
00236 } TDI_MAX_DATAGRAM_INFO, *PTDI_MAX_DATAGRAM_INFO;
00237 
00238 typedef struct _TDI_PROVIDER_INFO {
00239   ULONG  Version;
00240   ULONG  MaxSendSize;
00241   ULONG  MaxConnectionUserData;
00242   ULONG  MaxDatagramSize;
00243   ULONG  ServiceFlags;
00244   ULONG  MinimumLookaheadData;
00245   ULONG  MaximumLookaheadData;
00246   ULONG  NumberOfResources;
00247   LARGE_INTEGER  StartTime;
00248 } TDI_PROVIDER_INFO, *PTDI_PROVIDER_INFO;
00249 
00250 #define TDI_SERVICE_CONNECTION_MODE     0x00000001
00251 #define TDI_SERVICE_ORDERLY_RELEASE     0x00000002
00252 #define TDI_SERVICE_CONNECTIONLESS_MODE 0x00000004
00253 #define TDI_SERVICE_ERROR_FREE_DELIVERY 0x00000008
00254 #define TDI_SERVICE_SECURITY_LEVEL      0x00000010
00255 #define TDI_SERVICE_BROADCAST_SUPPORTED 0x00000020
00256 #define TDI_SERVICE_MULTICAST_SUPPORTED 0x00000040
00257 #define TDI_SERVICE_DELAYED_ACCEPTANCE  0x00000080
00258 #define TDI_SERVICE_EXPEDITED_DATA      0x00000100
00259 #define TDI_SERVICE_INTERNAL_BUFFERING  0x00000200
00260 #define TDI_SERVICE_ROUTE_DIRECTED      0x00000400
00261 #define TDI_SERVICE_NO_ZERO_LENGTH      0x00000800
00262 #define TDI_SERVICE_POINT_TO_POINT      0x00001000
00263 #define TDI_SERVICE_MESSAGE_MODE        0x00002000
00264 #define TDI_SERVICE_HALF_DUPLEX         0x00004000
00265 #define TDI_SERVICE_DGRAM_CONNECTION    0x00008000
00266 #define TDI_SERVICE_FORCE_ACCESS_CHECK  0x00010000
00267 #define TDI_SERVICE_SEND_AND_DISCONNECT 0x00020000
00268 #define TDI_SERVICE_DIRECT_ACCEPT       0x00040000
00269 #define TDI_SERVICE_ACCEPT_LOCAL_ADDR   0x00080000
00270 
00271 typedef struct _TDI_PROVIDER_RESOURCE_STATS {
00272   ULONG  ResourceId;
00273   ULONG  MaximumResourceUsed;
00274   ULONG  AverageResourceUsed;
00275   ULONG  ResourceExhausted;
00276 } TDI_PROVIDER_RESOURCE_STATS, *PTDI_PROVIDER_RESOURCE_STATS;
00277 
00278 typedef struct _TDI_PROVIDER_STATISTICS {
00279   ULONG  Version;
00280   ULONG  OpenConnections;
00281   ULONG  ConnectionsAfterNoRetry;
00282   ULONG  ConnectionsAfterRetry;
00283   ULONG  LocalDisconnects;
00284   ULONG  RemoteDisconnects;
00285   ULONG  LinkFailures;
00286   ULONG  AdapterFailures;
00287   ULONG  SessionTimeouts;
00288   ULONG  CancelledConnections;
00289   ULONG  RemoteResourceFailures;
00290   ULONG  LocalResourceFailures;
00291   ULONG  NotFoundFailures;
00292   ULONG  NoListenFailures;
00293   ULONG  DatagramsSent;
00294   LARGE_INTEGER  DatagramBytesSent;
00295   ULONG  DatagramsReceived;
00296   LARGE_INTEGER  DatagramBytesReceived;
00297   ULONG  PacketsSent;
00298   ULONG  PacketsReceived;
00299   ULONG  DataFramesSent;
00300   LARGE_INTEGER  DataFrameBytesSent;
00301   ULONG  DataFramesReceived;
00302   LARGE_INTEGER  DataFrameBytesReceived;
00303   ULONG  DataFramesResent;
00304   LARGE_INTEGER  DataFrameBytesResent;
00305   ULONG  DataFramesRejected;
00306   LARGE_INTEGER  DataFrameBytesRejected;
00307   ULONG  ResponseTimerExpirations;
00308   ULONG  AckTimerExpirations;
00309   ULONG  MaximumSendWindow;
00310   ULONG  AverageSendWindow;
00311   ULONG  PiggybackAckQueued;
00312   ULONG  PiggybackAckTimeouts;
00313   LARGE_INTEGER  WastedPacketSpace;
00314   ULONG  WastedSpacePackets;
00315   ULONG  NumberOfResources;
00316   TDI_PROVIDER_RESOURCE_STATS  ResourceStats[1];
00317 } TDI_PROVIDER_STATISTICS, *PTDI_PROVIDER_STATISTICS;
00318 
00319 #define TDI_EVENT_CONNECT                 0
00320 #define TDI_EVENT_DISCONNECT              1
00321 #define TDI_EVENT_ERROR                   2
00322 #define TDI_EVENT_RECEIVE                 3
00323 #define TDI_EVENT_RECEIVE_DATAGRAM        4
00324 #define TDI_EVENT_RECEIVE_EXPEDITED       5
00325 #define TDI_EVENT_SEND_POSSIBLE           6
00326 
00327 typedef struct _TDI_REQUEST_ASSOCIATE {
00328   TDI_REQUEST  Request;
00329   HANDLE  AddressHandle;
00330 } TDI_REQUEST_ASSOCIATE_ADDRESS, *PTDI_REQUEST_ASSOCIATE_ADDRESS;
00331 
00332 #define NDIS_PACKET_POOL_TAG_FOR_NWLNKIPX   'iPDN'
00333 #define NDIS_PACKET_POOL_TAG_FOR_NWLNKSPX   'sPDN'
00334 #define NDIS_PACKET_POOL_TAG_FOR_NWLNKNB    'nPDN'
00335 #define NDIS_PACKET_POOL_TAG_FOR_TCPIP      'tPDN'
00336 #define NDIS_PACKET_POOL_TAG_FOR_NBF        'bPDN'
00337 #define NDIS_PACKET_POOL_TAG_FOR_APPLETALK  'aPDN'
00338 
00339 typedef struct _TA_ADDRESS {
00340   USHORT  AddressLength;
00341   USHORT  AddressType;
00342   UCHAR  Address[1];
00343 } TA_ADDRESS, *PTA_ADDRESS;
00344 
00345 #define TDI_ADDRESS_TYPE_UNSPEC             0
00346 #define TDI_ADDRESS_TYPE_UNIX               1
00347 #define TDI_ADDRESS_TYPE_IP                 2
00348 #define TDI_ADDRESS_TYPE_IMPLINK            3
00349 #define TDI_ADDRESS_TYPE_PUP                4
00350 #define TDI_ADDRESS_TYPE_CHAOS              5
00351 #define TDI_ADDRESS_TYPE_NS                 6
00352 #define TDI_ADDRESS_TYPE_IPX                6
00353 #define TDI_ADDRESS_TYPE_NBS                7
00354 #define TDI_ADDRESS_TYPE_ECMA               8
00355 #define TDI_ADDRESS_TYPE_DATAKIT            9
00356 #define TDI_ADDRESS_TYPE_CCITT              10
00357 #define TDI_ADDRESS_TYPE_SNA                11
00358 #define TDI_ADDRESS_TYPE_DECnet             12
00359 #define TDI_ADDRESS_TYPE_DLI                13
00360 #define TDI_ADDRESS_TYPE_LAT                14
00361 #define TDI_ADDRESS_TYPE_HYLINK             15
00362 #define TDI_ADDRESS_TYPE_APPLETALK          16
00363 #define TDI_ADDRESS_TYPE_NETBIOS            17
00364 #define TDI_ADDRESS_TYPE_8022               18
00365 #define TDI_ADDRESS_TYPE_OSI_TSAP           19
00366 #define TDI_ADDRESS_TYPE_NETONE             20
00367 #define TDI_ADDRESS_TYPE_VNS                21
00368 #define TDI_ADDRESS_TYPE_NETBIOS_EX         22
00369 #define TDI_ADDRESS_TYPE_IP6                23
00370 #define TDI_ADDRESS_TYPE_NETBIOS_UNICODE_EX 24
00371 
00372 #define TdiTransportAddress               "TransportAddress"
00373 #define TdiConnectionContext              "ConnectionContext"
00374 #define TDI_TRANSPORT_ADDRESS_LENGTH      (sizeof(TdiTransportAddress) - 1)
00375 #define TDI_CONNECTION_CONTEXT_LENGTH     (sizeof(TdiConnectionContext) - 1)
00376 
00377 typedef struct _TRANSPORT_ADDRESS {
00378   LONG  TAAddressCount;
00379   TA_ADDRESS  Address[1];
00380 } TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS;
00381 
00382 typedef struct _TDI_ACTION_HEADER {
00383   ULONG  TransportId;
00384   USHORT  ActionCode;
00385   USHORT  Reserved;
00386 } TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;
00387 
00388 typedef struct _TDI_ADDRESS_INFO {
00389   ULONG  ActivityCount;
00390   TRANSPORT_ADDRESS  Address;
00391 } TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;
00392 
00393 #include "pshpack1.h"
00394 
00395 typedef struct _TDI_ADDRESS_8022 {
00396   UCHAR  MACAddress[6];
00397 } TDI_ADDRESS_8022, *PTDI_ADDRESS_8022;
00398 
00399 #define TDI_ADDRESS_LENGTH_8022           sizeof(TDI_ADDRESS_8022);
00400 
00401 typedef struct _TDI_ADDRESS_APPLETALK {
00402   USHORT  Network;
00403   UCHAR  Node;
00404   UCHAR  Socket;
00405 } TDI_ADDRESS_APPLETALK, *PTDI_ADDRESS_APPLETALK;
00406 
00407 #define TDI_ADDRESS_LENGTH_APPLETALK      sizeof(TDI_ADDRESS_APPLETALK)
00408 
00409 typedef struct _TDI_ADDRESS_IP {
00410   USHORT  sin_port;
00411   ULONG  in_addr;
00412   UCHAR  sin_zero[8];
00413 } TDI_ADDRESS_IP, *PTDI_ADDRESS_IP;
00414 
00415 #define TDI_ADDRESS_LENGTH_IP             sizeof(TDI_ADDRESS_IP)
00416 
00417 typedef struct _TDI_ADDRESS_IPX {
00418   ULONG  NetworkAddress;
00419   UCHAR  NodeAddress[6];
00420   USHORT  Socket;
00421 } TDI_ADDRESS_IPX, *PTDI_ADDRESS_IPX;
00422 
00423 #define TDI_ADDRESS_LENGTH_IPX            sizeof(TDI_ADDRESS_IPX)
00424 
00425 /* TDI_ADDRESS_NETBIOS.NetbiosNameType constants */
00426 #define TDI_ADDRESS_NETBIOS_TYPE_UNIQUE       0x0000
00427 #define TDI_ADDRESS_NETBIOS_TYPE_GROUP        0x0001
00428 #define TDI_ADDRESS_NETBIOS_TYPE_QUICK_UNIQUE 0x0002
00429 #define TDI_ADDRESS_NETBIOS_TYPE_QUICK_GROUP  0x0003
00430 
00431 typedef struct _TDI_ADDRESS_NETBIOS {
00432   USHORT  NetbiosNameType;
00433   UCHAR  NetbiosName[16];
00434 } TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS;
00435 
00436 #define TDI_ADDRESS_LENGTH_NETBIOS        sizeof(TDI_ADDRESS_NETBIOS)
00437 
00438 typedef struct _TDI_ADDRESS_NETBIOS_EX {
00439   UCHAR  EndpointName[16];
00440   TDI_ADDRESS_NETBIOS  NetbiosAddress;
00441 } TDI_ADDRESS_NETBIOS_EX, *PTDI_ADDRESS_NETBIOS_EX;
00442 
00443 #define TDI_ADDRESS_LENGTH_NETBIOS_EX     sizeof(TDI_ADDRESS_NETBIOS_EX)
00444 
00445 /* TDI_ADDRESS_NETONE.NetoneNameType constants */
00446 #define TDI_ADDRESS_NETONE_TYPE_UNIQUE    0x0000
00447 #define TDI_ADDRESS_NETONE_TYPE_ROTORED   0x0001
00448 
00449 typedef struct _TDI_ADDRESS_NETONE {
00450   USHORT  NetoneNameType;
00451   UCHAR  NetoneName[20];
00452 } TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE;
00453 
00454 #define TDI_ADDRESS_LENGTH_NETONE         sizeof(TDI_ADDRESS_NETONE)
00455 
00456 typedef struct _TDI_ADDRESS_NS
00457 {
00458     ULONG   NetworkAddress;
00459     UCHAR   NodeAddress[6];
00460     USHORT  Socket;
00461 } TDI_ADDRESS_NS, *PTDI_ADDRESS_NS;
00462 
00463 #define TDI_ADDRESS_LENGTH_NS             sizeof(TDI_ADDRESS_NS)
00464 
00465 #define ISO_MAX_ADDR_LENGTH               64
00466 
00467 /* TDI_ADDRESS_OSI_TSAP.tp_addr_type constants */
00468 #define ISO_HIERARCHICAL                  0
00469 #define ISO_NON_HIERARCHICAL              1
00470 
00471 typedef struct _TDI_ADDRESS_OSI_TSAP {
00472   USHORT  tp_addr_type;
00473   USHORT  tp_taddr_len;
00474   USHORT  tp_tsel_len;
00475   UCHAR  tp_addr[ISO_MAX_ADDR_LENGTH];
00476 } TDI_ADDRESS_OSI_TSAP, *PTDI_ADDRESS_OSI_TSAP;
00477 
00478 #define TDI_ADDRESS_LENGTH_OSI_TSAP       sizeof(TDI_ADDRESS_OSI_TSAP)
00479 
00480 typedef struct _TDI_ADDRESS_VNS {
00481   UCHAR  net_address[4];
00482   UCHAR  subnet_addr[2];
00483   UCHAR  port[2];
00484   UCHAR  hops;
00485   UCHAR  filler[5];
00486 } TDI_ADDRESS_VNS, *PTDI_ADDRESS_VNS;
00487 
00488 #define TDI_ADDRESS_LENGTH_VNS            sizeof(TDI_ADDRESS_VNS)
00489 
00490 typedef struct _TDI_ADDRESS_IP6 {
00491   USHORT  sin6_port;
00492   ULONG  sin6_flowinfo;
00493   USHORT  sin6_addr[8];
00494   ULONG  sin6_scope_id;
00495 } TDI_ADDRESS_IP6, *PTDI_ADDRESS_IP6;
00496 
00497 #define TDI_ADDRESS_LENGTH_IP6            sizeof(TDI_ADDRESS_IP6)
00498 
00499 enum eNameBufferType {
00500     NBT_READONLY = 0,
00501     NBT_WRITEONLY,
00502     NBT_READWRITE,
00503     NBT_WRITTEN
00504 };
00505 
00506 typedef struct _TDI_ADDRESS_NETBIOS_UNICODE_EX {
00507   USHORT  NetbiosNameType;
00508   enum eNameBufferType  NameBufferType;
00509   UNICODE_STRING  EndpointName;
00510   UNICODE_STRING  RemoteName;
00511   WCHAR  EndpointBuffer[17];
00512   WCHAR  RemoteNameBuffer[1];
00513 } TDI_ADDRESS_NETBIOS_UNICODE_EX, *PTDI_ADDRESS_NETBIOS_UNICODE_EX;
00514 
00515 typedef struct _TA_APPLETALK_ADDR {
00516   LONG  TAAddressCount;
00517   struct _AddrAtalk {
00518     USHORT  AddressLength;
00519     USHORT  AddressType;
00520     TDI_ADDRESS_APPLETALK  Address[1];
00521   } Address[1];
00522 } TA_APPLETALK_ADDRESS, *PTA_APPLETALK_ADDRESS;
00523 
00524 typedef struct _TA_ADDRESS_IP {
00525   LONG  TAAddressCount;
00526   struct _AddrIp {
00527     USHORT  AddressLength;
00528     USHORT  AddressType;
00529     TDI_ADDRESS_IP  Address[1];
00530   } Address[1];
00531 } TA_IP_ADDRESS, *PTA_IP_ADDRESS;
00532 
00533 typedef struct _TA_ADDRESS_IPX {
00534   LONG  TAAddressCount;
00535   struct _AddrIpx {
00536     USHORT  AddressLength;
00537     USHORT  AddressType;
00538     TDI_ADDRESS_IPX  Address[1];
00539   } Address[1];
00540 } TA_IPX_ADDRESS, *PTA_IPX_ADDRESS;
00541 
00542 typedef struct _TA_NETBIOS_ADDRESS {
00543   LONG  TAAddressCount;
00544   struct _Addr{
00545     USHORT  AddressLength;
00546     USHORT  AddressType;
00547     TDI_ADDRESS_NETBIOS  Address[1];
00548   } Address[1];
00549 } TA_NETBIOS_ADDRESS, *PTA_NETBIOS_ADDRESS;
00550 
00551 typedef struct _TA_ADDRESS_NS {
00552   LONG  TAAddressCount;
00553   struct  _AddrNs {
00554     USHORT  AddressLength;
00555     USHORT  AddressType;
00556     TDI_ADDRESS_NS  Address[1];
00557   } Address[1];
00558 } TA_NS_ADDRESS, *PTA_NS_ADDRESS;
00559 
00560 typedef struct _TA_ADDRESS_VNS {
00561   LONG  TAAddressCount;
00562   struct  _AddrVns {
00563     USHORT  AddressLength;
00564     USHORT  AddressType;
00565     TDI_ADDRESS_VNS  Address[1];
00566   } Address[1];
00567 } TA_VNS_ADDRESS, *PTA_VNS_ADDRESS;
00568 
00569 typedef struct _TA_ADDRESS_IP6 {
00570   LONG  TAAddressCount;
00571   struct _AddrIp6 {
00572     USHORT  AddressLength;
00573     USHORT  AddressType;
00574     TDI_ADDRESS_IP6  Address[1];
00575   } Address [1];
00576 } TA_IP6_ADDRESS, *PTA_IP6_ADDRESS;
00577 
00578 typedef struct _TA_ADDRESS_NETBIOS_UNICODE_EX {
00579   LONG  TAAddressCount;
00580   struct _AddrNetbiosWCharEx {
00581     USHORT  AddressLength;
00582     USHORT  AddressType;
00583     TDI_ADDRESS_NETBIOS_UNICODE_EX  Address[1];
00584   } Address [1];
00585 } TA_NETBIOS_UNICODE_EX_ADDRESS, *PTA_NETBIOS_UNICODE_EX_ADDRESS;
00586 
00587 #include "poppack.h"
00588 
00589 #ifdef __cplusplus
00590 }
00591 #endif
00592 
00593 #endif /* __TDI_H */