ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/MinGW/include/ddk/tdikrnl.h
Revision: 1046
Committed: Mon Aug 29 13:19:38 2016 UTC (9 years, 2 months ago) by alloc
Content type: text/x-chdr
File size: 37518 byte(s)
Log Message:
Daodan: Added Windows MinGW and build batch file

File Contents

# Content
1 /*
2 * tdikrnl.h
3 *
4 * TDI kernel mode definitions
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef __TDIKRNL_H
24 #define __TDIKRNL_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #include "ntddk.h"
35 #include "tdi.h"
36
37 #if defined(_TDI_)
38 #define TDIKRNLAPI DECLSPEC_EXPORT
39 #else
40 #define TDIKRNLAPI DECLSPEC_IMPORT
41 #endif
42
43
44 typedef struct _TDI_REQUEST_KERNEL {
45 ULONG RequestFlags;
46 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
47 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
48 PVOID RequestSpecific;
49 } TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL;
50
51 /* Request codes */
52 #define TDI_ASSOCIATE_ADDRESS 0x01
53 #define TDI_DISASSOCIATE_ADDRESS 0x02
54 #define TDI_CONNECT 0x03
55 #define TDI_LISTEN 0x04
56 #define TDI_ACCEPT 0x05
57 #define TDI_DISCONNECT 0x06
58 #define TDI_SEND 0x07
59 #define TDI_RECEIVE 0x08
60 #define TDI_SEND_DATAGRAM 0x09
61 #define TDI_RECEIVE_DATAGRAM 0x0A
62 #define TDI_SET_EVENT_HANDLER 0x0B
63 #define TDI_QUERY_INFORMATION 0x0C
64 #define TDI_SET_INFORMATION 0x0D
65 #define TDI_ACTION 0x0E
66
67 #define TDI_DIRECT_SEND 0x27
68 #define TDI_DIRECT_SEND_DATAGRAM 0x29
69
70 #define TDI_TRANSPORT_ADDRESS_FILE 1
71 #define TDI_CONNECTION_FILE 2
72 #define TDI_CONTROL_CHANNEL_FILE 3
73
74 /* Internal TDI IOCTLS */
75 #define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER _TDI_CONTROL_CODE(0x80, METHOD_NEITHER)
76 #define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER _TDI_CONTROL_CODE(0x81, METHOD_NEITHER)
77
78 /* TdiAssociateAddress */
79 typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE {
80 HANDLE AddressHandle;
81 } TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;
82
83 /* TdiDisassociateAddress */
84 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,
85 *PTDI_REQUEST_KERNEL_DISASSOCIATE;
86
87 /* TdiAccept */
88 typedef struct _TDI_REQUEST_KERNEL_ACCEPT {
89 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
90 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
91 } TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT;
92
93 /* TdiConnect */
94 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_CONNECT,
95 *PTDI_REQUEST_KERNEL_CONNECT;
96
97 /* TdiDisconnect */
98 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISCONNECT,
99 *PTDI_REQUEST_KERNEL_DISCONNECT;
100
101 /* TdiListen */
102 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN,
103 *PTDI_REQUEST_KERNEL_LISTEN;
104
105 /* TdiReceive */
106 typedef struct _TDI_REQUEST_KERNEL_RECEIVE {
107 ULONG ReceiveLength;
108 ULONG ReceiveFlags;
109 } TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;
110
111 /* TdiReceiveDatagram */
112 typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG {
113 ULONG ReceiveLength;
114 PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;
115 PTDI_CONNECTION_INFORMATION ReturnDatagramInformation;
116 ULONG ReceiveFlags;
117 } TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG;
118
119 /* TdiSend */
120 typedef struct _TDI_REQUEST_KERNEL_SEND {
121 ULONG SendLength;
122 ULONG SendFlags;
123 } TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;
124
125 /* TdiSendDatagram */
126 typedef struct _TDI_REQUEST_KERNEL_SENDDG {
127 ULONG SendLength;
128 PTDI_CONNECTION_INFORMATION SendDatagramInformation;
129 } TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;
130
131 /* TdiSetEventHandler */
132 typedef struct _TDI_REQUEST_KERNEL_SET_EVENT {
133 LONG EventType;
134 PVOID EventHandler;
135 PVOID EventContext;
136 } TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT;
137
138 /* TdiQueryInformation */
139 typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO {
140 LONG QueryType;
141 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
142 } TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;
143
144 /* TdiSetInformation */
145 typedef struct _TDI_REQUEST_KERNEL_SET_INFO {
146 LONG SetType;
147 PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
148 } TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;
149
150
151 /* Event types */
152 #define TDI_EVENT_CONNECT 0
153 #define TDI_EVENT_DISCONNECT 1
154 #define TDI_EVENT_ERROR 2
155 #define TDI_EVENT_RECEIVE 3
156 #define TDI_EVENT_RECEIVE_DATAGRAM 4
157 #define TDI_EVENT_RECEIVE_EXPEDITED 5
158 #define TDI_EVENT_SEND_POSSIBLE 6
159 #define TDI_EVENT_CHAINED_RECEIVE 7
160 #define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM 8
161 #define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9
162 #define TDI_EVENT_ERROR_EX 10
163
164 typedef NTSTATUS DDKAPI
165 (*PTDI_IND_CONNECT)(
166 /*IN*/ PVOID TdiEventContext,
167 /*IN*/ LONG RemoteAddressLength,
168 /*IN*/ PVOID RemoteAddress,
169 /*IN*/ LONG UserDataLength,
170 /*IN*/ PVOID UserData,
171 /*IN*/ LONG OptionsLength,
172 /*IN*/ PVOID Options,
173 /*OUT*/ CONNECTION_CONTEXT *ConnectionContext,
174 /*OUT*/ PIRP *AcceptIrp);
175
176 TDIKRNLAPI
177 NTSTATUS
178 DDKAPI
179 TdiDefaultConnectHandler(
180 /*IN*/ PVOID TdiEventContext,
181 /*IN*/ LONG RemoteAddressLength,
182 /*IN*/ PVOID RemoteAddress,
183 /*IN*/ LONG UserDataLength,
184 /*IN*/ PVOID UserData,
185 /*IN*/ LONG OptionsLength,
186 /*IN*/ PVOID Options,
187 /*OUT*/ CONNECTION_CONTEXT *ConnectionContext,
188 /*OUT*/ PIRP *AcceptIrp);
189
190 typedef NTSTATUS DDKAPI
191 (*PTDI_IND_DISCONNECT)(
192 /*IN*/ PVOID TdiEventContext,
193 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
194 /*IN*/ LONG DisconnectDataLength,
195 /*IN*/ PVOID DisconnectData,
196 /*IN*/ LONG DisconnectInformationLength,
197 /*IN*/ PVOID DisconnectInformation,
198 /*IN*/ ULONG DisconnectFlags);
199
200 TDIKRNLAPI
201 NTSTATUS
202 DDKAPI
203 TdiDefaultDisconnectHandler(
204 /*IN*/ PVOID TdiEventContext,
205 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
206 /*IN*/ LONG DisconnectDataLength,
207 /*IN*/ PVOID DisconnectData,
208 /*IN*/ LONG DisconnectInformationLength,
209 /*IN*/ PVOID DisconnectInformation,
210 /*IN*/ ULONG DisconnectFlags);
211
212 typedef NTSTATUS DDKAPI
213 (*PTDI_IND_ERROR)(
214 /*IN*/ PVOID TdiEventContext,
215 /*IN*/ NTSTATUS Status);
216
217 typedef NTSTATUS DDKAPI
218 (*PTDI_IND_ERROR_EX)(
219 /*IN*/ PVOID TdiEventContext,
220 /*IN*/ NTSTATUS Status,
221 /*IN*/ PVOID Buffer);
222
223 TDIKRNLAPI
224 NTSTATUS
225 DDKAPI
226 TdiDefaultErrorHandler(
227 /*IN*/ PVOID TdiEventContext,
228 /*IN*/ NTSTATUS Status);
229
230 typedef NTSTATUS DDKAPI
231 (*PTDI_IND_RECEIVE)(
232 /*IN*/ PVOID TdiEventContext,
233 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
234 /*IN*/ ULONG ReceiveFlags,
235 /*IN*/ ULONG BytesIndicated,
236 /*IN*/ ULONG BytesAvailable,
237 /*OUT*/ ULONG *BytesTaken,
238 /*IN*/ PVOID Tsdu,
239 /*OUT*/ PIRP *IoRequestPacket);
240
241 TDIKRNLAPI
242 NTSTATUS
243 DDKAPI
244 TdiDefaultReceiveHandler(
245 /*IN*/ PVOID TdiEventContext,
246 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
247 /*IN*/ ULONG ReceiveFlags,
248 /*IN*/ ULONG BytesIndicated,
249 /*IN*/ ULONG BytesAvailable,
250 /*OUT*/ ULONG *BytesTaken,
251 /*IN*/ PVOID Tsdu,
252 /*OUT*/ PIRP *IoRequestPacket);
253
254 typedef NTSTATUS DDKAPI
255 (*PTDI_IND_RECEIVE_DATAGRAM)(
256 /*IN*/ PVOID TdiEventContext,
257 /*IN*/ LONG SourceAddressLength,
258 /*IN*/ PVOID SourceAddress,
259 /*IN*/ LONG OptionsLength,
260 /*IN*/ PVOID Options,
261 /*IN*/ ULONG ReceiveDatagramFlags,
262 /*IN*/ ULONG BytesIndicated,
263 /*IN*/ ULONG BytesAvailable,
264 /*OUT*/ ULONG *BytesTaken,
265 /*IN*/ PVOID Tsdu,
266 /*OUT*/ PIRP *IoRequestPacket);
267
268 TDIKRNLAPI
269 NTSTATUS DDKAPI
270 TdiDefaultRcvDatagramHandler(
271 /*IN*/ PVOID TdiEventContext,
272 /*IN*/ LONG SourceAddressLength,
273 /*IN*/ PVOID SourceAddress,
274 /*IN*/ LONG OptionsLength,
275 /*IN*/ PVOID Options,
276 /*IN*/ ULONG ReceiveDatagramFlags,
277 /*IN*/ ULONG BytesIndicated,
278 /*IN*/ ULONG BytesAvailable,
279 /*OUT*/ ULONG *BytesTaken,
280 /*IN*/ PVOID Tsdu,
281 /*OUT*/ PIRP *IoRequestPacket);
282
283 typedef NTSTATUS DDKAPI
284 (*PTDI_IND_RECEIVE_EXPEDITED)(
285 /*IN*/ PVOID TdiEventContext,
286 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
287 /*IN*/ ULONG ReceiveFlags,
288 /*IN*/ ULONG BytesIndicated,
289 /*IN*/ ULONG BytesAvailable,
290 /*OUT*/ ULONG *BytesTaken,
291 /*IN*/ PVOID Tsdu,
292 /*OUT*/ PIRP *IoRequestPacket);
293
294 TDIKRNLAPI
295 NTSTATUS
296 DDKAPI
297 TdiDefaultRcvExpeditedHandler(
298 /*IN*/ PVOID TdiEventContext,
299 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
300 /*IN*/ ULONG ReceiveFlags,
301 /*IN*/ ULONG BytesIndicated,
302 /*IN*/ ULONG BytesAvailable,
303 /*OUT*/ ULONG *BytesTaken,
304 /*IN*/ PVOID Tsdu,
305 /*OUT*/ PIRP *IoRequestPacket);
306
307 typedef NTSTATUS DDKAPI
308 (*PTDI_IND_CHAINED_RECEIVE)(
309 /*IN*/ PVOID TdiEventContext,
310 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
311 /*IN*/ ULONG ReceiveFlags,
312 /*IN*/ ULONG ReceiveLength,
313 /*IN*/ ULONG StartingOffset,
314 /*IN*/ PMDL Tsdu,
315 /*IN*/ PVOID TsduDescriptor);
316
317 TDIKRNLAPI
318 NTSTATUS
319 DDKAPI
320 TdiDefaultChainedReceiveHandler(
321 /*IN*/ PVOID TdiEventContext,
322 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
323 /*IN*/ ULONG ReceiveFlags,
324 /*IN*/ ULONG ReceiveLength,
325 /*IN*/ ULONG StartingOffset,
326 /*IN*/ PMDL Tsdu,
327 /*IN*/ PVOID TsduDescriptor);
328
329 typedef NTSTATUS DDKAPI
330 (*PTDI_IND_CHAINED_RECEIVE_DATAGRAM)(
331 /*IN*/ PVOID TdiEventContext,
332 /*IN*/ LONG SourceAddressLength,
333 /*IN*/ PVOID SourceAddress,
334 /*IN*/ LONG OptionsLength,
335 /*IN*/ PVOID Options,
336 /*IN*/ ULONG ReceiveDatagramFlags,
337 /*IN*/ ULONG ReceiveDatagramLength,
338 /*IN*/ ULONG StartingOffset,
339 /*IN*/ PMDL Tsdu,
340 /*IN*/ PVOID TsduDescriptor);
341
342 TDIKRNLAPI
343 NTSTATUS
344 DDKAPI
345 TdiDefaultChainedRcvDatagramHandler(
346 /*IN*/ PVOID TdiEventContext,
347 /*IN*/ LONG SourceAddressLength,
348 /*IN*/ PVOID SourceAddress,
349 /*IN*/ LONG OptionsLength,
350 /*IN*/ PVOID Options,
351 /*IN*/ ULONG ReceiveDatagramFlags,
352 /*IN*/ ULONG ReceiveDatagramLength,
353 /*IN*/ ULONG StartingOffset,
354 /*IN*/ PMDL Tsdu,
355 /*IN*/ PVOID TsduDescriptor);
356
357 typedef NTSTATUS DDKAPI
358 (*PTDI_IND_CHAINED_RECEIVE_EXPEDITED)(
359 /*IN*/ PVOID TdiEventContext,
360 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
361 /*IN*/ ULONG ReceiveFlags,
362 /*IN*/ ULONG ReceiveLength,
363 /*IN*/ ULONG StartingOffset,
364 /*IN*/ PMDL Tsdu,
365 /*IN*/ PVOID TsduDescriptor);
366
367 TDIKRNLAPI
368 NTSTATUS
369 DDKAPI
370 TdiDefaultChainedRcvExpeditedHandler(
371 /*IN*/ PVOID TdiEventContext,
372 /*IN*/ CONNECTION_CONTEXT ConnectionContext,
373 /*IN*/ ULONG ReceiveFlags,
374 /*IN*/ ULONG ReceiveLength,
375 /*IN*/ ULONG StartingOffset,
376 /*IN*/ PMDL Tsdu,
377 /*IN*/ PVOID TsduDescriptor);
378
379 typedef NTSTATUS DDKAPI
380 (*PTDI_IND_SEND_POSSIBLE)(
381 /*IN*/ PVOID TdiEventContext,
382 /*IN*/ PVOID ConnectionContext,
383 /*IN*/ ULONG BytesAvailable);
384
385 TDIKRNLAPI
386 NTSTATUS
387 DDKAPI
388 TdiDefaultSendPossibleHandler(
389 /*IN*/ PVOID TdiEventContext,
390 /*IN*/ PVOID ConnectionContext,
391 /*IN*/ ULONG BytesAvailable);
392
393
394
395 /* Macros and functions to build IRPs */
396
397 #define TdiBuildBaseIrp( \
398 bIrp, bDevObj, bFileObj, bCompRoutine, bContxt, bIrpSp, bMinor) \
399 { \
400 bIrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; \
401 bIrpSp->MinorFunction = (bMinor); \
402 bIrpSp->DeviceObject = (bDevObj); \
403 bIrpSp->FileObject = (bFileObj); \
404 if (bCompRoutine) \
405 IoSetCompletionRoutine(bIrp, bCompRoutine, bContxt, TRUE, TRUE, TRUE) \
406 else \
407 IoSetCompletionRoutine(bIrp, NULL, NULL, FALSE, FALSE, FALSE); \
408 }
409
410 /*
411 * VOID
412 * TdiBuildAccept(
413 * IN PIRP Irp,
414 * IN PDEVICE_OBJECT DevObj,
415 * IN PFILE_OBJECT FileObj,
416 * IN PVOID CompRoutine,
417 * IN PVOID Contxt,
418 * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
419 * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
420 */
421 #define TdiBuildAccept( \
422 Irp, DevObj, FileObj, CompRoutine, Contxt, \
423 RequestConnectionInfo, ReturnConnectionInfo) \
424 { \
425 PTDI_REQUEST_KERNEL_ACCEPT _Request; \
426 PIO_STACK_LOCATION _IrpSp; \
427 \
428 _IrpSp = IoGetNextIrpStackLocation(Irp); \
429 \
430 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
431 Contxt, _IrpSp, TDI_ACCEPT); \
432 \
433 _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters; \
434 _Request->RequestConnectionInformation = (RequestConnectionInfo); \
435 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
436 }
437
438 /*
439 * VOID
440 * TdiBuildAction(
441 * IN PIRP Irp,
442 * IN PDEVICE_OBJECT DevObj,
443 * IN PFILE_OBJECT FileObj,
444 * IN PVOID CompRoutine,
445 * IN PVOID Contxt,
446 * IN PMDL MdlAddr);
447 */
448 #define TdiBuildAction( \
449 Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \
450 { \
451 PIO_STACK_LOCATION _IrpSp; \
452 \
453 _IrpSp = IoGetNextIrpStackLocation(Irp); \
454 \
455 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
456 Contxt, _IrpSp, TDI_ACTION); \
457 \
458 (Irp)->MdlAddress = (MdlAddr); \
459 }
460
461 /*
462 * VOID
463 * TdiBuildAssociateAddress(
464 * IN PIRP Irp,
465 * IN PDEVICE_OBJECT DevObj,
466 * IN PFILE_OBJECT FileObj,
467 * IN PVOID CompRoutine,
468 * IN PVOID Contxt,
469 * IN HANDLE AddrHandle);
470 */
471 #define TdiBuildAssociateAddress( \
472 Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle) \
473 { \
474 PTDI_REQUEST_KERNEL_ASSOCIATE _Request; \
475 PIO_STACK_LOCATION _IrpSp; \
476 \
477 _IrpSp = IoGetNextIrpStackLocation(Irp); \
478 \
479 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
480 Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS); \
481 \
482 _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \
483 _Request->AddressHandle = (HANDLE)(AddrHandle); \
484 }
485
486 /*
487 * VOID
488 * TdiBuildConnect(
489 * IN PIRP Irp,
490 * IN PDEVICE_OBJECT DevObj,
491 * IN PFILE_OBJECT FileObj,
492 * IN PVOID CompRoutine,
493 * IN PVOID Contxt,
494 * IN PLARGE_INTEGER Time,
495 * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
496 * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
497 */
498 #define TdiBuildConnect( \
499 Irp, DevObj, FileObj, CompRoutine, Contxt, \
500 Time, RequestConnectionInfo, ReturnConnectionInfo) \
501 { \
502 PTDI_REQUEST_KERNEL _Request; \
503 PIO_STACK_LOCATION _IrpSp; \
504 \
505 _IrpSp = IoGetNextIrpStackLocation(Irp); \
506 \
507 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
508 Contxt, _IrpSp, TDI_CONNECT); \
509 \
510 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
511 _Request->RequestConnectionInformation = (RequestConnectionInfo); \
512 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
513 _Request->RequestSpecific = (PVOID)(Time); \
514 }
515
516 /*
517 * VOID
518 * TdiBuildDisassociateAddress(
519 * IN PIRP Irp,
520 * IN PDEVICE_OBJECT DevObj,
521 * IN PFILE_OBJECT FileObj,
522 * IN PVOID CompRoutine,
523 * IN PVOID Contxt);
524 */
525 #define TdiBuildDisassociateAddress( \
526 Irp, DevObj, FileObj, CompRoutine, Contxt) \
527 { \
528 PIO_STACK_LOCATION _IrpSp; \
529 \
530 _IrpSp = IoGetNextIrpStackLocation(Irp); \
531 \
532 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
533 Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS); \
534 }
535
536 /*
537 * VOID
538 * TdiBuildDisconnect(
539 * IN PIRP Irp,
540 * IN PDEVICE_OBJECT DevObj,
541 * IN PFILE_OBJECT FileObj,
542 * IN PVOID CompRoutine,
543 * IN PVOID Contxt,
544 * IN PLARGE_INTEGER Time,
545 * IN PULONG Flags,
546 * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
547 * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
548 */
549 #define TdiBuildDisconnect( \
550 Irp, DevObj, FileObj, CompRoutine, Contxt, Time, \
551 Flags, RequestConnectionInfo, ReturnConnectionInfo) \
552 { \
553 PTDI_REQUEST_KERNEL _Request; \
554 PIO_STACK_LOCATION _IrpSp; \
555 \
556 _IrpSp = IoGetNextIrpStackLocation(Irp); \
557 \
558 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
559 Contxt, _IrpSp, TDI_DISCONNECT); \
560 \
561 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
562 _Request->RequestConnectionInformation = (RequestConnectionInfo); \
563 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
564 _Request->RequestSpecific = (PVOID)(Time); \
565 _Request->RequestFlags = (Flags); \
566 }
567
568 /*
569 * PIRP
570 * TdiBuildInternalDeviceControlIrp(
571 * IN CCHAR IrpSubFunction,
572 * IN PDEVICE_OBJECT DeviceObject,
573 * IN PFILE_OBJECT FileObject,
574 * IN PKEVENT Event,
575 * IN PIO_STATUS_BLOCK IoStatusBlock);
576 */
577 #define TdiBuildInternalDeviceControlIrp( \
578 IrpSubFunction, DeviceObject, \
579 FileObject, Event, IoStatusBlock) \
580 IoBuildDeviceIoControlRequest( \
581 0x00000003, DeviceObject, \
582 NULL, 0, NULL, 0, \
583 TRUE, Event, IoStatusBlock)
584
585 /*
586 * VOID
587 * TdiBuildListen(
588 * IN PIRP Irp,
589 * IN PDEVICE_OBJECT DevObj,
590 * IN PFILE_OBJECT FileObj,
591 * IN PVOID CompRoutine,
592 * IN PVOID Contxt,
593 * IN ULONG Flags,
594 * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
595 * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
596 */
597 #define TdiBuildListen( \
598 Irp, DevObj, FileObj, CompRoutine, Contxt, \
599 Flags, RequestConnectionInfo, ReturnConnectionInfo) \
600 { \
601 PTDI_REQUEST_KERNEL _Request; \
602 PIO_STACK_LOCATION _IrpSp; \
603 \
604 _IrpSp = IoGetNextIrpStackLocation(Irp); \
605 \
606 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
607 Contxt, _IrpSp, TDI_LISTEN); \
608 \
609 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
610 _Request->RequestConnectionInformation = (RequestConnectionInfo); \
611 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
612 _Request->RequestFlags = (Flags); \
613 }
614
615 TDIKRNLAPI
616 VOID
617 DDKAPI
618 TdiBuildNetbiosAddress(
619 /*IN*/ PUCHAR NetbiosName,
620 /*IN*/ BOOLEAN IsGroupName,
621 /*IN OUT*/ PTA_NETBIOS_ADDRESS NetworkName);
622
623 TDIKRNLAPI
624 NTSTATUS
625 DDKAPI
626 TdiBuildNetbiosAddressEa(
627 /*IN*/ PUCHAR Buffer,
628 /*IN*/ BOOLEAN IsGroupName,
629 /*IN*/ PUCHAR NetbiosName);
630
631 /*
632 * VOID
633 * TdiBuildQueryInformation(
634 * IN PIRP Irp,
635 * IN PDEVICE_OBJECT DevObj,
636 * IN PFILE_OBJECT FileObj,
637 * IN PVOID CompRoutine,
638 * IN PVOID Contxt,
639 * IN UINT QType,
640 * IN PMDL MdlAddr);
641 */
642 #define TdiBuildQueryInformation( \
643 Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr) \
644 { \
645 PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request; \
646 PIO_STACK_LOCATION _IrpSp; \
647 \
648 _IrpSp = IoGetNextIrpStackLocation(Irp); \
649 \
650 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
651 Contxt, _IrpSp, TDI_QUERY_INFORMATION); \
652 \
653 _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \
654 _Request->RequestConnectionInformation = NULL; \
655 _Request->QueryType = (ULONG)(QType); \
656 (Irp)->MdlAddress = (MdlAddr); \
657 }
658
659 /*
660 * VOID
661 * TdiBuildReceive(
662 * IN PIRP Irp,
663 * IN PDEVICE_OBJECT DevObj,
664 * IN PFILE_OBJECT FileObj,
665 * IN PVOID CompRoutine,
666 * IN PVOID Contxt,
667 * IN PMDL MdlAddr,
668 * IN ULONG InFlags,
669 * IN ULONG ReceiveLen);
670 */
671 #define TdiBuildReceive( \
672 Irp, DevObj, FileObj, CompRoutine, Contxt, \
673 MdlAddr, InFlags, ReceiveLen) \
674 { \
675 PTDI_REQUEST_KERNEL_RECEIVE _Request; \
676 PIO_STACK_LOCATION _IrpSp; \
677 \
678 _IrpSp = IoGetNextIrpStackLocation(Irp); \
679 \
680 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
681 Contxt, _IrpSp, TDI_RECEIVE); \
682 \
683 _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \
684 _Request->ReceiveFlags = (InFlags); \
685 _Request->ReceiveLength = (ReceiveLen); \
686 (Irp)->MdlAddress = (MdlAddr); \
687 }
688
689 /*
690 * VOID
691 * TdiBuildReceiveDatagram(
692 * IN PIRP Irp,
693 * IN PDEVICE_OBJECT DevObj,
694 * IN PFILE_OBJECT FileObj,
695 * IN PVOID CompRoutine,
696 * IN PVOID Contxt,
697 * IN PMDL MdlAddr,
698 * IN ULONG ReceiveLen,
699 * IN PTDI_CONNECTION_INFORMATION ReceiveDatagramInfo,
700 * OUT PTDI_CONNECTION_INFORMATION ReturnInfo,
701 * ULONG InFlags);
702 */
703 #define TdiBuildReceiveDatagram( \
704 Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr, \
705 ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags) \
706 { \
707 PTDI_REQUEST_KERNEL_RECEIVEDG _Request; \
708 PIO_STACK_LOCATION _IrpSp; \
709 \
710 _IrpSp = IoGetNextIrpStackLocation(Irp); \
711 \
712 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
713 Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM); \
714 \
715 _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \
716 _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo); \
717 _Request->ReturnDatagramInformation = (ReturnInfo); \
718 _Request->ReceiveLength = (ReceiveLen); \
719 _Request->ReceiveFlags = (InFlags); \
720 (Irp)->MdlAddress = (MdlAddr); \
721 }
722
723 /*
724 * VOID
725 * TdiBuildSend(
726 * IN PIRP Irp,
727 * IN PDEVICE_OBJECT DevObj,
728 * IN PFILE_OBJECT FileObj,
729 * IN PVOID CompRoutine,
730 * IN PVOID Contxt,
731 * IN PMDL MdlAddr,
732 * IN ULONG InFlags,
733 * IN ULONG SendLen);
734 */
735 #define TdiBuildSend( \
736 Irp, DevObj, FileObj, CompRoutine, Contxt, \
737 MdlAddr, InFlags, SendLen) \
738 { \
739 PTDI_REQUEST_KERNEL_SEND _Request; \
740 PIO_STACK_LOCATION _IrpSp; \
741 \
742 _IrpSp = IoGetNextIrpStackLocation(Irp); \
743 \
744 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
745 Contxt, _IrpSp, TDI_SEND); \
746 \
747 _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \
748 _Request->SendFlags = (InFlags); \
749 _Request->SendLength = (SendLen); \
750 (Irp)->MdlAddress = (MdlAddr); \
751 }
752
753 /*
754 * VOID
755 * TdiBuildSendDatagram(
756 * IN PIRP Irp,
757 * IN PDEVICE_OBJECT DevObj,
758 * IN PFILE_OBJECT FileObj,
759 * IN PVOID CompRoutine,
760 * IN PVOID Contxt,
761 * IN PMDL MdlAddr,
762 * IN ULONG SendLen,
763 * IN PTDI_CONNECTION_INFORMATION SendDatagramInfo);
764 */
765 #define TdiBuildSendDatagram( \
766 Irp, DevObj, FileObj, CompRoutine, Contxt, \
767 MdlAddr, SendLen, SendDatagramInfo) \
768 { \
769 PTDI_REQUEST_KERNEL_SENDDG _Request; \
770 PIO_STACK_LOCATION _IrpSp; \
771 \
772 _IrpSp = IoGetNextIrpStackLocation(Irp); \
773 \
774 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
775 Contxt, _IrpSp, TDI_SEND_DATAGRAM); \
776 \
777 _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \
778 _Request->SendDatagramInformation = (SendDatagramInfo); \
779 _Request->SendLength = (SendLen); \
780 (Irp)->MdlAddress = (MdlAddr); \
781 }
782
783 /*
784 * VOID
785 * TdiBuildSetEventHandler(
786 * IN PIRP Irp,
787 * IN PDEVICE_OBJECT DevObj,
788 * IN PFILE_OBJECT FileObj,
789 * IN PVOID CompRoutine,
790 * IN PVOID Contxt,
791 * IN INT InEventType,
792 * IN PVOID InEventHandler,
793 * IN PVOID InEventContext);
794 */
795 #define TdiBuildSetEventHandler( \
796 Irp, DevObj, FileObj, CompRoutine, Contxt, \
797 InEventType, InEventHandler, InEventContext) \
798 { \
799 PTDI_REQUEST_KERNEL_SET_EVENT _Request; \
800 PIO_STACK_LOCATION _IrpSp; \
801 \
802 _IrpSp = IoGetNextIrpStackLocation(Irp); \
803 \
804 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
805 Contxt, _IrpSp, TDI_SET_EVENT_HANDLER); \
806 \
807 _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \
808 _Request->EventType = (InEventType); \
809 _Request->EventHandler = (PVOID)(InEventHandler); \
810 _Request->EventContext = (PVOID)(InEventContext); \
811 }
812
813 /*
814 * VOID
815 * TdiBuildSetInformation(
816 * IN PIRP Irp,
817 * IN PDEVICE_OBJECT DevObj,
818 * IN PFILE_OBJECT FileObj,
819 * IN PVOID CompRoutine,
820 * IN PVOID Contxt,
821 * IN UINT SType,
822 * IN PMDL MdlAddr);
823 */
824 #define TdiBuildSetInformation( \
825 Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr) \
826 { \
827 PTDI_REQUEST_KERNEL_SET_INFORMATION _Request; \
828 PIO_STACK_LOCATION _IrpSp; \
829 \
830 _IrpSp = IoGetNextIrpStackLocation(Irp); \
831 \
832 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
833 Contxt, _IrpSp, TDI_SET_INFORMATION); \
834 \
835 _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \
836 _Request->RequestConnectionInformation = NULL; \
837 _Request->SetType = (ULONG)(SType); \
838 (Irp)->MdlAddress = (MdlAddr); \
839 }
840
841 /* TDI20_CLIENT_INTERFACE_INFO.TdiVersion constants */
842 #define TDI_CURRENT_MAJOR_VERSION 2
843 #define TDI_CURRENT_MINOR_VERSION 0
844
845 #define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 \
846 | (TDI_CURRENT_MAJOR_VERSION))
847
848 #define TDI_VERSION_ONE 0x0001
849
850 typedef enum _TDI_PNP_OPCODE {
851 TDI_PNP_OP_MIN,
852 TDI_PNP_OP_ADD,
853 TDI_PNP_OP_DEL,
854 TDI_PNP_OP_UPDATE,
855 TDI_PNP_OP_PROVIDERREADY,
856 TDI_PNP_OP_NETREADY,
857 TDI_PNP_OP_ADD_IGNORE_BINDING,
858 TDI_PNP_OP_DELETE_IGNORE_BINDING,
859 TDI_PNP_OP_MAX
860 } TDI_PNP_OPCODE;
861
862 /* TDI_PNP_CONTEXT.ContextType */
863 #define TDI_PNP_CONTEXT_TYPE_IF_NAME 0x1
864 #define TDI_PNP_CONTEXT_TYPE_IF_ADDR 0x2
865 #define TDI_PNP_CONTEXT_TYPE_PDO 0x3
866 #define TDI_PNP_CONTEXT_TYPE_FIRST_OR_LAST_IF 0x4
867
868 typedef struct _TDI_PNP_CONTEXT {
869 USHORT ContextSize;
870 USHORT ContextType;
871 UCHAR ContextData[1];
872 } TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT;
873
874 typedef VOID DDKAPI
875 (*TDI_ADD_ADDRESS_HANDLER)(
876 /*IN*/ PTA_ADDRESS Address);
877
878 typedef VOID DDKAPI
879 (*TDI_ADD_ADDRESS_HANDLER_V2)(
880 /*IN*/ PTA_ADDRESS Address,
881 /*IN*/ PUNICODE_STRING DeviceName,
882 /*IN*/ PTDI_PNP_CONTEXT Context);
883
884 typedef VOID DDKAPI
885 (*TDI_BINDING_HANDLER)(
886 /*IN*/ TDI_PNP_OPCODE PnPOpcode,
887 /*IN*/ PUNICODE_STRING DeviceName,
888 /*IN*/ PWSTR MultiSZBindList);
889
890 typedef VOID DDKAPI
891 (*TDI_BIND_HANDLER)(
892 /*IN*/ PUNICODE_STRING DeviceName);
893
894 typedef VOID DDKAPI
895 (*TDI_DEL_ADDRESS_HANDLER)(
896 /*IN*/ PTA_ADDRESS Address);
897
898 typedef VOID DDKAPI
899 (*TDI_DEL_ADDRESS_HANDLER_V2)(
900 /*IN*/ PTA_ADDRESS Address,
901 /*IN*/ PUNICODE_STRING DeviceName,
902 /*IN*/ PTDI_PNP_CONTEXT Context);
903
904 typedef NTSTATUS DDKAPI
905 (*TDI_PNP_POWER_HANDLER)(
906 /*IN*/ PUNICODE_STRING DeviceName,
907 /*IN*/ PNET_PNP_EVENT PowerEvent,
908 /*IN*/ PTDI_PNP_CONTEXT Context1,
909 /*IN*/ PTDI_PNP_CONTEXT Context2);
910
911 typedef VOID DDKAPI
912 (*TDI_UNBIND_HANDLER)(
913 /*IN*/ PUNICODE_STRING DeviceName);
914
915 typedef VOID DDKAPI
916 (*ProviderPnPPowerComplete)(
917 /*IN*/ PNET_PNP_EVENT NetEvent,
918 /*IN*/ NTSTATUS ProviderStatus);
919
920 typedef struct _TDI20_CLIENT_INTERFACE_INFO {
921 _ANONYMOUS_UNION union {
922 _ANONYMOUS_STRUCT struct {
923 UCHAR MajorTdiVersion;
924 UCHAR MinorTdiVersion;
925 } DUMMYSTRUCTNAME;
926 USHORT TdiVersion;
927 } DUMMYUNIONNAME;
928 USHORT Unused;
929 PUNICODE_STRING ClientName;
930 TDI_PNP_POWER_HANDLER PnPPowerHandler;
931 _ANONYMOUS_UNION union {
932 TDI_BINDING_HANDLER BindingHandler;
933 _ANONYMOUS_STRUCT struct {
934 TDI_BIND_HANDLER BindHandler;
935 TDI_UNBIND_HANDLER UnBindHandler;
936 } DUMMYSTRUCTNAME;
937 }DUMMYUNIONNAME2;
938 _ANONYMOUS_UNION union {
939 _ANONYMOUS_STRUCT struct {
940 TDI_ADD_ADDRESS_HANDLER_V2 AddAddressHandlerV2;
941 TDI_DEL_ADDRESS_HANDLER_V2 DelAddressHandlerV2;
942 } DUMMYSTRUCTNAME;
943 _ANONYMOUS_STRUCT struct {
944 TDI_ADD_ADDRESS_HANDLER AddAddressHandler;
945 TDI_DEL_ADDRESS_HANDLER DelAddressHandler;
946 } DUMMYSTRUCTNAME2;
947 } DUMMYUNIONNAME3;
948 } TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO;
949
950 typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
951 typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO;
952
953
954 /* TDI functions */
955
956 /*
957 * VOID
958 * TdiCompleteRequest(
959 * IN PIRP Irp,
960 * IN NTSTATUS Status);
961 */
962 #define TdiCompleteRequest(Irp, Status) \
963 { \
964 (Irp)->IoStatus.Status = (Status); \
965 IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \
966 }
967
968 TDIKRNLAPI
969 NTSTATUS
970 DDKAPI
971 TdiCopyBufferToMdl(
972 /*IN*/ PVOID SourceBuffer,
973 /*IN*/ ULONG SourceOffset,
974 /*IN*/ ULONG SourceBytesToCopy,
975 /*IN*/ PMDL DestinationMdlChain,
976 /*IN*/ ULONG DestinationOffset,
977 /*IN*/ PULONG BytesCopied);
978
979 /*
980 * VOID
981 * TdiCopyLookaheadData(
982 * IN PVOID Destination,
983 * IN PVOID Source,
984 * IN ULONG Length,
985 * IN ULONG ReceiveFlags);
986 */
987 #define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \
988 RtlCopyMemory(Destination, Source, Length)
989
990 TDIKRNLAPI
991 NTSTATUS
992 DDKAPI
993 TdiCopyMdlChainToMdlChain (
994 /*IN*/ PMDL SourceMdlChain,
995 /*IN*/ ULONG SourceOffset,
996 /*IN*/ PMDL DestinationMdlChain,
997 /*IN*/ ULONG DestinationOffset,
998 /*OUT*/ PULONG BytesCopied);
999
1000 TDIKRNLAPI
1001 NTSTATUS
1002 DDKAPI
1003 TdiCopyMdlToBuffer(
1004 /*IN*/ PMDL SourceMdlChain,
1005 /*IN*/ ULONG SourceOffset,
1006 /*IN*/ PVOID DestinationBuffer,
1007 /*IN*/ ULONG DestinationOffset,
1008 /*IN*/ ULONG DestinationBufferSize,
1009 /*OUT*/ PULONG BytesCopied);
1010
1011 TDIKRNLAPI
1012 NTSTATUS
1013 DDKAPI
1014 TdiDeregisterAddressChangeHandler(
1015 /*IN*/ HANDLE BindingHandle);
1016
1017 TDIKRNLAPI
1018 NTSTATUS
1019 DDKAPI
1020 TdiDeregisterDeviceObject(
1021 /*IN*/ HANDLE DevRegistrationHandle);
1022
1023 TDIKRNLAPI
1024 NTSTATUS
1025 DDKAPI
1026 TdiDeregisterNetAddress(
1027 /*IN*/ HANDLE AddrRegistrationHandle);
1028
1029 TDIKRNLAPI
1030 NTSTATUS
1031 DDKAPI
1032 TdiDeregisterPnPHandlers(
1033 /*IN*/ HANDLE BindingHandle);
1034
1035 TDIKRNLAPI
1036 NTSTATUS
1037 DDKAPI
1038 TdiDeregisterProvider(
1039 /*IN*/ HANDLE ProviderHandle);
1040
1041 TDIKRNLAPI
1042 NTSTATUS
1043 DDKAPI
1044 TdiEnumerateAddresses(
1045 /*IN*/ HANDLE BindingHandle);
1046
1047 TDIKRNLAPI
1048 VOID
1049 DDKAPI
1050 TdiInitialize(
1051 VOID);
1052
1053 TDIKRNLAPI
1054 VOID
1055 DDKAPI
1056 TdiMapBuffer(
1057 /*IN*/ PMDL MdlChain);
1058
1059 TDIKRNLAPI
1060 NTSTATUS
1061 DDKAPI
1062 TdiMapUserRequest(
1063 /*IN*/ PDEVICE_OBJECT DeviceObject,
1064 /*IN*/ PIRP Irp,
1065 /*IN*/ PIO_STACK_LOCATION IrpSp);
1066
1067 TDIKRNLAPI
1068 BOOLEAN
1069 DDKAPI
1070 TdiMatchPdoWithChainedReceiveContext(
1071 /*IN*/ PVOID TsduDescriptor,
1072 /*IN*/ PVOID PDO);
1073
1074 TDIKRNLAPI
1075 VOID
1076 DDKAPI
1077 TdiPnPPowerComplete(
1078 /*IN*/ HANDLE BindingHandle,
1079 /*IN*/ PNET_PNP_EVENT PowerEvent,
1080 /*IN*/ NTSTATUS Status);
1081
1082 TDIKRNLAPI
1083 NTSTATUS
1084 DDKAPI
1085 TdiPnPPowerRequest(
1086 /*IN*/ PUNICODE_STRING DeviceName,
1087 /*IN*/ PNET_PNP_EVENT PowerEvent,
1088 /*IN*/ PTDI_PNP_CONTEXT Context1,
1089 /*IN*/ PTDI_PNP_CONTEXT Context2,
1090 /*IN*/ ProviderPnPPowerComplete ProtocolCompletionHandler);
1091
1092 TDIKRNLAPI
1093 NTSTATUS
1094 DDKAPI
1095 TdiProviderReady(
1096 /*IN*/ HANDLE ProviderHandle);
1097
1098 TDIKRNLAPI
1099 NTSTATUS
1100 DDKAPI
1101 TdiRegisterAddressChangeHandler(
1102 /*IN*/ TDI_ADD_ADDRESS_HANDLER AddHandler,
1103 /*IN*/ TDI_DEL_ADDRESS_HANDLER DeleteHandler,
1104 /*OUT*/ HANDLE *BindingHandle);
1105
1106 TDIKRNLAPI
1107 NTSTATUS
1108 DDKAPI
1109 TdiRegisterDeviceObject(
1110 /*IN*/ PUNICODE_STRING DeviceName,
1111 /*OUT*/ HANDLE *DevRegistrationHandle);
1112
1113 TDIKRNLAPI
1114 NTSTATUS
1115 DDKAPI
1116 TdiRegisterNetAddress(
1117 /*IN*/ PTA_ADDRESS Address,
1118 /*IN*/ PUNICODE_STRING DeviceName,
1119 /*IN*/ PTDI_PNP_CONTEXT Context,
1120 /*OUT*/ HANDLE *AddrRegistrationHandle);
1121
1122 TDIKRNLAPI
1123 NTSTATUS
1124 DDKAPI
1125 TdiRegisterNotificationHandler(
1126 /*IN*/ TDI_BIND_HANDLER BindHandler,
1127 /*IN*/ TDI_UNBIND_HANDLER UnbindHandler,
1128 /*OUT*/ HANDLE *BindingHandle);
1129
1130 TDIKRNLAPI
1131 NTSTATUS
1132 DDKAPI
1133 TdiRegisterPnPHandlers(
1134 /*IN*/ PTDI_CLIENT_INTERFACE_INFO ClientInterfaceInfo,
1135 /*IN*/ ULONG InterfaceInfoSize,
1136 /*OUT*/ HANDLE *BindingHandle);
1137
1138 TDIKRNLAPI
1139 NTSTATUS
1140 DDKAPI
1141 TdiRegisterProvider(
1142 /*IN*/ PUNICODE_STRING ProviderName,
1143 /*OUT*/ HANDLE *ProviderHandle);
1144
1145 TDIKRNLAPI
1146 VOID
1147 DDKAPI
1148 TdiReturnChainedReceives(
1149 /*IN*/ PVOID *TsduDescriptors,
1150 /*IN*/ ULONG NumberOfTsdus);
1151
1152 TDIKRNLAPI
1153 VOID
1154 DDKAPI
1155 TdiUnmapBuffer(
1156 /*IN*/ PMDL MdlChain);
1157
1158 #ifdef __cplusplus
1159 }
1160 #endif
1161
1162 #endif /* __TDIKRNL_H */