/* * tdi.h * * TDI user mode definitions * * This file is part of the w32api package. * * Contributors: * Created by Casper S. Hornstrup * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef __TDI_H #define __TDI_H #include "ntddtdi.h" #include "tdistat.h" #include "netpnp.h" #ifdef __cplusplus extern "C" { #endif /* Basic types */ typedef LONG TDI_STATUS; typedef PVOID CONNECTION_CONTEXT; typedef struct _TDI_CONNECTION_INFORMATION { LONG UserDataLength; PVOID UserData; LONG OptionsLength; PVOID Options; LONG RemoteAddressLength; PVOID RemoteAddress; } TDI_CONNECTION_INFORMATION, *PTDI_CONNECTION_INFORMATION; typedef struct _TDI_REQUEST { union { HANDLE AddressHandle; CONNECTION_CONTEXT ConnectionContext; HANDLE ControlChannel; } Handle; PVOID RequestNotifyObject; PVOID RequestContext; TDI_STATUS TdiStatus; } TDI_REQUEST, *PTDI_REQUEST; typedef struct _TDI_REQUEST_STATUS { TDI_STATUS Status; PVOID RequestContext; ULONG BytesTransferred; } TDI_REQUEST_STATUS, *PTDI_REQUEST_STATUS; typedef struct _TDI_CONNECT_REQUEST { TDI_REQUEST Request; PTDI_CONNECTION_INFORMATION RequestConnectionInformation; PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; LARGE_INTEGER Timeout; } TDI_REQUEST_CONNECT, *PTDI_REQUEST_CONNECT; typedef struct _TDI_REQUEST_ACCEPT { TDI_REQUEST Request; PTDI_CONNECTION_INFORMATION RequestConnectionInformation; PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; } TDI_REQUEST_ACCEPT, *PTDI_REQUEST_ACCEPT; typedef struct _TDI_REQUEST_LISTEN { TDI_REQUEST Request; PTDI_CONNECTION_INFORMATION RequestConnectionInformation; PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; USHORT ListenFlags; } TDI_REQUEST_LISTEN, *PTDI_REQUEST_LISTEN; typedef struct _TDI_DISCONNECT_REQUEST { TDI_REQUEST Request; LARGE_INTEGER Timeout; } TDI_REQUEST_DISCONNECT, *PTDI_REQUEST_DISCONNECT; typedef struct _TDI_REQUEST_SEND { TDI_REQUEST Request; USHORT SendFlags; } TDI_REQUEST_SEND, *PTDI_REQUEST_SEND; typedef struct _TDI_REQUEST_RECEIVE { TDI_REQUEST Request; USHORT ReceiveFlags; } TDI_REQUEST_RECEIVE, *PTDI_REQUEST_RECEIVE; typedef struct _TDI_REQUEST_SEND_DATAGRAM { TDI_REQUEST Request; PTDI_CONNECTION_INFORMATION SendDatagramInformation; } TDI_REQUEST_SEND_DATAGRAM, *PTDI_REQUEST_SEND_DATAGRAM; typedef struct _TDI_REQUEST_RECEIVE_DATAGRAM { TDI_REQUEST Request; PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation; PTDI_CONNECTION_INFORMATION ReturnInformation; USHORT ReceiveFlags; } TDI_REQUEST_RECEIVE_DATAGRAM, *PTDI_REQUEST_RECEIVE_DATAGRAM; typedef struct _TDI_REQUEST_SET_EVENT { TDI_REQUEST Request; LONG EventType; PVOID EventHandler; PVOID EventContext; } TDI_REQUEST_SET_EVENT_HANDLER, *PTDI_REQUEST_SET_EVENT_HANDLER; #define TDI_RECEIVE_BROADCAST 0x00000004 #define TDI_RECEIVE_MULTICAST 0x00000008 #define TDI_RECEIVE_PARTIAL 0x00000010 #define TDI_RECEIVE_NORMAL 0x00000020 #define TDI_RECEIVE_EXPEDITED 0x00000040 #define TDI_RECEIVE_PEEK 0x00000080 #define TDI_RECEIVE_NO_RESPONSE_EXP 0x00000100 #define TDI_RECEIVE_COPY_LOOKAHEAD 0x00000200 #define TDI_RECEIVE_ENTIRE_MESSAGE 0x00000400 #define TDI_RECEIVE_AT_DISPATCH_LEVEL 0x00000800 #define TDI_RECEIVE_CONTROL_INFO 0x00001000 /* Listen flags */ #define TDI_QUERY_ACCEPT 0x00000001 /* Options used for both SendOptions and ReceiveIndicators */ #define TDI_SEND_EXPEDITED 0x0020 #define TDI_SEND_PARTIAL 0x0040 #define TDI_SEND_NO_RESPONSE_EXPECTED 0x0080 #define TDI_SEND_NON_BLOCKING 0x0100 #define TDI_SEND_AND_DISCONNECT 0x0200 /* Disconnect Flags */ #define TDI_DISCONNECT_WAIT 0x0001 #define TDI_DISCONNECT_ABORT 0x0002 #define TDI_DISCONNECT_RELEASE 0x0004 /* TdiRequest structure for TdiQueryInformation request */ typedef struct _TDI_REQUEST_QUERY_INFORMATION { TDI_REQUEST Request; ULONG QueryType; PTDI_CONNECTION_INFORMATION RequestConnectionInformation; } TDI_REQUEST_QUERY_INFORMATION, *PTDI_REQUEST_QUERY_INFORMATION; /* TdiRequest structure for TdiSetInformation request */ typedef struct _TDI_REQUEST_SET_INFORMATION { TDI_REQUEST Request; ULONG SetType; PTDI_CONNECTION_INFORMATION RequestConnectionInformation; } TDI_REQUEST_SET_INFORMATION, *PTDI_REQUEST_SET_INFORMATION; typedef TDI_REQUEST_SET_INFORMATION TDI_REQ_SET_INFORMATION, *PTDI_REQ_SET_INFORMATION; 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 that must be supported by all transports */ #define TDI_QUERY_BROADCAST_ADDRESS 0x00000001 #define TDI_QUERY_PROVIDER_INFO 0x00000002 #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 #define TDI_QUERY_MAX_DATAGRAM_INFO 0x00000009 /* Netbios specific query information types */ #define TDI_QUERY_ADAPTER_STATUS 0x00000100 #define TDI_QUERY_SESSION_STATUS 0x00000200 #define TDI_QUERY_FIND_NAME 0x00000300 /* Structures used for TdiQueryInformation and TdiSetInformation */ typedef struct _TDI_ENDPOINT_INFO { ULONG State; ULONG Event; ULONG TransmittedTsdus; ULONG ReceivedTsdus; ULONG TransmissionErrors; ULONG ReceiveErrors; ULONG MinimumLookaheadData; ULONG MaximumLookaheadData; ULONG PriorityLevel; ULONG SecurityLevel; ULONG SecurityCompartment; } TDI_ENDPOINT_INFO, *PTDI_ENDPOINT_INFO; typedef struct _TDI_CONNECTION_INFO { ULONG State; ULONG Event; ULONG TransmittedTsdus; ULONG ReceivedTsdus; ULONG TransmissionErrors; ULONG ReceiveErrors; LARGE_INTEGER Throughput; LARGE_INTEGER Delay; ULONG SendBufferSize; ULONG ReceiveBufferSize; BOOLEAN Unreliable; } TDI_CONNECTION_INFO, *PTDI_CONNECTION_INFO; typedef struct _TDI_DATAGRAM_INFO { ULONG MaximumDatagramBytes; ULONG MaximumDatagramCount; } TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO; typedef struct _TDI_MAX_DATAGRAM_INFO { ULONG MaxDatagramSize; } TDI_MAX_DATAGRAM_INFO, *PTDI_MAX_DATAGRAM_INFO; typedef struct _TDI_PROVIDER_INFO { ULONG Version; ULONG MaxSendSize; ULONG MaxConnectionUserData; ULONG MaxDatagramSize; ULONG ServiceFlags; ULONG MinimumLookaheadData; ULONG MaximumLookaheadData; ULONG NumberOfResources; LARGE_INTEGER StartTime; } TDI_PROVIDER_INFO, *PTDI_PROVIDER_INFO; #define TDI_SERVICE_CONNECTION_MODE 0x00000001 #define TDI_SERVICE_ORDERLY_RELEASE 0x00000002 #define TDI_SERVICE_CONNECTIONLESS_MODE 0x00000004 #define TDI_SERVICE_ERROR_FREE_DELIVERY 0x00000008 #define TDI_SERVICE_SECURITY_LEVEL 0x00000010 #define TDI_SERVICE_BROADCAST_SUPPORTED 0x00000020 #define TDI_SERVICE_MULTICAST_SUPPORTED 0x00000040 #define TDI_SERVICE_DELAYED_ACCEPTANCE 0x00000080 #define TDI_SERVICE_EXPEDITED_DATA 0x00000100 #define TDI_SERVICE_INTERNAL_BUFFERING 0x00000200 #define TDI_SERVICE_ROUTE_DIRECTED 0x00000400 #define TDI_SERVICE_NO_ZERO_LENGTH 0x00000800 #define TDI_SERVICE_POINT_TO_POINT 0x00001000 #define TDI_SERVICE_MESSAGE_MODE 0x00002000 #define TDI_SERVICE_HALF_DUPLEX 0x00004000 #define TDI_SERVICE_DGRAM_CONNECTION 0x00008000 #define TDI_SERVICE_FORCE_ACCESS_CHECK 0x00010000 #define TDI_SERVICE_SEND_AND_DISCONNECT 0x00020000 #define TDI_SERVICE_DIRECT_ACCEPT 0x00040000 #define TDI_SERVICE_ACCEPT_LOCAL_ADDR 0x00080000 typedef struct _TDI_PROVIDER_RESOURCE_STATS { ULONG ResourceId; ULONG MaximumResourceUsed; ULONG AverageResourceUsed; ULONG ResourceExhausted; } TDI_PROVIDER_RESOURCE_STATS, *PTDI_PROVIDER_RESOURCE_STATS; typedef struct _TDI_PROVIDER_STATISTICS { ULONG Version; ULONG OpenConnections; ULONG ConnectionsAfterNoRetry; ULONG ConnectionsAfterRetry; ULONG LocalDisconnects; ULONG RemoteDisconnects; ULONG LinkFailures; ULONG AdapterFailures; ULONG SessionTimeouts; ULONG CancelledConnections; ULONG RemoteResourceFailures; ULONG LocalResourceFailures; ULONG NotFoundFailures; ULONG NoListenFailures; ULONG DatagramsSent; LARGE_INTEGER DatagramBytesSent; ULONG DatagramsReceived; LARGE_INTEGER DatagramBytesReceived; ULONG PacketsSent; ULONG PacketsReceived; ULONG DataFramesSent; LARGE_INTEGER DataFrameBytesSent; ULONG DataFramesReceived; LARGE_INTEGER DataFrameBytesReceived; ULONG DataFramesResent; LARGE_INTEGER DataFrameBytesResent; ULONG DataFramesRejected; LARGE_INTEGER DataFrameBytesRejected; ULONG ResponseTimerExpirations; ULONG AckTimerExpirations; ULONG MaximumSendWindow; ULONG AverageSendWindow; ULONG PiggybackAckQueued; ULONG PiggybackAckTimeouts; LARGE_INTEGER WastedPacketSpace; ULONG WastedSpacePackets; ULONG NumberOfResources; TDI_PROVIDER_RESOURCE_STATS ResourceStats[1]; } TDI_PROVIDER_STATISTICS, *PTDI_PROVIDER_STATISTICS; #define TDI_EVENT_CONNECT 0 #define TDI_EVENT_DISCONNECT 1 #define TDI_EVENT_ERROR 2 #define TDI_EVENT_RECEIVE 3 #define TDI_EVENT_RECEIVE_DATAGRAM 4 #define TDI_EVENT_RECEIVE_EXPEDITED 5 #define TDI_EVENT_SEND_POSSIBLE 6 typedef struct _TDI_REQUEST_ASSOCIATE { TDI_REQUEST Request; HANDLE AddressHandle; } TDI_REQUEST_ASSOCIATE_ADDRESS, *PTDI_REQUEST_ASSOCIATE_ADDRESS; #define NDIS_PACKET_POOL_TAG_FOR_NWLNKIPX 'iPDN' #define NDIS_PACKET_POOL_TAG_FOR_NWLNKSPX 'sPDN' #define NDIS_PACKET_POOL_TAG_FOR_NWLNKNB 'nPDN' #define NDIS_PACKET_POOL_TAG_FOR_TCPIP 'tPDN' #define NDIS_PACKET_POOL_TAG_FOR_NBF 'bPDN' #define NDIS_PACKET_POOL_TAG_FOR_APPLETALK 'aPDN' typedef struct _TA_ADDRESS { USHORT AddressLength; USHORT AddressType; UCHAR Address[1]; } TA_ADDRESS, *PTA_ADDRESS; #define TDI_ADDRESS_TYPE_UNSPEC 0 #define TDI_ADDRESS_TYPE_UNIX 1 #define TDI_ADDRESS_TYPE_IP 2 #define TDI_ADDRESS_TYPE_IMPLINK 3 #define TDI_ADDRESS_TYPE_PUP 4 #define TDI_ADDRESS_TYPE_CHAOS 5 #define TDI_ADDRESS_TYPE_NS 6 #define TDI_ADDRESS_TYPE_IPX 6 #define TDI_ADDRESS_TYPE_NBS 7 #define TDI_ADDRESS_TYPE_ECMA 8 #define TDI_ADDRESS_TYPE_DATAKIT 9 #define TDI_ADDRESS_TYPE_CCITT 10 #define TDI_ADDRESS_TYPE_SNA 11 #define TDI_ADDRESS_TYPE_DECnet 12 #define TDI_ADDRESS_TYPE_DLI 13 #define TDI_ADDRESS_TYPE_LAT 14 #define TDI_ADDRESS_TYPE_HYLINK 15 #define TDI_ADDRESS_TYPE_APPLETALK 16 #define TDI_ADDRESS_TYPE_NETBIOS 17 #define TDI_ADDRESS_TYPE_8022 18 #define TDI_ADDRESS_TYPE_OSI_TSAP 19 #define TDI_ADDRESS_TYPE_NETONE 20 #define TDI_ADDRESS_TYPE_VNS 21 #define TDI_ADDRESS_TYPE_NETBIOS_EX 22 #define TDI_ADDRESS_TYPE_IP6 23 #define TDI_ADDRESS_TYPE_NETBIOS_UNICODE_EX 24 #define TdiTransportAddress "TransportAddress" #define TdiConnectionContext "ConnectionContext" #define TDI_TRANSPORT_ADDRESS_LENGTH (sizeof(TdiTransportAddress) - 1) #define TDI_CONNECTION_CONTEXT_LENGTH (sizeof(TdiConnectionContext) - 1) typedef struct _TRANSPORT_ADDRESS { LONG TAAddressCount; TA_ADDRESS Address[1]; } TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS; typedef struct _TDI_ACTION_HEADER { ULONG TransportId; USHORT ActionCode; USHORT Reserved; } TDI_ACTION_HEADER, *PTDI_ACTION_HEADER; typedef struct _TDI_ADDRESS_INFO { ULONG ActivityCount; TRANSPORT_ADDRESS Address; } TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO; #include "pshpack1.h" typedef struct _TDI_ADDRESS_8022 { UCHAR MACAddress[6]; } TDI_ADDRESS_8022, *PTDI_ADDRESS_8022; #define TDI_ADDRESS_LENGTH_8022 sizeof(TDI_ADDRESS_8022); typedef struct _TDI_ADDRESS_APPLETALK { USHORT Network; UCHAR Node; UCHAR Socket; } TDI_ADDRESS_APPLETALK, *PTDI_ADDRESS_APPLETALK; #define TDI_ADDRESS_LENGTH_APPLETALK sizeof(TDI_ADDRESS_APPLETALK) typedef struct _TDI_ADDRESS_IP { USHORT sin_port; ULONG in_addr; UCHAR sin_zero[8]; } TDI_ADDRESS_IP, *PTDI_ADDRESS_IP; #define TDI_ADDRESS_LENGTH_IP sizeof(TDI_ADDRESS_IP) typedef struct _TDI_ADDRESS_IPX { ULONG NetworkAddress; UCHAR NodeAddress[6]; USHORT Socket; } TDI_ADDRESS_IPX, *PTDI_ADDRESS_IPX; #define TDI_ADDRESS_LENGTH_IPX sizeof(TDI_ADDRESS_IPX) /* TDI_ADDRESS_NETBIOS.NetbiosNameType constants */ #define TDI_ADDRESS_NETBIOS_TYPE_UNIQUE 0x0000 #define TDI_ADDRESS_NETBIOS_TYPE_GROUP 0x0001 #define TDI_ADDRESS_NETBIOS_TYPE_QUICK_UNIQUE 0x0002 #define TDI_ADDRESS_NETBIOS_TYPE_QUICK_GROUP 0x0003 typedef struct _TDI_ADDRESS_NETBIOS { USHORT NetbiosNameType; UCHAR NetbiosName[16]; } TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS; #define TDI_ADDRESS_LENGTH_NETBIOS sizeof(TDI_ADDRESS_NETBIOS) typedef struct _TDI_ADDRESS_NETBIOS_EX { UCHAR EndpointName[16]; TDI_ADDRESS_NETBIOS NetbiosAddress; } TDI_ADDRESS_NETBIOS_EX, *PTDI_ADDRESS_NETBIOS_EX; #define TDI_ADDRESS_LENGTH_NETBIOS_EX sizeof(TDI_ADDRESS_NETBIOS_EX) /* TDI_ADDRESS_NETONE.NetoneNameType constants */ #define TDI_ADDRESS_NETONE_TYPE_UNIQUE 0x0000 #define TDI_ADDRESS_NETONE_TYPE_ROTORED 0x0001 typedef struct _TDI_ADDRESS_NETONE { USHORT NetoneNameType; UCHAR NetoneName[20]; } TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE; #define TDI_ADDRESS_LENGTH_NETONE sizeof(TDI_ADDRESS_NETONE) typedef struct _TDI_ADDRESS_NS { ULONG NetworkAddress; UCHAR NodeAddress[6]; USHORT Socket; } TDI_ADDRESS_NS, *PTDI_ADDRESS_NS; #define TDI_ADDRESS_LENGTH_NS sizeof(TDI_ADDRESS_NS) #define ISO_MAX_ADDR_LENGTH 64 /* TDI_ADDRESS_OSI_TSAP.tp_addr_type constants */ #define ISO_HIERARCHICAL 0 #define ISO_NON_HIERARCHICAL 1 typedef struct _TDI_ADDRESS_OSI_TSAP { USHORT tp_addr_type; USHORT tp_taddr_len; USHORT tp_tsel_len; UCHAR tp_addr[ISO_MAX_ADDR_LENGTH]; } TDI_ADDRESS_OSI_TSAP, *PTDI_ADDRESS_OSI_TSAP; #define TDI_ADDRESS_LENGTH_OSI_TSAP sizeof(TDI_ADDRESS_OSI_TSAP) typedef struct _TDI_ADDRESS_VNS { UCHAR net_address[4]; UCHAR subnet_addr[2]; UCHAR port[2]; UCHAR hops; UCHAR filler[5]; } TDI_ADDRESS_VNS, *PTDI_ADDRESS_VNS; #define TDI_ADDRESS_LENGTH_VNS sizeof(TDI_ADDRESS_VNS) typedef struct _TDI_ADDRESS_IP6 { USHORT sin6_port; ULONG sin6_flowinfo; USHORT sin6_addr[8]; ULONG sin6_scope_id; } TDI_ADDRESS_IP6, *PTDI_ADDRESS_IP6; #define TDI_ADDRESS_LENGTH_IP6 sizeof(TDI_ADDRESS_IP6) enum eNameBufferType { NBT_READONLY = 0, NBT_WRITEONLY, NBT_READWRITE, NBT_WRITTEN }; typedef struct _TDI_ADDRESS_NETBIOS_UNICODE_EX { USHORT NetbiosNameType; enum eNameBufferType NameBufferType; UNICODE_STRING EndpointName; UNICODE_STRING RemoteName; WCHAR EndpointBuffer[17]; WCHAR RemoteNameBuffer[1]; } TDI_ADDRESS_NETBIOS_UNICODE_EX, *PTDI_ADDRESS_NETBIOS_UNICODE_EX; typedef struct _TA_APPLETALK_ADDR { LONG TAAddressCount; struct _AddrAtalk { USHORT AddressLength; USHORT AddressType; TDI_ADDRESS_APPLETALK Address[1]; } Address[1]; } TA_APPLETALK_ADDRESS, *PTA_APPLETALK_ADDRESS; typedef struct _TA_ADDRESS_IP { LONG TAAddressCount; struct _AddrIp { USHORT AddressLength; USHORT AddressType; TDI_ADDRESS_IP Address[1]; } Address[1]; } TA_IP_ADDRESS, *PTA_IP_ADDRESS; typedef struct _TA_ADDRESS_IPX { LONG TAAddressCount; struct _AddrIpx { USHORT AddressLength; USHORT AddressType; TDI_ADDRESS_IPX Address[1]; } Address[1]; } TA_IPX_ADDRESS, *PTA_IPX_ADDRESS; typedef struct _TA_NETBIOS_ADDRESS { LONG TAAddressCount; struct _Addr{ USHORT AddressLength; USHORT AddressType; TDI_ADDRESS_NETBIOS Address[1]; } Address[1]; } TA_NETBIOS_ADDRESS, *PTA_NETBIOS_ADDRESS; typedef struct _TA_ADDRESS_NS { LONG TAAddressCount; struct _AddrNs { USHORT AddressLength; USHORT AddressType; TDI_ADDRESS_NS Address[1]; } Address[1]; } TA_NS_ADDRESS, *PTA_NS_ADDRESS; typedef struct _TA_ADDRESS_VNS { LONG TAAddressCount; struct _AddrVns { USHORT AddressLength; USHORT AddressType; TDI_ADDRESS_VNS Address[1]; } Address[1]; } TA_VNS_ADDRESS, *PTA_VNS_ADDRESS; typedef struct _TA_ADDRESS_IP6 { LONG TAAddressCount; struct _AddrIp6 { USHORT AddressLength; USHORT AddressType; TDI_ADDRESS_IP6 Address[1]; } Address [1]; } TA_IP6_ADDRESS, *PTA_IP6_ADDRESS; typedef struct _TA_ADDRESS_NETBIOS_UNICODE_EX { LONG TAAddressCount; struct _AddrNetbiosWCharEx { USHORT AddressLength; USHORT AddressType; TDI_ADDRESS_NETBIOS_UNICODE_EX Address[1]; } Address [1]; } TA_NETBIOS_UNICODE_EX_ADDRESS, *PTA_NETBIOS_UNICODE_EX_ADDRESS; #include "poppack.h" #ifdef __cplusplus } #endif #endif /* __TDI_H */