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;