Fixed compile issues with network code
[reactos.git] / reactos / include / net / tdi.h
index 88197f5..4e8a79e 100644 (file)
-/*\r
- * COPYRIGHT:   See COPYING in the top level directory\r
- * PROJECT:     ReactOS TDI library\r
- * FILE:        include/net/tdi.h\r
- * PURPOSE:     TDI definitions for user mode clients\r
- */\r
-#ifndef __TDI_H\r
-#define __TDI_H\r
-\r
-/* FIXME: Missed some definitions in ntddk.h */\r
-\r
-/* Could be defined in ndis.h */\r
-#ifndef __NDIS_H\r
-typedef signed int INT, *PINT;\r
-#endif\r
-\r
-\r
-\r
-/* Basic types */\r
-\r
-typedef LONG    TDI_STATUS;\r
-typedef PVOID   CONNECTION_CONTEXT;\r
-\r
-\r
-\r
-/* TDI status codes */\r
-\r
-#define TDI_SUCCESS             STATUS_SUCCESS\r
-#define TDI_NO_RESOURCES        STATUS_INSUFFICIENT_RESOURCES\r
-#define TDI_ADDR_IN_USE         STATUS_ADDRESS_ALREADY_EXISTS\r
-#define TDI_BAD_ADDR            STATUS_INVALID_ADDRESS_COMPONENT\r
-#define TDI_NO_FREE_ADDR        STATUS_TOO_MANY_ADDRESSES\r
-#define TDI_ADDR_INVALID        STATUS_INVALID_ADDRESS\r
-#define TDI_ADDR_DELETED        STATUS_ADDRESS_CLOSED\r
-#define TDI_BUFFER_OVERFLOW     STATUS_BUFFER_OVERFLOW\r
-#define TDI_BAD_EVENT_TYPE      STATUS_INVALID_PARAMETER\r
-#define TDI_BAD_OPTION          STATUS_INVALID_PARAMETER\r
-#define TDI_CONN_REFUSED        STATUS_CONNECTION_REFUSED\r
-#define TDI_INVALID_CONNECTION  STATUS_CONNECTION_INVALID\r
-#define TDI_ALREADY_ASSOCIATED  STATUS_ADDRESS_ALREADY_ASSOCIATED\r
-#define TDI_NOT_ASSOCIATED      STATUS_ADDRESS_NOT_ASSOCIATED\r
-#define TDI_CONNECTION_ACTIVE   STATUS_CONNECTION_ACTIVE\r
-#define TDI_CONNECTION_ABORTED  STATUS_CONNECTION_ABORTED\r
-#define TDI_CONNECTION_RESET    STATUS_CONNECTION_RESET\r
-#define TDI_TIMED_OUT           STATUS_IO_TIMEOUT\r
-#define TDI_GRACEFUL_DISC       STATUS_GRACEFUL_DISCONNECT\r
-#define TDI_NOT_ACCEPTED        STATUS_DATA_NOT_ACCEPTED\r
-#define TDI_MORE_PROCESSING     STATUS_MORE_PROCESSING_REQUIRED\r
-#define TDI_INVALID_STATE       STATUS_INVALID_DEVICE_STATE\r
-#define TDI_INVALID_PARAMETER   STATUS_INVALID_PARAMETER\r
-#define TDI_DEST_NET_UNREACH    STATUS_NETWORK_UNREACHABLE\r
-#define TDI_DEST_HOST_UNREACH   STATUS_HOST_UNREACHABLE\r
-#define TDI_DEST_UNREACHABLE    TDI_DEST_HOST_UNREACH\r
-#define TDI_DEST_PROT_UNREACH   STATUS_PROTOCOL_UNREACHABLE\r
-#define TDI_DEST_PORT_UNREACH   STATUS_PORT_UNREACHABLE\r
-#define TDI_INVALID_QUERY       STATUS_INVALID_DEVICE_REQUEST\r
-#define TDI_REQ_ABORTED         STATUS_REQUEST_ABORTED\r
-#define TDI_BUFFER_TOO_SMALL    STATUS_BUFFER_TOO_SMALL\r
-#define TDI_CANCELLED           STATUS_CANCELLED\r
-#define        TDI_BUFFER_TOO_BIG              STATUS_INVALID_BUFFER_SIZE\r
-#define TDI_INVALID_REQUEST     STATUS_INVALID_DEVICE_REQUEST\r
-#define TDI_PENDING             STATUS_PENDING\r
-#define TDI_ITEM_NOT_FOUND      STATUS_OBJECT_NAME_NOT_FOUND\r
-\r
-#define        TDI_OPTION_EOL              0\r
-#define        TDI_ADDRESS_OPTION_REUSE    1\r
-#define        TDI_ADDRESS_OPTION_DHCP     2\r
-\r
-\r
-\r
-/* TDI IOCTL codes */\r
-\r
-#define TDI_CONTROL_CODE(Request, Method) \\r
-            CTL_CODE(FILE_DEVICE_TRANSPORT, Request, Method, FILE_ANY_ACCESS)\r
-\r
-#define IOCTL_TDI_ACCEPT                TDI_CONTROL_CODE(0,  METHOD_BUFFERED)\r
-#define IOCTL_TDI_CONNECT               TDI_CONTROL_CODE(1,  METHOD_BUFFERED)\r
-#define IOCTL_TDI_DISCONNECT            TDI_CONTROL_CODE(2,  METHOD_BUFFERED)\r
-#define IOCTL_TDI_LISTEN                TDI_CONTROL_CODE(3,  METHOD_BUFFERED)\r
-#define IOCTL_TDI_QUERY_INFORMATION     TDI_CONTROL_CODE(4,  METHOD_OUT_DIRECT)\r
-#define IOCTL_TDI_RECEIVE               TDI_CONTROL_CODE(5,  METHOD_OUT_DIRECT)\r
-#define IOCTL_TDI_RECEIVE_DATAGRAM      TDI_CONTROL_CODE(6,  METHOD_OUT_DIRECT)\r
-#define IOCTL_TDI_SEND                  TDI_CONTROL_CODE(7,  METHOD_IN_DIRECT)\r
-#define IOCTL_TDI_SEND_DATAGRAM         TDI_CONTROL_CODE(8,  METHOD_IN_DIRECT)\r
-#define IOCTL_TDI_SET_EVENT_HANDLER     TDI_CONTROL_CODE(9,  METHOD_BUFFERED)\r
-#define IOCTL_TDI_SET_INFORMATION       TDI_CONTROL_CODE(10, METHOD_IN_DIRECT)\r
-#define IOCTL_TDI_ASSOCIATE_ADDRESS     TDI_CONTROL_CODE(11, METHOD_BUFFERED)\r
-#define IOCTL_TDI_DISASSOCIATE_ADDRESS  TDI_CONTROL_CODE(12, METHOD_BUFFERED)\r
-#define IOCTL_TDI_ACTION                TDI_CONTROL_CODE(13, METHOD_OUT_DIRECT)\r
-\r
-\r
-\r
-/* TDI transport driver dispatch routines */\r
-\r
-NTSTATUS TdiDispatchCleanup(\r
-    IN PDEVICE_OBJECT  DeviceObject,\r
-    IN PIRP  Irp);\r
-\r
-NTSTATUS TdiDispatchClose(\r
-    IN PDEVICE_OBJECT  DeviceObject,\r
-    IN PIRP  Irp);\r
-\r
-NTSTATUS TdiDispatchCreate(\r
-    IN PDEVICE_OBJECT  DeviceObject,\r
-    IN PIRP  Irp);\r
-\r
-NTSTATUS TdiDispatchDeviceControl(\r
-    IN PDEVICE_OBJECT  DeviceObject,\r
-    IN PIRP  Irp,\r
-    IN PIO_STACK_LOCATION  IrpSp);\r
-\r
-BOOLEAN TdiDispatchFastDeviceControl(\r
-    IN PFILE_OBJECT  FileObject,\r
-    IN BOOLEAN  Wait,\r
-    IN PVOID  InputBuffer,\r
-    IN ULONG  InputBufferLength,\r
-    IN OUT PVOID  OutputBuffer,\r
-    IN ULONG  OutputBufferLength,\r
-    IN ULONG  IoControlCode,\r
-    OUT PIO_STATUS_BLOCK  IoStatus);\r
-\r
-NTSTATUS TdiDispatchInternalDeviceControl(\r
-    IN PDEVICE_OBJECT  DeviceObject,\r
-    IN PIRP  Irp);\r
-\r
-\r
-\r
-/* TDI structures */\r
-\r
-typedef struct _TDI_CONNECTION_INFORMATION\r
-{\r
-    LONG   UserDataLength;\r
-    PVOID  UserData;\r
-    LONG   OptionsLength;\r
-    PVOID  Options;\r
-    LONG   RemoteAddressLength;\r
-    PVOID  RemoteAddress;\r
-} TDI_CONNECTION_INFORMATION, *PTDI_CONNECTION_INFORMATION;\r
-\r
-typedef struct _TDI_REQUEST\r
-{\r
-    union {\r
-        HANDLE              AddressHandle;\r
-        CONNECTION_CONTEXT  ConnectionContext;\r
-        HANDLE              ControlChannel;\r
-    } Handle;\r
-    PVOID      RequestNotifyObject;\r
-    PVOID      RequestContext;\r
-    TDI_STATUS TdiStatus;\r
-} TDI_REQUEST, *PTDI_REQUEST;\r
-\r
-typedef struct _TDI_REQUEST_STATUS\r
-{\r
-    TDI_STATUS  Status;\r
-    PVOID  RequestContext;\r
-    ULONG  BytesTransferred;\r
-} TDI_REQUEST_STATUS, *PTDI_REQUEST_STATUS;\r
-\r
-\r
-typedef struct _TA_ADDRESS\r
-{\r
-    USHORT  AddressLength;\r
-    USHORT  AddressType;\r
-    UCHAR   Address[1];\r
-} TA_ADDRESS, *PTA_ADDRESS;\r
-\r
-#define TDI_ADDRESS_TYPE_UNSPEC      0\r
-#define TDI_ADDRESS_TYPE_UNIX        1\r
-#define TDI_ADDRESS_TYPE_IP          2\r
-#define TDI_ADDRESS_TYPE_IMPLINK     3\r
-#define TDI_ADDRESS_TYPE_PUP         4\r
-#define TDI_ADDRESS_TYPE_CHAOS       5\r
-#define TDI_ADDRESS_TYPE_NS          6\r
-#define TDI_ADDRESS_TYPE_IPX         6\r
-#define TDI_ADDRESS_TYPE_NBS         7\r
-#define TDI_ADDRESS_TYPE_ECMA        8\r
-#define TDI_ADDRESS_TYPE_DATAKIT     9\r
-#define TDI_ADDRESS_TYPE_CCITT      10\r
-#define TDI_ADDRESS_TYPE_SNA        11\r
-#define TDI_ADDRESS_TYPE_DECnet     12\r
-#define TDI_ADDRESS_TYPE_DLI        13\r
-#define TDI_ADDRESS_TYPE_LAT        14\r
-#define TDI_ADDRESS_TYPE_HYLINK     15\r
-#define TDI_ADDRESS_TYPE_APPLETALK  16\r
-#define TDI_ADDRESS_TYPE_NETBIOS    17\r
-#define TDI_ADDRESS_TYPE_8022       18\r
-#define TDI_ADDRESS_TYPE_OSI_TSAP   19\r
-#define TDI_ADDRESS_TYPE_NETONE     20\r
-#define TDI_ADDRESS_TYPE_VNS        21\r
-#define TDI_ADDRESS_TYPE_NETBIOS_EX 22\r
-\r
-\r
-#define TdiTransportAddress             "TransportAddress"\r
-#define TdiConnectionContext            "ConnectionContext"\r
-#define TDI_TRANSPORT_ADDRESS_LENGTH    (sizeof(TdiTransportAddress) - 1)\r
-#define TDI_CONNECTION_CONTEXT_LENGTH   (sizeof(TdiConnectionContext) - 1)\r
-\r
-\r
-typedef struct _TRANSPORT_ADDRESS\r
-{\r
-    LONG        TAAddressCount;\r
-    TA_ADDRESS  Address[1];\r
-} TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS;\r
-\r
-typedef struct _TDI_ADDRESS_INFO\r
-{\r
-    ULONG              ActivityCount;\r
-    TRANSPORT_ADDRESS  Address;\r
-} TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;\r
-\r
-typedef struct _TDI_ACTION_HEADER\r
-{\r
-    ULONG   TransportId;\r
-    USHORT  ActionCode;\r
-    USHORT  Reserved;\r
-} TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;\r
-\r
-typedef struct _TDI_ADDRESS_8022\r
-{\r
-    UCHAR MACAddress[6];\r
-} TDI_ADDRESS_8022, *PTDI_ADDRESS_8022;\r
-\r
-typedef struct _TDI_ADDRESS_APPLETALK\r
-{\r
-    USHORT  Network;\r
-    UCHAR   Node;\r
-    UCHAR   Socket;\r
-} TDI_ADDRESS_APPLETALK, *PTDI_ADDRESS_APPLETALK;\r
-\r
-#define TDI_ADDRESS_LENGTH_APPLETALK    sizeof(TDI_ADDRESS_APPLETALK)\r
-\r
-typedef struct _TDI_ADDRESS_IP\r
-{\r
-    USHORT  sin_port;\r
-    ULONG   in_addr;\r
-    UCHAR   sin_zero[8];\r
-} TDI_ADDRESS_IP, *PTDI_ADDRESS_IP;\r
-\r
-#define TDI_ADDRESS_LENGTH_IP   sizeof(TDI_ADDRESS_IP)\r
-\r
-typedef struct _TDI_ADDRESS_IPX\r
-{\r
-    ULONG   NetworkAddress;\r
-    UCHAR   NodeAddress[6];\r
-    USHORT  Socket;\r
-} TDI_ADDRESS_IPX, *PTDI_ADDRESS_IPX;\r
-\r
-#define TDI_ADDRESS_LENGTH_IPX  sizeof(TDI_ADDRESS_IPX)\r
-\r
-typedef struct _TDI_ADDRESS_NETBIOS\r
-{\r
-    USHORT  NetbiosNameType;\r
-    UCHAR   NetbiosName[16];\r
-} TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS;\r
-\r
-#define TDI_ADDRESS_NETBIOS_TYPE_UNIQUE         0x0000\r
-#define TDI_ADDRESS_NETBIOS_TYPE_GROUP          0x0001\r
-#define TDI_ADDRESS_NETBIOS_TYPE_QUICK_UNIQUE   0x0002\r
-#define TDI_ADDRESS_NETBIOS_TYPE_QUICK_GROUP    0x0003\r
-\r
-#define TDI_ADDRESS_LENGTH_NETBIOS  sizeof(TDI_ADDRESS_NETBIOS)\r
-\r
-typedef struct _TDI_ADDRESS_NETBIOS_EX\r
-{\r
-    UCHAR               EndpointName[16];\r
-    TDI_ADDRESS_NETBIOS NetbiosAddress;\r
-} TDI_ADDRESS_NETBIOS_EX, *PTDI_ADDRESS_NETBIOS_EX;\r
-\r
-#define TDI_ADDRESS_LENGTH_NETBIOS_EX   sizeof(TDI_ADDRESS_NETBIOS_EX)\r
-\r
-typedef struct _TDI_ADDRESS_NETONE\r
-{\r
-    USHORT  NetoneNameType;\r
-    UCHAR   NetoneName[20];\r
-} TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE;\r
-\r
-#define TDI_ADDRESS_NETONE_TYPE_UNIQUE  0x0000\r
-#define TDI_ADDRESS_NETONE_TYPE_ROTORED 0x0001\r
-\r
-#define TDI_ADDRESS_LENGTH_NETONE   sizeof(TDI_ADDRESS_NETONE)\r
-\r
-typedef struct _TDI_ADDRESS_NS\r
-{\r
-    ULONG   NetworkAddress;\r
-    UCHAR   NodeAddress[6];\r
-    USHORT  Socket;\r
-} TDI_ADDRESS_NS, *PTDI_ADDRESS_NS;\r
-\r
-#define TDI_ADDRESS_LENGTH_NS   sizeof(TDI_ADDRESS_NS)\r
-\r
-#define ISO_MAX_ADDR_LENGTH 64\r
-\r
-#define ISO_HIERARCHICAL        0\r
-#define ISO_NON_HIERARCHICAL    1\r
-\r
-typedef struct _TDI_ADDRESS_OSI_TSAP\r
-{\r
-    USHORT  tp_addr_type;\r
-    USHORT  tp_taddr_len;\r
-    USHORT  tp_tsel_len;\r
-    UCHAR   tp_addr[ISO_MAX_ADDR_LENGTH];\r
-} TDI_ADDRESS_OSI_TSAP, *PTDI_ADDRESS_OSI_TSAP;\r
-\r
-#define TDI_ADDRESS_LENGTH_OSI_TSAP sizeof(TDI_ADDRESS_OSI_TSAP)\r
-\r
-typedef struct _TDI_ADDRESS_VNS\r
-{\r
-    UCHAR  net_address[4];\r
-    UCHAR  subnet_addr[2];\r
-    UCHAR  port[2];\r
-    UCHAR  hops;\r
-    UCHAR  filler[5];\r
-} TDI_ADDRESS_VNS, *PTDI_ADDRESS_VNS;\r
-\r
-#define TDI_ADDRESS_LENGTH_VNS  sizeof(TDI_ADDRESS_VNS)\r
-\r
-\r
-/* TDI request structures */\r
-\r
-typedef struct _TDI_CONNECT_REQUEST\r
-{\r
-    TDI_REQUEST     Request;\r
-    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
-    PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
-    LARGE_INTEGER   Timeout;\r
-} TDI_REQUEST_CONNECT, *PTDI_REQUEST_CONNECT;\r
-\r
-typedef struct _TDI_REQUEST_ACCEPT\r
-{\r
-    TDI_REQUEST Request;\r
-    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
-    PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
-} TDI_REQUEST_ACCEPT, *PTDI_REQUEST_ACCEPT;\r
-\r
-typedef struct _TDI_REQUEST_LISTEN\r
-{\r
-    TDI_REQUEST Request;\r
-    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
-    PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
-    USHORT      ListenFlags;\r
-} TDI_REQUEST_LISTEN, *PTDI_REQUEST_LISTEN;\r
-\r
-typedef struct _TDI_DISCONNECT_REQUEST\r
-{\r
-    TDI_REQUEST     Request;\r
-    LARGE_INTEGER   Timeout;\r
-} TDI_REQUEST_DISCONNECT, *PTDI_REQUEST_DISCONNECT;\r
-\r
-typedef struct _TDI_REQUEST_SEND\r
-{\r
-    TDI_REQUEST Request;\r
-    USHORT      SendFlags;\r
-} TDI_REQUEST_SEND, *PTDI_REQUEST_SEND;\r
-\r
-typedef struct _TDI_REQUEST_RECEIVE\r
-{\r
-    TDI_REQUEST Request;\r
-    USHORT      ReceiveFlags;\r
-} TDI_REQUEST_RECEIVE, *PTDI_REQUEST_RECEIVE;\r
-\r
-typedef struct _TDI_REQUEST_SEND_DATAGRAM\r
-{\r
-    TDI_REQUEST Request;\r
-    PTDI_CONNECTION_INFORMATION SendDatagramInformation;\r
-} TDI_REQUEST_SEND_DATAGRAM, *PTDI_REQUEST_SEND_DATAGRAM;\r
-\r
-typedef struct _TDI_REQUEST_RECEIVE_DATAGRAM\r
-{\r
-    TDI_REQUEST Request;\r
-    PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;\r
-    PTDI_CONNECTION_INFORMATION ReturnInformation;\r
-    USHORT      ReceiveFlags;\r
-} TDI_REQUEST_RECEIVE_DATAGRAM, *PTDI_REQUEST_RECEIVE_DATAGRAM;\r
-\r
-typedef struct _TDI_REQUEST_SET_EVENT\r
-{\r
-    TDI_REQUEST Request;\r
-    LONG        EventType;\r
-    PVOID       EventHandler;\r
-    PVOID       EventContext;\r
-} TDI_REQUEST_SET_EVENT_HANDLER, *PTDI_REQUEST_SET_EVENT_HANDLER;\r
-\r
-#define TDI_RECEIVE_BROADCAST           0x00000004\r
-#define TDI_RECEIVE_MULTICAST           0x00000008\r
-#define TDI_RECEIVE_PARTIAL             0x00000010\r
-#define TDI_RECEIVE_NORMAL              0x00000020\r
-#define TDI_RECEIVE_EXPEDITED           0x00000040\r
-#define TDI_RECEIVE_PEEK                0x00000080\r
-#define TDI_RECEIVE_NO_RESPONSE_EXP     0x00000100\r
-#define TDI_RECEIVE_COPY_LOOKAHEAD      0x00000200\r
-#define TDI_RECEIVE_ENTIRE_MESSAGE      0x00000400\r
-#define TDI_RECEIVE_AT_DISPATCH_LEVEL   0x00000800\r
-\r
-/* Listen flags */\r
-#define TDI_QUERY_ACCEPT    0x00000001\r
-\r
-/* Options used for both SendOptions and ReceiveIndicators */\r
-#define TDI_SEND_EXPEDITED              0x0020\r
-#define TDI_SEND_PARTIAL                0x0040\r
-#define TDI_SEND_NO_RESPONSE_EXPECTED   0x0080\r
-#define TDI_SEND_NON_BLOCKING           0x0100\r
-\r
-/* Disconnect Flags */\r
-#define TDI_DISCONNECT_WAIT     0x0001\r
-#define TDI_DISCONNECT_ABORT    0x0002\r
-#define TDI_DISCONNECT_RELEASE  0x0004\r
-\r
-/* TdiRequest structure for TdiQueryInformation request */\r
-typedef struct _TDI_REQUEST_QUERY_INFORMATION\r
-{\r
-    TDI_REQUEST Request;\r
-    ULONG       QueryType;\r
-    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
-} TDI_REQUEST_QUERY_INFORMATION, *PTDI_REQUEST_QUERY_INFORMATION;\r
-\r
-/* TdiRequest structure for TdiSetInformation request */\r
-typedef struct _TDI_REQUEST_SET_INFORMATION\r
-{\r
-    TDI_REQUEST Request;\r
-    ULONG       SetType;\r
-    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
-} TDI_REQUEST_SET_INFORMATION, *PTDI_REQUEST_SET_INFORMATION;\r
-\r
-typedef union _TDI_REQUEST_TYPE\r
-{\r
-    TDI_REQUEST_ACCEPT              TdiAccept;\r
-    TDI_REQUEST_CONNECT             TdiConnect;\r
-    TDI_REQUEST_DISCONNECT          TdiDisconnect;\r
-    TDI_REQUEST_LISTEN              TdiListen;\r
-    TDI_REQUEST_QUERY_INFORMATION   TdiQueryInformation;\r
-    TDI_REQUEST_RECEIVE             TdiReceive;\r
-    TDI_REQUEST_RECEIVE_DATAGRAM    TdiReceiveDatagram;\r
-    TDI_REQUEST_SEND                TdiSend;\r
-    TDI_REQUEST_SEND_DATAGRAM       TdiSendDatagram;\r
-    TDI_REQUEST_SET_EVENT_HANDLER   TdiSetEventHandler;\r
-    TDI_REQUEST_SET_INFORMATION     TdiSetInformation;\r
-} TDI_REQUEST_TYPE, *PTDI_REQUEST_TYPE;\r
-\r
-\r
-\r
-/* Query information types */\r
-\r
-/* Generic query info types that must be supported by all transports */\r
-#define TDI_QUERY_BROADCAST_ADDRESS     0x00000001\r
-#define TDI_QUERY_PROVIDER_INFO         0x00000002\r
-#define TDI_QUERY_ADDRESS_INFO          0x00000003\r
-#define TDI_QUERY_CONNECTION_INFO       0x00000004\r
-#define TDI_QUERY_PROVIDER_STATISTICS   0x00000005\r
-#define TDI_QUERY_DATAGRAM_INFO         0x00000006\r
-#define TDI_QUERY_DATA_LINK_ADDRESS     0x00000007\r
-#define TDI_QUERY_NETWORK_ADDRESS       0x00000008\r
-#define TDI_QUERY_MAX_DATAGRAM_INFO     0x00000009\r
-\r
-/* Netbios specific query information types */\r
-#define TDI_QUERY_ADAPTER_STATUS        0x00000100\r
-#define TDI_QUERY_SESSION_STATUS        0x00000200\r
-#define TDI_QUERY_FIND_NAME             0x00000300\r
-\r
-typedef struct _TA_APPLETALK_ADDR\r
-{\r
-    LONG    TAAddressCount;\r
-    struct  _AddrAtalk {\r
-        USHORT                  AddressLength;\r
-        USHORT                  AddressType;\r
-        TDI_ADDRESS_APPLETALK   Address[1];\r
-    } Address[1];\r
-} TA_APPLETALK_ADDRESS, *PTA_APPLETALK_ADDRESS;\r
-\r
-typedef struct _TA_ADDRESS_IP\r
-{\r
-    LONG    TAAddressCount;\r
-    struct  _AddrIp {\r
-        USHORT          AddressLength;\r
-        USHORT          AddressType;\r
-        TDI_ADDRESS_IP  Address[1];\r
-    } Address[1];\r
-} TA_ADDRESS_IP, *PTA_ADDRESS_IP;\r
-\r
-typedef struct _TA_ADDRESS_IPX\r
-{\r
-    LONG    TAAddressCount;\r
-    struct  _AddrIpx {\r
-        USHORT          AddressLength;\r
-        USHORT          AddressType;\r
-        TDI_ADDRESS_IP  Address[1];\r
-    } Address[1];\r
-} TA_IPX_ADDRESS, *PTA_IPX_ADDRESS;\r
-\r
-typedef struct _TA_NETBIOS_ADDRESS\r
-{\r
-    LONG    TAAddressCount;\r
-    struct _Addr{\r
-        USHORT              AddressLength;\r
-        USHORT              AddressType;\r
-        TDI_ADDRESS_NETBIOS Address[1];\r
-    } Address[1];\r
-} TA_NETBIOS_ADDRESS, *PTA_NETBIOS_ADDRESS;\r
-\r
-typedef struct _TA_ADDRESS_NS\r
-{\r
-    LONG    TAAddressCount;\r
-    struct  _AddrNs {\r
-        USHORT          AddressLength;\r
-        USHORT          AddressType;\r
-        TDI_ADDRESS_NS  Address[1];\r
-    } Address[1];\r
-} TA_NS_ADDRESS, *PTA_NS_ADDRESS;\r
-\r
-typedef struct _TA_ADDRESS_VNS\r
-{\r
-    LONG    TAAddressCount;\r
-    struct  _AddrVns {\r
-        USHORT          AddressLength;\r
-        USHORT          AddressType;\r
-        TDI_ADDRESS_VNS Address[1];\r
-    } Address[1];\r
-} TA_VNS_ADDRESS, *PTA_VNS_ADDRESS;\r
-\r
-\r
-/* Structures used for TdiQueryInformation and TdiSetInformation */\r
-\r
-typedef struct _TDI_ENDPOINT_INFO\r
-{\r
-    ULONG   State;\r
-    ULONG   Event;\r
-    ULONG   TransmittedTsdus;\r
-    ULONG   ReceivedTsdus;\r
-    ULONG   TransmissionErrors;\r
-    ULONG   ReceiveErrors;\r
-    ULONG   MinimumLookaheadData;\r
-    ULONG   MaximumLookaheadData;\r
-    ULONG   PriorityLevel;\r
-    ULONG   SecurityLevel;\r
-    ULONG   SecurityCompartment;\r
-} TDI_ENDPOINT_INFO, *PTDI_ENDPOINT_INFO;\r
-\r
-typedef struct _TDI_CONNECTION_INFO\r
-{\r
-    ULONG           State;\r
-    ULONG           Event; \r
-    ULONG           TransmittedTsdus;\r
-    ULONG           ReceivedTsdus;\r
-    ULONG           TransmissionErrors;\r
-    ULONG           ReceiveErrors;\r
-    LARGE_INTEGER   Throughput;\r
-    LARGE_INTEGER   Delay;\r
-    ULONG           SendBufferSize;\r
-    ULONG           ReceiveBufferSize;\r
-    BOOLEAN         Unreliable;\r
-} TDI_CONNECTION_INFO, *PTDI_CONNECTION_INFO;\r
-\r
-typedef struct _TDI_DATAGRAM_INFO\r
-{\r
-    ULONG   MaximumDatagramBytes;\r
-    ULONG   MaximumDatagramCount;\r
-} TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO;\r
-\r
-typedef struct _TDI_MAX_DATAGRAM_INFO\r
-{\r
-    ULONG   MaxDatagramSize;\r
-} TDI_MAX_DATAGRAM_INFO, *PTDI_MAX_DATAGRAM_INFO;\r
-\r
-typedef struct _TDI_PROVIDER_INFO\r
-{\r
-    ULONG           Version;\r
-    ULONG           MaxSendSize;\r
-    ULONG           MaxConnectionUserData;\r
-    ULONG           MaxDatagramSize;\r
-    ULONG           ServiceFlags;\r
-    ULONG           MinimumLookaheadData;\r
-    ULONG           MaximumLookaheadData;\r
-    ULONG           NumberOfResources;\r
-    LARGE_INTEGER   StartTime;\r
-} TDI_PROVIDER_INFO, *PTDI_PROVIDER_INFO;\r
-\r
-#define TDI_SERVICE_CONNECTION_MODE     0x00000001\r
-#define TDI_SERVICE_ORDERLY_RELEASE     0x00000002\r
-#define TDI_SERVICE_CONNECTIONLESS_MODE 0x00000004\r
-#define TDI_SERVICE_ERROR_FREE_DELIVERY 0x00000008\r
-#define TDI_SERVICE_SECURITY_LEVEL      0x00000010\r
-#define TDI_SERVICE_BROADCAST_SUPPORTED 0x00000020\r
-#define TDI_SERVICE_MULTICAST_SUPPORTED 0x00000040\r
-#define TDI_SERVICE_DELAYED_ACCEPTANCE  0x00000080\r
-#define TDI_SERVICE_EXPEDITED_DATA      0x00000100\r
-#define TDI_SERVICE_INTERNAL_BUFFERING  0x00000200\r
-#define TDI_SERVICE_ROUTE_DIRECTED      0x00000400\r
-#define TDI_SERVICE_NO_ZERO_LENGTH      0x00000800\r
-#define TDI_SERVICE_POINT_TO_POINT      0x00001000\r
-#define TDI_SERVICE_MESSAGE_MODE        0x00002000\r
-#define TDI_SERVICE_HALF_DUPLEX         0x00004000\r
-\r
-typedef struct _TDI_PROVIDER_RESOURCE_STATS\r
-{\r
-    ULONG   ResourceId;\r
-    ULONG   MaximumResourceUsed;\r
-    ULONG   AverageResourceUsed;\r
-    ULONG   ResourceExhausted;\r
-} TDI_PROVIDER_RESOURCE_STATS, *PTDI_PROVIDER_RESOURCE_STATS;\r
-\r
-typedef struct _TDI_PROVIDER_STATISTICS\r
-{\r
-    ULONG           Version;\r
-    ULONG           OpenConnections;\r
-    ULONG           ConnectionsAfterNoRetry;\r
-    ULONG           ConnectionsAfterRetry;\r
-    ULONG           LocalDisconnects;\r
-    ULONG           RemoteDisconnects;\r
-    ULONG           LinkFailures;\r
-    ULONG           AdapterFailures;\r
-    ULONG           SessionTimeouts;\r
-    ULONG           CancelledConnections;\r
-    ULONG           RemoteResourceFailures;\r
-    ULONG           LocalResourceFailures;\r
-    ULONG           NotFoundFailures;\r
-    ULONG           NoListenFailures;\r
-    ULONG           DatagramsSent;\r
-    LARGE_INTEGER   DatagramBytesSent;\r
-    ULONG           DatagramsReceived;\r
-    LARGE_INTEGER   DatagramBytesReceived;\r
-    ULONG           PacketsSent;\r
-    ULONG           PacketsReceived;\r
-    ULONG           DataFramesSent;\r
-    LARGE_INTEGER   DataFrameBytesSent;\r
-    ULONG           DataFramesReceived;\r
-    LARGE_INTEGER   DataFrameBytesReceived;\r
-    ULONG           DataFramesResent;\r
-    LARGE_INTEGER   DataFrameBytesResent;\r
-    ULONG           DataFramesRejected;\r
-    LARGE_INTEGER   DataFrameBytesRejected;\r
-    ULONG           ResponseTimerExpirations;\r
-    ULONG           AckTimerExpirations;\r
-    ULONG           MaximumSendWindow;\r
-    ULONG           AverageSendWindow;\r
-    ULONG           PiggybackAckQueued;\r
-    ULONG           PiggybackAckTimeouts;\r
-    LARGE_INTEGER   WastedPacketSpace;\r
-    ULONG           WastedSpacePackets;\r
-    ULONG           NumberOfResources;\r
-    TDI_PROVIDER_RESOURCE_STATS Resources[1];\r
-} TDI_PROVIDER_STATISTICS, *PTDI_PROVIDER_STATISTICS;\r
-\r
-#endif /* __TDI_H */\r
-\r
-/* EOF */\r
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS TDI library
+ * FILE:        include/net/tdi.h
+ * PURPOSE:     TDI definitions for user mode clients
+ */
+#ifndef __TDI_H
+#define __TDI_H
+
+/* FIXME: Missed some definitions in ntddk.h */
+
+/* Could be defined in ndis.h */
+#ifndef __NDIS_H
+typedef signed int INT, *PINT;
+#endif
+
+
+
+/* Basic types */
+
+typedef LONG    TDI_STATUS;
+typedef PVOID   CONNECTION_CONTEXT;
+
+
+
+/* TDI status codes */
+
+#define TDI_SUCCESS             STATUS_SUCCESS
+#define TDI_NO_RESOURCES        STATUS_INSUFFICIENT_RESOURCES
+#define TDI_ADDR_IN_USE         STATUS_ADDRESS_ALREADY_EXISTS
+#define TDI_BAD_ADDR            STATUS_INVALID_ADDRESS_COMPONENT
+#define TDI_NO_FREE_ADDR        STATUS_TOO_MANY_ADDRESSES
+#define TDI_ADDR_INVALID        STATUS_INVALID_ADDRESS
+#define TDI_ADDR_DELETED        STATUS_ADDRESS_CLOSED
+#define TDI_BUFFER_OVERFLOW     STATUS_BUFFER_OVERFLOW
+#define TDI_BAD_EVENT_TYPE      STATUS_INVALID_PARAMETER
+#define TDI_BAD_OPTION          STATUS_INVALID_PARAMETER
+#define TDI_CONN_REFUSED        STATUS_CONNECTION_REFUSED
+#define TDI_INVALID_CONNECTION  STATUS_CONNECTION_INVALID
+#define TDI_ALREADY_ASSOCIATED  STATUS_ADDRESS_ALREADY_ASSOCIATED
+#define TDI_NOT_ASSOCIATED      STATUS_ADDRESS_NOT_ASSOCIATED
+#define TDI_CONNECTION_ACTIVE   STATUS_CONNECTION_ACTIVE
+#define TDI_CONNECTION_ABORTED  STATUS_CONNECTION_ABORTED
+#define TDI_CONNECTION_RESET    STATUS_CONNECTION_RESET
+#define TDI_TIMED_OUT           STATUS_IO_TIMEOUT
+#define TDI_GRACEFUL_DISC       STATUS_GRACEFUL_DISCONNECT
+#define TDI_NOT_ACCEPTED        STATUS_DATA_NOT_ACCEPTED
+#define TDI_MORE_PROCESSING     STATUS_MORE_PROCESSING_REQUIRED
+#define TDI_INVALID_STATE       STATUS_INVALID_DEVICE_STATE
+#define TDI_INVALID_PARAMETER   STATUS_INVALID_PARAMETER
+#define TDI_DEST_NET_UNREACH    STATUS_NETWORK_UNREACHABLE
+#define TDI_DEST_HOST_UNREACH   STATUS_HOST_UNREACHABLE
+#define TDI_DEST_UNREACHABLE    TDI_DEST_HOST_UNREACH
+#define TDI_DEST_PROT_UNREACH   STATUS_PROTOCOL_UNREACHABLE
+#define TDI_DEST_PORT_UNREACH   STATUS_PORT_UNREACHABLE
+#define TDI_INVALID_QUERY       STATUS_INVALID_DEVICE_REQUEST
+#define TDI_REQ_ABORTED         STATUS_REQUEST_ABORTED
+#define TDI_BUFFER_TOO_SMALL    STATUS_BUFFER_TOO_SMALL
+#define TDI_CANCELLED           STATUS_CANCELLED
+#define        TDI_BUFFER_TOO_BIG              STATUS_INVALID_BUFFER_SIZE
+#define TDI_INVALID_REQUEST     STATUS_INVALID_DEVICE_REQUEST
+#define TDI_PENDING             STATUS_PENDING
+#define TDI_ITEM_NOT_FOUND      STATUS_OBJECT_NAME_NOT_FOUND
+
+#define        TDI_OPTION_EOL              0
+#define        TDI_ADDRESS_OPTION_REUSE    1
+#define        TDI_ADDRESS_OPTION_DHCP     2
+
+
+
+/* TDI IOCTL codes */
+
+#define TDI_CONTROL_CODE(Request, Method) \
+            CTL_CODE(FILE_DEVICE_TRANSPORT, Request, Method, FILE_ANY_ACCESS)
+
+#define IOCTL_TDI_ACCEPT                TDI_CONTROL_CODE(0,  METHOD_BUFFERED)
+#define IOCTL_TDI_CONNECT               TDI_CONTROL_CODE(1,  METHOD_BUFFERED)
+#define IOCTL_TDI_DISCONNECT            TDI_CONTROL_CODE(2,  METHOD_BUFFERED)
+#define IOCTL_TDI_LISTEN                TDI_CONTROL_CODE(3,  METHOD_BUFFERED)
+#define IOCTL_TDI_QUERY_INFORMATION     TDI_CONTROL_CODE(4,  METHOD_OUT_DIRECT)
+#define IOCTL_TDI_RECEIVE               TDI_CONTROL_CODE(5,  METHOD_OUT_DIRECT)
+#define IOCTL_TDI_RECEIVE_DATAGRAM      TDI_CONTROL_CODE(6,  METHOD_OUT_DIRECT)
+#define IOCTL_TDI_SEND                  TDI_CONTROL_CODE(7,  METHOD_IN_DIRECT)
+#define IOCTL_TDI_SEND_DATAGRAM         TDI_CONTROL_CODE(8,  METHOD_IN_DIRECT)
+#define IOCTL_TDI_SET_EVENT_HANDLER     TDI_CONTROL_CODE(9,  METHOD_BUFFERED)
+#define IOCTL_TDI_SET_INFORMATION       TDI_CONTROL_CODE(10, METHOD_IN_DIRECT)
+#define IOCTL_TDI_ASSOCIATE_ADDRESS     TDI_CONTROL_CODE(11, METHOD_BUFFERED)
+#define IOCTL_TDI_DISASSOCIATE_ADDRESS  TDI_CONTROL_CODE(12, METHOD_BUFFERED)
+#define IOCTL_TDI_ACTION                TDI_CONTROL_CODE(13, METHOD_OUT_DIRECT)
+
+
+
+/* TDI transport driver dispatch routines */
+
+NTSTATUS TdiDispatchCleanup(
+    IN PDEVICE_OBJECT  DeviceObject,
+    IN PIRP  Irp);
+
+NTSTATUS TdiDispatchClose(
+    IN PDEVICE_OBJECT  DeviceObject,
+    IN PIRP  Irp);
+
+NTSTATUS TdiDispatchCreate(
+    IN PDEVICE_OBJECT  DeviceObject,
+    IN PIRP  Irp);
+
+NTSTATUS TdiDispatchDeviceControl(
+    IN PDEVICE_OBJECT  DeviceObject,
+    IN PIRP  Irp,
+    IN PIO_STACK_LOCATION  IrpSp);
+
+BOOLEAN TdiDispatchFastDeviceControl(
+    IN PFILE_OBJECT  FileObject,
+    IN BOOLEAN  Wait,
+    IN PVOID  InputBuffer,
+    IN ULONG  InputBufferLength,
+    IN OUT PVOID  OutputBuffer,
+    IN ULONG  OutputBufferLength,
+    IN ULONG  IoControlCode,
+    OUT PIO_STATUS_BLOCK  IoStatus);
+
+NTSTATUS TdiDispatchInternalDeviceControl(
+    IN PDEVICE_OBJECT  DeviceObject,
+    IN PIRP  Irp);
+
+
+
+/* TDI structures */
+
+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 _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 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_ADDRESS_INFO
+{
+    ULONG              ActivityCount;
+    TRANSPORT_ADDRESS  Address;
+} TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;
+
+typedef struct _TDI_ACTION_HEADER
+{
+    ULONG   TransportId;
+    USHORT  ActionCode;
+    USHORT  Reserved;
+} TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;
+
+typedef struct _TDI_ADDRESS_8022
+{
+    UCHAR MACAddress[6];
+} TDI_ADDRESS_8022, *PTDI_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)
+
+typedef struct _TDI_ADDRESS_NETBIOS
+{
+    USHORT  NetbiosNameType;
+    UCHAR   NetbiosName[16];
+} TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS;
+
+#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
+
+#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)
+
+typedef struct _TDI_ADDRESS_NETONE
+{
+    USHORT  NetoneNameType;
+    UCHAR   NetoneName[20];
+} TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE;
+
+#define TDI_ADDRESS_NETONE_TYPE_UNIQUE  0x0000
+#define TDI_ADDRESS_NETONE_TYPE_ROTORED 0x0001
+
+#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
+
+#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)
+
+
+/* TDI request structures */
+
+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
+
+/* 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
+
+/* 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 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
+
+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_ADDRESS_IP, *PTA_ADDRESS_IP;
+
+typedef struct _TA_ADDRESS_IPX
+{
+    LONG    TAAddressCount;
+    struct  _AddrIpx {
+        USHORT          AddressLength;
+        USHORT          AddressType;
+        TDI_ADDRESS_IP  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;
+
+
+/* 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
+
+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 Resources[1];
+} TDI_PROVIDER_STATISTICS, *PTDI_PROVIDER_STATISTICS;
+
+#endif /* __TDI_H */
+
+/* EOF */