2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TDI library
4 * FILE: include/net/tdi.h
5 * PURPOSE: TDI definitions for user mode clients
10 /* FIXME: Missed some definitions in ntddk.h */
12 /* Could be defined elsewhere */
14 //typedef signed int INT, *PINT;
21 typedef LONG TDI_STATUS
;
22 typedef PVOID CONNECTION_CONTEXT
;
26 /* TDI status codes */
28 #define TDI_SUCCESS STATUS_SUCCESS
29 #define TDI_NO_RESOURCES STATUS_INSUFFICIENT_RESOURCES
30 #define TDI_ADDR_IN_USE STATUS_ADDRESS_ALREADY_EXISTS
31 #define TDI_BAD_ADDR STATUS_INVALID_ADDRESS_COMPONENT
32 #define TDI_NO_FREE_ADDR STATUS_TOO_MANY_ADDRESSES
33 #define TDI_ADDR_INVALID STATUS_INVALID_ADDRESS
34 #define TDI_ADDR_DELETED STATUS_ADDRESS_CLOSED
35 #define TDI_BUFFER_OVERFLOW STATUS_BUFFER_OVERFLOW
36 #define TDI_BAD_EVENT_TYPE STATUS_INVALID_PARAMETER
37 #define TDI_BAD_OPTION STATUS_INVALID_PARAMETER
38 #define TDI_CONN_REFUSED STATUS_CONNECTION_REFUSED
39 #define TDI_INVALID_CONNECTION STATUS_CONNECTION_INVALID
40 #define TDI_ALREADY_ASSOCIATED STATUS_ADDRESS_ALREADY_ASSOCIATED
41 #define TDI_NOT_ASSOCIATED STATUS_ADDRESS_NOT_ASSOCIATED
42 #define TDI_CONNECTION_ACTIVE STATUS_CONNECTION_ACTIVE
43 #define TDI_CONNECTION_ABORTED STATUS_CONNECTION_ABORTED
44 #define TDI_CONNECTION_RESET STATUS_CONNECTION_RESET
45 #define TDI_TIMED_OUT STATUS_IO_TIMEOUT
46 #define TDI_GRACEFUL_DISC STATUS_GRACEFUL_DISCONNECT
47 #define TDI_NOT_ACCEPTED STATUS_DATA_NOT_ACCEPTED
48 #define TDI_MORE_PROCESSING STATUS_MORE_PROCESSING_REQUIRED
49 #define TDI_INVALID_STATE STATUS_INVALID_DEVICE_STATE
50 #define TDI_INVALID_PARAMETER STATUS_INVALID_PARAMETER
51 #define TDI_DEST_NET_UNREACH STATUS_NETWORK_UNREACHABLE
52 #define TDI_DEST_HOST_UNREACH STATUS_HOST_UNREACHABLE
53 #define TDI_DEST_UNREACHABLE TDI_DEST_HOST_UNREACH
54 #define TDI_DEST_PROT_UNREACH STATUS_PROTOCOL_UNREACHABLE
55 #define TDI_DEST_PORT_UNREACH STATUS_PORT_UNREACHABLE
56 #define TDI_INVALID_QUERY STATUS_INVALID_DEVICE_REQUEST
57 #define TDI_REQ_ABORTED STATUS_REQUEST_ABORTED
58 #define TDI_BUFFER_TOO_SMALL STATUS_BUFFER_TOO_SMALL
59 #define TDI_CANCELLED STATUS_CANCELLED
60 #define TDI_BUFFER_TOO_BIG STATUS_INVALID_BUFFER_SIZE
61 #define TDI_INVALID_REQUEST STATUS_INVALID_DEVICE_REQUEST
62 #define TDI_PENDING STATUS_PENDING
63 #define TDI_ITEM_NOT_FOUND STATUS_OBJECT_NAME_NOT_FOUND
65 #define TDI_OPTION_EOL 0
66 #define TDI_ADDRESS_OPTION_REUSE 1
67 #define TDI_ADDRESS_OPTION_DHCP 2
73 #define TDI_CONTROL_CODE(Request, Method) \
74 CTL_CODE(FILE_DEVICE_TRANSPORT, Request, Method, FILE_ANY_ACCESS)
76 #define IOCTL_TDI_ACCEPT TDI_CONTROL_CODE(0, METHOD_BUFFERED)
77 #define IOCTL_TDI_CONNECT TDI_CONTROL_CODE(1, METHOD_BUFFERED)
78 #define IOCTL_TDI_DISCONNECT TDI_CONTROL_CODE(2, METHOD_BUFFERED)
79 #define IOCTL_TDI_LISTEN TDI_CONTROL_CODE(3, METHOD_BUFFERED)
80 #define IOCTL_TDI_QUERY_INFORMATION TDI_CONTROL_CODE(4, METHOD_OUT_DIRECT)
81 #define IOCTL_TDI_RECEIVE TDI_CONTROL_CODE(5, METHOD_OUT_DIRECT)
82 #define IOCTL_TDI_RECEIVE_DATAGRAM TDI_CONTROL_CODE(6, METHOD_OUT_DIRECT)
83 #define IOCTL_TDI_SEND TDI_CONTROL_CODE(7, METHOD_IN_DIRECT)
84 #define IOCTL_TDI_SEND_DATAGRAM TDI_CONTROL_CODE(8, METHOD_IN_DIRECT)
85 #define IOCTL_TDI_SET_EVENT_HANDLER TDI_CONTROL_CODE(9, METHOD_BUFFERED)
86 #define IOCTL_TDI_SET_INFORMATION TDI_CONTROL_CODE(10, METHOD_IN_DIRECT)
87 #define IOCTL_TDI_ASSOCIATE_ADDRESS TDI_CONTROL_CODE(11, METHOD_BUFFERED)
88 #define IOCTL_TDI_DISASSOCIATE_ADDRESS TDI_CONTROL_CODE(12, METHOD_BUFFERED)
89 #define IOCTL_TDI_ACTION TDI_CONTROL_CODE(13, METHOD_OUT_DIRECT)
93 /* TDI transport driver dispatch routines */
95 NTSTATUS
TdiDispatchCleanup(
96 IN PDEVICE_OBJECT DeviceObject
,
99 NTSTATUS
TdiDispatchClose(
100 IN PDEVICE_OBJECT DeviceObject
,
103 NTSTATUS
TdiDispatchCreate(
104 IN PDEVICE_OBJECT DeviceObject
,
107 NTSTATUS
TdiDispatchDeviceControl(
108 IN PDEVICE_OBJECT DeviceObject
,
110 IN PIO_STACK_LOCATION IrpSp
);
112 BOOLEAN
TdiDispatchFastDeviceControl(
113 IN PFILE_OBJECT FileObject
,
115 IN PVOID InputBuffer
,
116 IN ULONG InputBufferLength
,
117 IN OUT PVOID OutputBuffer
,
118 IN ULONG OutputBufferLength
,
119 IN ULONG IoControlCode
,
120 OUT PIO_STATUS_BLOCK IoStatus
);
122 NTSTATUS
TdiDispatchInternalDeviceControl(
123 IN PDEVICE_OBJECT DeviceObject
,
130 typedef struct _TDI_CONNECTION_INFORMATION
136 LONG RemoteAddressLength
;
138 } TDI_CONNECTION_INFORMATION
, *PTDI_CONNECTION_INFORMATION
;
140 typedef struct _TDI_REQUEST
143 HANDLE AddressHandle
;
144 CONNECTION_CONTEXT ConnectionContext
;
145 HANDLE ControlChannel
;
147 PVOID RequestNotifyObject
;
148 PVOID RequestContext
;
149 TDI_STATUS TdiStatus
;
150 } TDI_REQUEST
, *PTDI_REQUEST
;
152 typedef struct _TDI_REQUEST_STATUS
155 PVOID RequestContext
;
156 ULONG BytesTransferred
;
157 } TDI_REQUEST_STATUS
, *PTDI_REQUEST_STATUS
;
160 typedef struct _TA_ADDRESS
162 USHORT AddressLength
;
165 } TA_ADDRESS
, *PTA_ADDRESS
;
167 #define TDI_ADDRESS_TYPE_UNSPEC 0
168 #define TDI_ADDRESS_TYPE_UNIX 1
169 #define TDI_ADDRESS_TYPE_IP 2
170 #define TDI_ADDRESS_TYPE_IMPLINK 3
171 #define TDI_ADDRESS_TYPE_PUP 4
172 #define TDI_ADDRESS_TYPE_CHAOS 5
173 #define TDI_ADDRESS_TYPE_NS 6
174 #define TDI_ADDRESS_TYPE_IPX 6
175 #define TDI_ADDRESS_TYPE_NBS 7
176 #define TDI_ADDRESS_TYPE_ECMA 8
177 #define TDI_ADDRESS_TYPE_DATAKIT 9
178 #define TDI_ADDRESS_TYPE_CCITT 10
179 #define TDI_ADDRESS_TYPE_SNA 11
180 #define TDI_ADDRESS_TYPE_DECnet 12
181 #define TDI_ADDRESS_TYPE_DLI 13
182 #define TDI_ADDRESS_TYPE_LAT 14
183 #define TDI_ADDRESS_TYPE_HYLINK 15
184 #define TDI_ADDRESS_TYPE_APPLETALK 16
185 #define TDI_ADDRESS_TYPE_NETBIOS 17
186 #define TDI_ADDRESS_TYPE_8022 18
187 #define TDI_ADDRESS_TYPE_OSI_TSAP 19
188 #define TDI_ADDRESS_TYPE_NETONE 20
189 #define TDI_ADDRESS_TYPE_VNS 21
190 #define TDI_ADDRESS_TYPE_NETBIOS_EX 22
193 #define TdiTransportAddress "TransportAddress"
194 #define TdiConnectionContext "ConnectionContext"
195 #define TDI_TRANSPORT_ADDRESS_LENGTH (sizeof(TdiTransportAddress) - 1)
196 #define TDI_CONNECTION_CONTEXT_LENGTH (sizeof(TdiConnectionContext) - 1)
199 typedef struct _TRANSPORT_ADDRESS
202 TA_ADDRESS Address
[1];
203 } TRANSPORT_ADDRESS
, *PTRANSPORT_ADDRESS
;
205 typedef struct _TDI_ADDRESS_INFO
208 TRANSPORT_ADDRESS Address
;
209 } TDI_ADDRESS_INFO
, *PTDI_ADDRESS_INFO
;
211 typedef struct _TDI_ACTION_HEADER
216 } TDI_ACTION_HEADER
, *PTDI_ACTION_HEADER
;
218 typedef struct _TDI_ADDRESS_8022
221 } TDI_ADDRESS_8022
, *PTDI_ADDRESS_8022
;
223 typedef struct _TDI_ADDRESS_APPLETALK
228 } TDI_ADDRESS_APPLETALK
, *PTDI_ADDRESS_APPLETALK
;
230 #define TDI_ADDRESS_LENGTH_APPLETALK sizeof(TDI_ADDRESS_APPLETALK)
232 typedef struct _TDI_ADDRESS_IP
237 } TDI_ADDRESS_IP
, *PTDI_ADDRESS_IP
;
239 #define TDI_ADDRESS_LENGTH_IP sizeof(TDI_ADDRESS_IP)
241 typedef struct _TDI_ADDRESS_IPX
243 ULONG NetworkAddress
;
244 UCHAR NodeAddress
[6];
246 } TDI_ADDRESS_IPX
, *PTDI_ADDRESS_IPX
;
248 #define TDI_ADDRESS_LENGTH_IPX sizeof(TDI_ADDRESS_IPX)
250 typedef struct _TDI_ADDRESS_NETBIOS
252 USHORT NetbiosNameType
;
253 UCHAR NetbiosName
[16];
254 } TDI_ADDRESS_NETBIOS
, *PTDI_ADDRESS_NETBIOS
;
256 #define TDI_ADDRESS_NETBIOS_TYPE_UNIQUE 0x0000
257 #define TDI_ADDRESS_NETBIOS_TYPE_GROUP 0x0001
258 #define TDI_ADDRESS_NETBIOS_TYPE_QUICK_UNIQUE 0x0002
259 #define TDI_ADDRESS_NETBIOS_TYPE_QUICK_GROUP 0x0003
261 #define TDI_ADDRESS_LENGTH_NETBIOS sizeof(TDI_ADDRESS_NETBIOS)
263 typedef struct _TDI_ADDRESS_NETBIOS_EX
265 UCHAR EndpointName
[16];
266 TDI_ADDRESS_NETBIOS NetbiosAddress
;
267 } TDI_ADDRESS_NETBIOS_EX
, *PTDI_ADDRESS_NETBIOS_EX
;
269 #define TDI_ADDRESS_LENGTH_NETBIOS_EX sizeof(TDI_ADDRESS_NETBIOS_EX)
271 typedef struct _TDI_ADDRESS_NETONE
273 USHORT NetoneNameType
;
274 UCHAR NetoneName
[20];
275 } TDI_ADDRESS_NETONE
, *PTDI_ADDRESS_NETONE
;
277 #define TDI_ADDRESS_NETONE_TYPE_UNIQUE 0x0000
278 #define TDI_ADDRESS_NETONE_TYPE_ROTORED 0x0001
280 #define TDI_ADDRESS_LENGTH_NETONE sizeof(TDI_ADDRESS_NETONE)
282 typedef struct _TDI_ADDRESS_NS
284 ULONG NetworkAddress
;
285 UCHAR NodeAddress
[6];
287 } TDI_ADDRESS_NS
, *PTDI_ADDRESS_NS
;
289 #define TDI_ADDRESS_LENGTH_NS sizeof(TDI_ADDRESS_NS)
291 #define ISO_MAX_ADDR_LENGTH 64
293 #define ISO_HIERARCHICAL 0
294 #define ISO_NON_HIERARCHICAL 1
296 typedef struct _TDI_ADDRESS_OSI_TSAP
301 UCHAR tp_addr
[ISO_MAX_ADDR_LENGTH
];
302 } TDI_ADDRESS_OSI_TSAP
, *PTDI_ADDRESS_OSI_TSAP
;
304 #define TDI_ADDRESS_LENGTH_OSI_TSAP sizeof(TDI_ADDRESS_OSI_TSAP)
306 typedef struct _TDI_ADDRESS_VNS
308 UCHAR net_address
[4];
309 UCHAR subnet_addr
[2];
313 } TDI_ADDRESS_VNS
, *PTDI_ADDRESS_VNS
;
315 #define TDI_ADDRESS_LENGTH_VNS sizeof(TDI_ADDRESS_VNS)
318 /* TDI request structures */
320 typedef struct _TDI_CONNECT_REQUEST
323 PTDI_CONNECTION_INFORMATION RequestConnectionInformation
;
324 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation
;
325 LARGE_INTEGER Timeout
;
326 } TDI_REQUEST_CONNECT
, *PTDI_REQUEST_CONNECT
;
328 typedef struct _TDI_REQUEST_ACCEPT
331 PTDI_CONNECTION_INFORMATION RequestConnectionInformation
;
332 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation
;
333 } TDI_REQUEST_ACCEPT
, *PTDI_REQUEST_ACCEPT
;
335 typedef struct _TDI_REQUEST_LISTEN
338 PTDI_CONNECTION_INFORMATION RequestConnectionInformation
;
339 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation
;
341 } TDI_REQUEST_LISTEN
, *PTDI_REQUEST_LISTEN
;
343 typedef struct _TDI_DISCONNECT_REQUEST
346 LARGE_INTEGER Timeout
;
347 } TDI_REQUEST_DISCONNECT
, *PTDI_REQUEST_DISCONNECT
;
349 typedef struct _TDI_REQUEST_SEND
353 } TDI_REQUEST_SEND
, *PTDI_REQUEST_SEND
;
355 typedef struct _TDI_REQUEST_RECEIVE
359 } TDI_REQUEST_RECEIVE
, *PTDI_REQUEST_RECEIVE
;
361 typedef struct _TDI_REQUEST_SEND_DATAGRAM
364 PTDI_CONNECTION_INFORMATION SendDatagramInformation
;
365 } TDI_REQUEST_SEND_DATAGRAM
, *PTDI_REQUEST_SEND_DATAGRAM
;
367 typedef struct _TDI_REQUEST_RECEIVE_DATAGRAM
370 PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation
;
371 PTDI_CONNECTION_INFORMATION ReturnInformation
;
373 } TDI_REQUEST_RECEIVE_DATAGRAM
, *PTDI_REQUEST_RECEIVE_DATAGRAM
;
375 typedef struct _TDI_REQUEST_SET_EVENT
381 } TDI_REQUEST_SET_EVENT_HANDLER
, *PTDI_REQUEST_SET_EVENT_HANDLER
;
383 #define TDI_RECEIVE_BROADCAST 0x00000004
384 #define TDI_RECEIVE_MULTICAST 0x00000008
385 #define TDI_RECEIVE_PARTIAL 0x00000010
386 #define TDI_RECEIVE_NORMAL 0x00000020
387 #define TDI_RECEIVE_EXPEDITED 0x00000040
388 #define TDI_RECEIVE_PEEK 0x00000080
389 #define TDI_RECEIVE_NO_RESPONSE_EXP 0x00000100
390 #define TDI_RECEIVE_COPY_LOOKAHEAD 0x00000200
391 #define TDI_RECEIVE_ENTIRE_MESSAGE 0x00000400
392 #define TDI_RECEIVE_AT_DISPATCH_LEVEL 0x00000800
395 #define TDI_QUERY_ACCEPT 0x00000001
397 /* Options used for both SendOptions and ReceiveIndicators */
398 #define TDI_SEND_EXPEDITED 0x0020
399 #define TDI_SEND_PARTIAL 0x0040
400 #define TDI_SEND_NO_RESPONSE_EXPECTED 0x0080
401 #define TDI_SEND_NON_BLOCKING 0x0100
403 /* Disconnect Flags */
404 #define TDI_DISCONNECT_WAIT 0x0001
405 #define TDI_DISCONNECT_ABORT 0x0002
406 #define TDI_DISCONNECT_RELEASE 0x0004
408 /* TdiRequest structure for TdiQueryInformation request */
409 typedef struct _TDI_REQUEST_QUERY_INFORMATION
413 PTDI_CONNECTION_INFORMATION RequestConnectionInformation
;
414 } TDI_REQUEST_QUERY_INFORMATION
, *PTDI_REQUEST_QUERY_INFORMATION
;
416 /* TdiRequest structure for TdiSetInformation request */
417 typedef struct _TDI_REQUEST_SET_INFORMATION
421 PTDI_CONNECTION_INFORMATION RequestConnectionInformation
;
422 } TDI_REQUEST_SET_INFORMATION
, *PTDI_REQUEST_SET_INFORMATION
;
424 typedef union _TDI_REQUEST_TYPE
426 TDI_REQUEST_ACCEPT TdiAccept
;
427 TDI_REQUEST_CONNECT TdiConnect
;
428 TDI_REQUEST_DISCONNECT TdiDisconnect
;
429 TDI_REQUEST_LISTEN TdiListen
;
430 TDI_REQUEST_QUERY_INFORMATION TdiQueryInformation
;
431 TDI_REQUEST_RECEIVE TdiReceive
;
432 TDI_REQUEST_RECEIVE_DATAGRAM TdiReceiveDatagram
;
433 TDI_REQUEST_SEND TdiSend
;
434 TDI_REQUEST_SEND_DATAGRAM TdiSendDatagram
;
435 TDI_REQUEST_SET_EVENT_HANDLER TdiSetEventHandler
;
436 TDI_REQUEST_SET_INFORMATION TdiSetInformation
;
437 } TDI_REQUEST_TYPE
, *PTDI_REQUEST_TYPE
;
441 /* Query information types */
443 /* Generic query info types that must be supported by all transports */
444 #define TDI_QUERY_BROADCAST_ADDRESS 0x00000001
445 #define TDI_QUERY_PROVIDER_INFO 0x00000002
446 #define TDI_QUERY_ADDRESS_INFO 0x00000003
447 #define TDI_QUERY_CONNECTION_INFO 0x00000004
448 #define TDI_QUERY_PROVIDER_STATISTICS 0x00000005
449 #define TDI_QUERY_DATAGRAM_INFO 0x00000006
450 #define TDI_QUERY_DATA_LINK_ADDRESS 0x00000007
451 #define TDI_QUERY_NETWORK_ADDRESS 0x00000008
452 #define TDI_QUERY_MAX_DATAGRAM_INFO 0x00000009
454 /* Netbios specific query information types */
455 #define TDI_QUERY_ADAPTER_STATUS 0x00000100
456 #define TDI_QUERY_SESSION_STATUS 0x00000200
457 #define TDI_QUERY_FIND_NAME 0x00000300
459 typedef struct _TA_APPLETALK_ADDR
463 USHORT AddressLength
;
465 TDI_ADDRESS_APPLETALK Address
[1];
467 } TA_APPLETALK_ADDRESS
, *PTA_APPLETALK_ADDRESS
;
469 typedef struct _TA_ADDRESS_IP
473 USHORT AddressLength
;
475 TDI_ADDRESS_IP Address
[1];
477 } TA_ADDRESS_IP
, *PTA_ADDRESS_IP
;
479 typedef struct _TA_ADDRESS_IPX
483 USHORT AddressLength
;
485 TDI_ADDRESS_IPX Address
[1];
487 } TA_IPX_ADDRESS
, *PTA_IPX_ADDRESS
;
489 typedef struct _TA_NETBIOS_ADDRESS
493 USHORT AddressLength
;
495 TDI_ADDRESS_NETBIOS Address
[1];
497 } TA_NETBIOS_ADDRESS
, *PTA_NETBIOS_ADDRESS
;
499 typedef struct _TA_ADDRESS_NS
503 USHORT AddressLength
;
505 TDI_ADDRESS_NS Address
[1];
507 } TA_NS_ADDRESS
, *PTA_NS_ADDRESS
;
509 typedef struct _TA_ADDRESS_VNS
513 USHORT AddressLength
;
515 TDI_ADDRESS_VNS Address
[1];
517 } TA_VNS_ADDRESS
, *PTA_VNS_ADDRESS
;
520 /* Structures used for TdiQueryInformation and TdiSetInformation */
522 typedef struct _TDI_ENDPOINT_INFO
526 ULONG TransmittedTsdus
;
528 ULONG TransmissionErrors
;
530 ULONG MinimumLookaheadData
;
531 ULONG MaximumLookaheadData
;
534 ULONG SecurityCompartment
;
535 } TDI_ENDPOINT_INFO
, *PTDI_ENDPOINT_INFO
;
537 typedef struct _TDI_CONNECTION_INFO
541 ULONG TransmittedTsdus
;
543 ULONG TransmissionErrors
;
545 LARGE_INTEGER Throughput
;
547 ULONG SendBufferSize
;
548 ULONG ReceiveBufferSize
;
550 } TDI_CONNECTION_INFO
, *PTDI_CONNECTION_INFO
;
552 typedef struct _TDI_DATAGRAM_INFO
554 ULONG MaximumDatagramBytes
;
555 ULONG MaximumDatagramCount
;
556 } TDI_DATAGRAM_INFO
, *PTDI_DATAGRAM_INFO
;
558 typedef struct _TDI_MAX_DATAGRAM_INFO
560 ULONG MaxDatagramSize
;
561 } TDI_MAX_DATAGRAM_INFO
, *PTDI_MAX_DATAGRAM_INFO
;
563 typedef struct _TDI_PROVIDER_INFO
567 ULONG MaxConnectionUserData
;
568 ULONG MaxDatagramSize
;
570 ULONG MinimumLookaheadData
;
571 ULONG MaximumLookaheadData
;
572 ULONG NumberOfResources
;
573 LARGE_INTEGER StartTime
;
574 } TDI_PROVIDER_INFO
, *PTDI_PROVIDER_INFO
;
576 #define TDI_SERVICE_CONNECTION_MODE 0x00000001
577 #define TDI_SERVICE_ORDERLY_RELEASE 0x00000002
578 #define TDI_SERVICE_CONNECTIONLESS_MODE 0x00000004
579 #define TDI_SERVICE_ERROR_FREE_DELIVERY 0x00000008
580 #define TDI_SERVICE_SECURITY_LEVEL 0x00000010
581 #define TDI_SERVICE_BROADCAST_SUPPORTED 0x00000020
582 #define TDI_SERVICE_MULTICAST_SUPPORTED 0x00000040
583 #define TDI_SERVICE_DELAYED_ACCEPTANCE 0x00000080
584 #define TDI_SERVICE_EXPEDITED_DATA 0x00000100
585 #define TDI_SERVICE_INTERNAL_BUFFERING 0x00000200
586 #define TDI_SERVICE_ROUTE_DIRECTED 0x00000400
587 #define TDI_SERVICE_NO_ZERO_LENGTH 0x00000800
588 #define TDI_SERVICE_POINT_TO_POINT 0x00001000
589 #define TDI_SERVICE_MESSAGE_MODE 0x00002000
590 #define TDI_SERVICE_HALF_DUPLEX 0x00004000
592 typedef struct _TDI_PROVIDER_RESOURCE_STATS
595 ULONG MaximumResourceUsed
;
596 ULONG AverageResourceUsed
;
597 ULONG ResourceExhausted
;
598 } TDI_PROVIDER_RESOURCE_STATS
, *PTDI_PROVIDER_RESOURCE_STATS
;
600 typedef struct _TDI_PROVIDER_STATISTICS
603 ULONG OpenConnections
;
604 ULONG ConnectionsAfterNoRetry
;
605 ULONG ConnectionsAfterRetry
;
606 ULONG LocalDisconnects
;
607 ULONG RemoteDisconnects
;
609 ULONG AdapterFailures
;
610 ULONG SessionTimeouts
;
611 ULONG CancelledConnections
;
612 ULONG RemoteResourceFailures
;
613 ULONG LocalResourceFailures
;
614 ULONG NotFoundFailures
;
615 ULONG NoListenFailures
;
617 LARGE_INTEGER DatagramBytesSent
;
618 ULONG DatagramsReceived
;
619 LARGE_INTEGER DatagramBytesReceived
;
621 ULONG PacketsReceived
;
622 ULONG DataFramesSent
;
623 LARGE_INTEGER DataFrameBytesSent
;
624 ULONG DataFramesReceived
;
625 LARGE_INTEGER DataFrameBytesReceived
;
626 ULONG DataFramesResent
;
627 LARGE_INTEGER DataFrameBytesResent
;
628 ULONG DataFramesRejected
;
629 LARGE_INTEGER DataFrameBytesRejected
;
630 ULONG ResponseTimerExpirations
;
631 ULONG AckTimerExpirations
;
632 ULONG MaximumSendWindow
;
633 ULONG AverageSendWindow
;
634 ULONG PiggybackAckQueued
;
635 ULONG PiggybackAckTimeouts
;
636 LARGE_INTEGER WastedPacketSpace
;
637 ULONG WastedSpacePackets
;
638 ULONG NumberOfResources
;
639 TDI_PROVIDER_RESOURCE_STATS Resources
[1];
640 } TDI_PROVIDER_STATISTICS
, *PTDI_PROVIDER_STATISTICS
;