Added new 'bootcd' target.
[reactos.git] / reactos / include / net / tdi.h
1 /*
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
6 */
7 #ifndef __TDI_H
8 #define __TDI_H
9
10 /* FIXME: Missed some definitions in ntddk.h */
11
12 /* Could be defined elsewhere */
13 //#ifndef INT
14 //typedef signed int INT, *PINT;
15 //#endif
16
17
18
19 /* Basic types */
20
21 typedef LONG TDI_STATUS;
22 typedef PVOID CONNECTION_CONTEXT;
23
24
25
26 /* TDI status codes */
27
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
64
65 #define TDI_OPTION_EOL 0
66 #define TDI_ADDRESS_OPTION_REUSE 1
67 #define TDI_ADDRESS_OPTION_DHCP 2
68
69
70
71 /* TDI IOCTL codes */
72
73 #define TDI_CONTROL_CODE(Request, Method) \
74 CTL_CODE(FILE_DEVICE_TRANSPORT, Request, Method, FILE_ANY_ACCESS)
75
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)
90
91
92
93 /* TDI transport driver dispatch routines */
94
95 NTSTATUS TdiDispatchCleanup(
96 IN PDEVICE_OBJECT DeviceObject,
97 IN PIRP Irp);
98
99 NTSTATUS TdiDispatchClose(
100 IN PDEVICE_OBJECT DeviceObject,
101 IN PIRP Irp);
102
103 NTSTATUS TdiDispatchCreate(
104 IN PDEVICE_OBJECT DeviceObject,
105 IN PIRP Irp);
106
107 NTSTATUS TdiDispatchDeviceControl(
108 IN PDEVICE_OBJECT DeviceObject,
109 IN PIRP Irp,
110 IN PIO_STACK_LOCATION IrpSp);
111
112 BOOLEAN TdiDispatchFastDeviceControl(
113 IN PFILE_OBJECT FileObject,
114 IN BOOLEAN Wait,
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);
121
122 NTSTATUS TdiDispatchInternalDeviceControl(
123 IN PDEVICE_OBJECT DeviceObject,
124 IN PIRP Irp);
125
126
127
128 /* TDI structures */
129
130 typedef struct _TDI_CONNECTION_INFORMATION
131 {
132 LONG UserDataLength;
133 PVOID UserData;
134 LONG OptionsLength;
135 PVOID Options;
136 LONG RemoteAddressLength;
137 PVOID RemoteAddress;
138 } TDI_CONNECTION_INFORMATION, *PTDI_CONNECTION_INFORMATION;
139
140 typedef struct _TDI_REQUEST
141 {
142 union {
143 HANDLE AddressHandle;
144 CONNECTION_CONTEXT ConnectionContext;
145 HANDLE ControlChannel;
146 } Handle;
147 PVOID RequestNotifyObject;
148 PVOID RequestContext;
149 TDI_STATUS TdiStatus;
150 } TDI_REQUEST, *PTDI_REQUEST;
151
152 typedef struct _TDI_REQUEST_STATUS
153 {
154 TDI_STATUS Status;
155 PVOID RequestContext;
156 ULONG BytesTransferred;
157 } TDI_REQUEST_STATUS, *PTDI_REQUEST_STATUS;
158
159
160 typedef struct _TA_ADDRESS
161 {
162 USHORT AddressLength;
163 USHORT AddressType;
164 UCHAR Address[1];
165 } TA_ADDRESS, *PTA_ADDRESS;
166
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
191
192
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)
197
198
199 typedef struct _TRANSPORT_ADDRESS
200 {
201 LONG TAAddressCount;
202 TA_ADDRESS Address[1];
203 } TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS;
204
205 typedef struct _TDI_ADDRESS_INFO
206 {
207 ULONG ActivityCount;
208 TRANSPORT_ADDRESS Address;
209 } TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;
210
211 typedef struct _TDI_ACTION_HEADER
212 {
213 ULONG TransportId;
214 USHORT ActionCode;
215 USHORT Reserved;
216 } TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;
217
218 typedef struct _TDI_ADDRESS_8022
219 {
220 UCHAR MACAddress[6];
221 } TDI_ADDRESS_8022, *PTDI_ADDRESS_8022;
222
223 typedef struct _TDI_ADDRESS_APPLETALK
224 {
225 USHORT Network;
226 UCHAR Node;
227 UCHAR Socket;
228 } TDI_ADDRESS_APPLETALK, *PTDI_ADDRESS_APPLETALK;
229
230 #define TDI_ADDRESS_LENGTH_APPLETALK sizeof(TDI_ADDRESS_APPLETALK)
231
232 typedef struct _TDI_ADDRESS_IP
233 {
234 USHORT sin_port;
235 ULONG in_addr;
236 UCHAR sin_zero[8];
237 } TDI_ADDRESS_IP, *PTDI_ADDRESS_IP;
238
239 #define TDI_ADDRESS_LENGTH_IP sizeof(TDI_ADDRESS_IP)
240
241 typedef struct _TDI_ADDRESS_IPX
242 {
243 ULONG NetworkAddress;
244 UCHAR NodeAddress[6];
245 USHORT Socket;
246 } TDI_ADDRESS_IPX, *PTDI_ADDRESS_IPX;
247
248 #define TDI_ADDRESS_LENGTH_IPX sizeof(TDI_ADDRESS_IPX)
249
250 typedef struct _TDI_ADDRESS_NETBIOS
251 {
252 USHORT NetbiosNameType;
253 UCHAR NetbiosName[16];
254 } TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS;
255
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
260
261 #define TDI_ADDRESS_LENGTH_NETBIOS sizeof(TDI_ADDRESS_NETBIOS)
262
263 typedef struct _TDI_ADDRESS_NETBIOS_EX
264 {
265 UCHAR EndpointName[16];
266 TDI_ADDRESS_NETBIOS NetbiosAddress;
267 } TDI_ADDRESS_NETBIOS_EX, *PTDI_ADDRESS_NETBIOS_EX;
268
269 #define TDI_ADDRESS_LENGTH_NETBIOS_EX sizeof(TDI_ADDRESS_NETBIOS_EX)
270
271 typedef struct _TDI_ADDRESS_NETONE
272 {
273 USHORT NetoneNameType;
274 UCHAR NetoneName[20];
275 } TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE;
276
277 #define TDI_ADDRESS_NETONE_TYPE_UNIQUE 0x0000
278 #define TDI_ADDRESS_NETONE_TYPE_ROTORED 0x0001
279
280 #define TDI_ADDRESS_LENGTH_NETONE sizeof(TDI_ADDRESS_NETONE)
281
282 typedef struct _TDI_ADDRESS_NS
283 {
284 ULONG NetworkAddress;
285 UCHAR NodeAddress[6];
286 USHORT Socket;
287 } TDI_ADDRESS_NS, *PTDI_ADDRESS_NS;
288
289 #define TDI_ADDRESS_LENGTH_NS sizeof(TDI_ADDRESS_NS)
290
291 #define ISO_MAX_ADDR_LENGTH 64
292
293 #define ISO_HIERARCHICAL 0
294 #define ISO_NON_HIERARCHICAL 1
295
296 typedef struct _TDI_ADDRESS_OSI_TSAP
297 {
298 USHORT tp_addr_type;
299 USHORT tp_taddr_len;
300 USHORT tp_tsel_len;
301 UCHAR tp_addr[ISO_MAX_ADDR_LENGTH];
302 } TDI_ADDRESS_OSI_TSAP, *PTDI_ADDRESS_OSI_TSAP;
303
304 #define TDI_ADDRESS_LENGTH_OSI_TSAP sizeof(TDI_ADDRESS_OSI_TSAP)
305
306 typedef struct _TDI_ADDRESS_VNS
307 {
308 UCHAR net_address[4];
309 UCHAR subnet_addr[2];
310 UCHAR port[2];
311 UCHAR hops;
312 UCHAR filler[5];
313 } TDI_ADDRESS_VNS, *PTDI_ADDRESS_VNS;
314
315 #define TDI_ADDRESS_LENGTH_VNS sizeof(TDI_ADDRESS_VNS)
316
317
318 /* TDI request structures */
319
320 typedef struct _TDI_CONNECT_REQUEST
321 {
322 TDI_REQUEST Request;
323 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
324 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
325 LARGE_INTEGER Timeout;
326 } TDI_REQUEST_CONNECT, *PTDI_REQUEST_CONNECT;
327
328 typedef struct _TDI_REQUEST_ACCEPT
329 {
330 TDI_REQUEST Request;
331 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
332 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
333 } TDI_REQUEST_ACCEPT, *PTDI_REQUEST_ACCEPT;
334
335 typedef struct _TDI_REQUEST_LISTEN
336 {
337 TDI_REQUEST Request;
338 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
339 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
340 USHORT ListenFlags;
341 } TDI_REQUEST_LISTEN, *PTDI_REQUEST_LISTEN;
342
343 typedef struct _TDI_DISCONNECT_REQUEST
344 {
345 TDI_REQUEST Request;
346 LARGE_INTEGER Timeout;
347 } TDI_REQUEST_DISCONNECT, *PTDI_REQUEST_DISCONNECT;
348
349 typedef struct _TDI_REQUEST_SEND
350 {
351 TDI_REQUEST Request;
352 USHORT SendFlags;
353 } TDI_REQUEST_SEND, *PTDI_REQUEST_SEND;
354
355 typedef struct _TDI_REQUEST_RECEIVE
356 {
357 TDI_REQUEST Request;
358 USHORT ReceiveFlags;
359 } TDI_REQUEST_RECEIVE, *PTDI_REQUEST_RECEIVE;
360
361 typedef struct _TDI_REQUEST_SEND_DATAGRAM
362 {
363 TDI_REQUEST Request;
364 PTDI_CONNECTION_INFORMATION SendDatagramInformation;
365 } TDI_REQUEST_SEND_DATAGRAM, *PTDI_REQUEST_SEND_DATAGRAM;
366
367 typedef struct _TDI_REQUEST_RECEIVE_DATAGRAM
368 {
369 TDI_REQUEST Request;
370 PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;
371 PTDI_CONNECTION_INFORMATION ReturnInformation;
372 USHORT ReceiveFlags;
373 } TDI_REQUEST_RECEIVE_DATAGRAM, *PTDI_REQUEST_RECEIVE_DATAGRAM;
374
375 typedef struct _TDI_REQUEST_SET_EVENT
376 {
377 TDI_REQUEST Request;
378 LONG EventType;
379 PVOID EventHandler;
380 PVOID EventContext;
381 } TDI_REQUEST_SET_EVENT_HANDLER, *PTDI_REQUEST_SET_EVENT_HANDLER;
382
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
393
394 /* Listen flags */
395 #define TDI_QUERY_ACCEPT 0x00000001
396
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
402
403 /* Disconnect Flags */
404 #define TDI_DISCONNECT_WAIT 0x0001
405 #define TDI_DISCONNECT_ABORT 0x0002
406 #define TDI_DISCONNECT_RELEASE 0x0004
407
408 /* TdiRequest structure for TdiQueryInformation request */
409 typedef struct _TDI_REQUEST_QUERY_INFORMATION
410 {
411 TDI_REQUEST Request;
412 ULONG QueryType;
413 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
414 } TDI_REQUEST_QUERY_INFORMATION, *PTDI_REQUEST_QUERY_INFORMATION;
415
416 /* TdiRequest structure for TdiSetInformation request */
417 typedef struct _TDI_REQUEST_SET_INFORMATION
418 {
419 TDI_REQUEST Request;
420 ULONG SetType;
421 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
422 } TDI_REQUEST_SET_INFORMATION, *PTDI_REQUEST_SET_INFORMATION;
423
424 typedef union _TDI_REQUEST_TYPE
425 {
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;
438
439
440
441 /* Query information types */
442
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
453
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
458
459 typedef struct _TA_APPLETALK_ADDR
460 {
461 LONG TAAddressCount;
462 struct _AddrAtalk {
463 USHORT AddressLength;
464 USHORT AddressType;
465 TDI_ADDRESS_APPLETALK Address[1];
466 } Address[1];
467 } TA_APPLETALK_ADDRESS, *PTA_APPLETALK_ADDRESS;
468
469 typedef struct _TA_ADDRESS_IP
470 {
471 LONG TAAddressCount;
472 struct _AddrIp {
473 USHORT AddressLength;
474 USHORT AddressType;
475 TDI_ADDRESS_IP Address[1];
476 } Address[1];
477 } TA_ADDRESS_IP, *PTA_ADDRESS_IP;
478
479 typedef struct _TA_ADDRESS_IPX
480 {
481 LONG TAAddressCount;
482 struct _AddrIpx {
483 USHORT AddressLength;
484 USHORT AddressType;
485 TDI_ADDRESS_IPX Address[1];
486 } Address[1];
487 } TA_IPX_ADDRESS, *PTA_IPX_ADDRESS;
488
489 typedef struct _TA_NETBIOS_ADDRESS
490 {
491 LONG TAAddressCount;
492 struct _Addr{
493 USHORT AddressLength;
494 USHORT AddressType;
495 TDI_ADDRESS_NETBIOS Address[1];
496 } Address[1];
497 } TA_NETBIOS_ADDRESS, *PTA_NETBIOS_ADDRESS;
498
499 typedef struct _TA_ADDRESS_NS
500 {
501 LONG TAAddressCount;
502 struct _AddrNs {
503 USHORT AddressLength;
504 USHORT AddressType;
505 TDI_ADDRESS_NS Address[1];
506 } Address[1];
507 } TA_NS_ADDRESS, *PTA_NS_ADDRESS;
508
509 typedef struct _TA_ADDRESS_VNS
510 {
511 LONG TAAddressCount;
512 struct _AddrVns {
513 USHORT AddressLength;
514 USHORT AddressType;
515 TDI_ADDRESS_VNS Address[1];
516 } Address[1];
517 } TA_VNS_ADDRESS, *PTA_VNS_ADDRESS;
518
519
520 /* Structures used for TdiQueryInformation and TdiSetInformation */
521
522 typedef struct _TDI_ENDPOINT_INFO
523 {
524 ULONG State;
525 ULONG Event;
526 ULONG TransmittedTsdus;
527 ULONG ReceivedTsdus;
528 ULONG TransmissionErrors;
529 ULONG ReceiveErrors;
530 ULONG MinimumLookaheadData;
531 ULONG MaximumLookaheadData;
532 ULONG PriorityLevel;
533 ULONG SecurityLevel;
534 ULONG SecurityCompartment;
535 } TDI_ENDPOINT_INFO, *PTDI_ENDPOINT_INFO;
536
537 typedef struct _TDI_CONNECTION_INFO
538 {
539 ULONG State;
540 ULONG Event;
541 ULONG TransmittedTsdus;
542 ULONG ReceivedTsdus;
543 ULONG TransmissionErrors;
544 ULONG ReceiveErrors;
545 LARGE_INTEGER Throughput;
546 LARGE_INTEGER Delay;
547 ULONG SendBufferSize;
548 ULONG ReceiveBufferSize;
549 BOOLEAN Unreliable;
550 } TDI_CONNECTION_INFO, *PTDI_CONNECTION_INFO;
551
552 typedef struct _TDI_DATAGRAM_INFO
553 {
554 ULONG MaximumDatagramBytes;
555 ULONG MaximumDatagramCount;
556 } TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO;
557
558 typedef struct _TDI_MAX_DATAGRAM_INFO
559 {
560 ULONG MaxDatagramSize;
561 } TDI_MAX_DATAGRAM_INFO, *PTDI_MAX_DATAGRAM_INFO;
562
563 typedef struct _TDI_PROVIDER_INFO
564 {
565 ULONG Version;
566 ULONG MaxSendSize;
567 ULONG MaxConnectionUserData;
568 ULONG MaxDatagramSize;
569 ULONG ServiceFlags;
570 ULONG MinimumLookaheadData;
571 ULONG MaximumLookaheadData;
572 ULONG NumberOfResources;
573 LARGE_INTEGER StartTime;
574 } TDI_PROVIDER_INFO, *PTDI_PROVIDER_INFO;
575
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
591
592 typedef struct _TDI_PROVIDER_RESOURCE_STATS
593 {
594 ULONG ResourceId;
595 ULONG MaximumResourceUsed;
596 ULONG AverageResourceUsed;
597 ULONG ResourceExhausted;
598 } TDI_PROVIDER_RESOURCE_STATS, *PTDI_PROVIDER_RESOURCE_STATS;
599
600 typedef struct _TDI_PROVIDER_STATISTICS
601 {
602 ULONG Version;
603 ULONG OpenConnections;
604 ULONG ConnectionsAfterNoRetry;
605 ULONG ConnectionsAfterRetry;
606 ULONG LocalDisconnects;
607 ULONG RemoteDisconnects;
608 ULONG LinkFailures;
609 ULONG AdapterFailures;
610 ULONG SessionTimeouts;
611 ULONG CancelledConnections;
612 ULONG RemoteResourceFailures;
613 ULONG LocalResourceFailures;
614 ULONG NotFoundFailures;
615 ULONG NoListenFailures;
616 ULONG DatagramsSent;
617 LARGE_INTEGER DatagramBytesSent;
618 ULONG DatagramsReceived;
619 LARGE_INTEGER DatagramBytesReceived;
620 ULONG PacketsSent;
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;
641
642 #endif /* __TDI_H */
643
644 /* EOF */