Initial bulk commit for "Git on MSys"
[msysgit/historical-msysgit.git] / mingw / include / ddk / tdikrnl.h
blob1223c265a630bec789ea18db46eb5603070feb49
1 /*
2 * tdikrnl.h
4 * TDI kernel mode definitions
6 * This file is part of the w32api package.
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
23 #ifndef __TDIKRNL_H
24 #define __TDIKRNL_H
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
34 #include "ntddk.h"
35 #include "tdi.h"
37 #if defined(_TDI_)
38 #define TDIKRNLAPI DECLSPEC_EXPORT
39 #else
40 #define TDIKRNLAPI DECLSPEC_IMPORT
41 #endif
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;
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
67 #define TDI_DIRECT_SEND 0x27
68 #define TDI_DIRECT_SEND_DATAGRAM 0x29
70 #define TDI_TRANSPORT_ADDRESS_FILE 1
71 #define TDI_CONNECTION_FILE 2
72 #define TDI_CONTROL_CHANNEL_FILE 3
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)
78 /* TdiAssociateAddress */
79 typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE {
80 HANDLE AddressHandle;
81 } TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;
83 /* TdiDisassociateAddress */
84 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,
85 *PTDI_REQUEST_KERNEL_DISASSOCIATE;
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;
93 /* TdiConnect */
94 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_CONNECT,
95 *PTDI_REQUEST_KERNEL_CONNECT;
97 /* TdiDisconnect */
98 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISCONNECT,
99 *PTDI_REQUEST_KERNEL_DISCONNECT;
101 /* TdiListen */
102 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN,
103 *PTDI_REQUEST_KERNEL_LISTEN;
105 /* TdiReceive */
106 typedef struct _TDI_REQUEST_KERNEL_RECEIVE {
107 ULONG ReceiveLength;
108 ULONG ReceiveFlags;
109 } TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;
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;
119 /* TdiSend */
120 typedef struct _TDI_REQUEST_KERNEL_SEND {
121 ULONG SendLength;
122 ULONG SendFlags;
123 } TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;
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;
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;
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;
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;
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
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);
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);
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);
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);
212 typedef NTSTATUS DDKAPI
213 (*PTDI_IND_ERROR)(
214 /*IN*/ PVOID TdiEventContext,
215 /*IN*/ NTSTATUS Status);
217 typedef NTSTATUS DDKAPI
218 (*PTDI_IND_ERROR_EX)(
219 /*IN*/ PVOID TdiEventContext,
220 /*IN*/ NTSTATUS Status,
221 /*IN*/ PVOID Buffer);
223 TDIKRNLAPI
224 NTSTATUS
225 DDKAPI
226 TdiDefaultErrorHandler(
227 /*IN*/ PVOID TdiEventContext,
228 /*IN*/ NTSTATUS Status);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
379 typedef NTSTATUS DDKAPI
380 (*PTDI_IND_SEND_POSSIBLE)(
381 /*IN*/ PVOID TdiEventContext,
382 /*IN*/ PVOID ConnectionContext,
383 /*IN*/ ULONG BytesAvailable);
385 TDIKRNLAPI
386 NTSTATUS
387 DDKAPI
388 TdiDefaultSendPossibleHandler(
389 /*IN*/ PVOID TdiEventContext,
390 /*IN*/ PVOID ConnectionContext,
391 /*IN*/ ULONG BytesAvailable);
395 /* Macros and functions to build IRPs */
397 #define TdiBuildBaseIrp( \
398 bIrp, bDevObj, bFileObj, bCompRoutine, bContxt, bIrpSp, bMinor) \
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); \
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);
421 #define TdiBuildAccept( \
422 Irp, DevObj, FileObj, CompRoutine, Contxt, \
423 RequestConnectionInfo, ReturnConnectionInfo) \
425 PTDI_REQUEST_KERNEL_ACCEPT _Request; \
426 PIO_STACK_LOCATION _IrpSp; \
428 _IrpSp = IoGetNextIrpStackLocation(Irp); \
430 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
431 Contxt, _IrpSp, TDI_ACCEPT); \
433 _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters; \
434 _Request->RequestConnectionInformation = (RequestConnectionInfo); \
435 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
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);
448 #define TdiBuildAction( \
449 Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \
451 PIO_STACK_LOCATION _IrpSp; \
453 _IrpSp = IoGetNextIrpStackLocation(Irp); \
455 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
456 Contxt, _IrpSp, TDI_ACTION); \
458 (Irp)->MdlAddress = (MdlAddr); \
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);
471 #define TdiBuildAssociateAddress( \
472 Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle) \
474 PTDI_REQUEST_KERNEL_ASSOCIATE _Request; \
475 PIO_STACK_LOCATION _IrpSp; \
477 _IrpSp = IoGetNextIrpStackLocation(Irp); \
479 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
480 Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS); \
482 _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \
483 _Request->AddressHandle = (HANDLE)(AddrHandle); \
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);
498 #define TdiBuildConnect( \
499 Irp, DevObj, FileObj, CompRoutine, Contxt, \
500 Time, RequestConnectionInfo, ReturnConnectionInfo) \
502 PTDI_REQUEST_KERNEL _Request; \
503 PIO_STACK_LOCATION _IrpSp; \
505 _IrpSp = IoGetNextIrpStackLocation(Irp); \
507 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
508 Contxt, _IrpSp, TDI_CONNECT); \
510 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
511 _Request->RequestConnectionInformation = (RequestConnectionInfo); \
512 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
513 _Request->RequestSpecific = (PVOID)(Time); \
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);
525 #define TdiBuildDisassociateAddress( \
526 Irp, DevObj, FileObj, CompRoutine, Contxt) \
528 PIO_STACK_LOCATION _IrpSp; \
530 _IrpSp = IoGetNextIrpStackLocation(Irp); \
532 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
533 Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS); \
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);
549 #define TdiBuildDisconnect( \
550 Irp, DevObj, FileObj, CompRoutine, Contxt, Time, \
551 Flags, RequestConnectionInfo, ReturnConnectionInfo) \
553 PTDI_REQUEST_KERNEL _Request; \
554 PIO_STACK_LOCATION _IrpSp; \
556 _IrpSp = IoGetNextIrpStackLocation(Irp); \
558 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
559 Contxt, _IrpSp, TDI_DISCONNECT); \
561 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
562 _Request->RequestConnectionInformation = (RequestConnectionInfo); \
563 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
564 _Request->RequestSpecific = (PVOID)(Time); \
565 _Request->RequestFlags = (Flags); \
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);
577 #define TdiBuildInternalDeviceControlIrp( \
578 IrpSubFunction, DeviceObject, \
579 FileObject, Event, IoStatusBlock) \
580 IoBuildDeviceIoControlRequest( \
581 0x00000003, DeviceObject, \
582 NULL, 0, NULL, 0, \
583 TRUE, Event, IoStatusBlock)
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);
597 #define TdiBuildListen( \
598 Irp, DevObj, FileObj, CompRoutine, Contxt, \
599 Flags, RequestConnectionInfo, ReturnConnectionInfo) \
601 PTDI_REQUEST_KERNEL _Request; \
602 PIO_STACK_LOCATION _IrpSp; \
604 _IrpSp = IoGetNextIrpStackLocation(Irp); \
606 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
607 Contxt, _IrpSp, TDI_LISTEN); \
609 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
610 _Request->RequestConnectionInformation = (RequestConnectionInfo); \
611 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
612 _Request->RequestFlags = (Flags); \
615 TDIKRNLAPI
616 VOID
617 DDKAPI
618 TdiBuildNetbiosAddress(
619 /*IN*/ PUCHAR NetbiosName,
620 /*IN*/ BOOLEAN IsGroupName,
621 /*IN OUT*/ PTA_NETBIOS_ADDRESS NetworkName);
623 TDIKRNLAPI
624 NTSTATUS
625 DDKAPI
626 TdiBuildNetbiosAddressEa(
627 /*IN*/ PUCHAR Buffer,
628 /*IN*/ BOOLEAN IsGroupName,
629 /*IN*/ PUCHAR NetbiosName);
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);
642 #define TdiBuildQueryInformation( \
643 Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr) \
645 PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request; \
646 PIO_STACK_LOCATION _IrpSp; \
648 _IrpSp = IoGetNextIrpStackLocation(Irp); \
650 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
651 Contxt, _IrpSp, TDI_QUERY_INFORMATION); \
653 _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \
654 _Request->RequestConnectionInformation = NULL; \
655 _Request->QueryType = (ULONG)(QType); \
656 (Irp)->MdlAddress = (MdlAddr); \
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);
671 #define TdiBuildReceive( \
672 Irp, DevObj, FileObj, CompRoutine, Contxt, \
673 MdlAddr, InFlags, ReceiveLen) \
675 PTDI_REQUEST_KERNEL_RECEIVE _Request; \
676 PIO_STACK_LOCATION _IrpSp; \
678 _IrpSp = IoGetNextIrpStackLocation(Irp); \
680 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
681 Contxt, _IrpSp, TDI_RECEIVE); \
683 _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \
684 _Request->ReceiveFlags = (InFlags); \
685 _Request->ReceiveLength = (ReceiveLen); \
686 (Irp)->MdlAddress = (MdlAddr); \
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);
703 #define TdiBuildReceiveDatagram( \
704 Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr, \
705 ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags) \
707 PTDI_REQUEST_KERNEL_RECEIVEDG _Request; \
708 PIO_STACK_LOCATION _IrpSp; \
710 _IrpSp = IoGetNextIrpStackLocation(Irp); \
712 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
713 Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM); \
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); \
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);
735 #define TdiBuildSend( \
736 Irp, DevObj, FileObj, CompRoutine, Contxt, \
737 MdlAddr, InFlags, SendLen) \
739 PTDI_REQUEST_KERNEL_SEND _Request; \
740 PIO_STACK_LOCATION _IrpSp; \
742 _IrpSp = IoGetNextIrpStackLocation(Irp); \
744 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
745 Contxt, _IrpSp, TDI_SEND); \
747 _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \
748 _Request->SendFlags = (InFlags); \
749 _Request->SendLength = (SendLen); \
750 (Irp)->MdlAddress = (MdlAddr); \
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);
765 #define TdiBuildSendDatagram( \
766 Irp, DevObj, FileObj, CompRoutine, Contxt, \
767 MdlAddr, SendLen, SendDatagramInfo) \
769 PTDI_REQUEST_KERNEL_SENDDG _Request; \
770 PIO_STACK_LOCATION _IrpSp; \
772 _IrpSp = IoGetNextIrpStackLocation(Irp); \
774 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
775 Contxt, _IrpSp, TDI_SEND_DATAGRAM); \
777 _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \
778 _Request->SendDatagramInformation = (SendDatagramInfo); \
779 _Request->SendLength = (SendLen); \
780 (Irp)->MdlAddress = (MdlAddr); \
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);
795 #define TdiBuildSetEventHandler( \
796 Irp, DevObj, FileObj, CompRoutine, Contxt, \
797 InEventType, InEventHandler, InEventContext) \
799 PTDI_REQUEST_KERNEL_SET_EVENT _Request; \
800 PIO_STACK_LOCATION _IrpSp; \
802 _IrpSp = IoGetNextIrpStackLocation(Irp); \
804 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
805 Contxt, _IrpSp, TDI_SET_EVENT_HANDLER); \
807 _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \
808 _Request->EventType = (InEventType); \
809 _Request->EventHandler = (PVOID)(InEventHandler); \
810 _Request->EventContext = (PVOID)(InEventContext); \
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);
824 #define TdiBuildSetInformation( \
825 Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr) \
827 PTDI_REQUEST_KERNEL_SET_INFORMATION _Request; \
828 PIO_STACK_LOCATION _IrpSp; \
830 _IrpSp = IoGetNextIrpStackLocation(Irp); \
832 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
833 Contxt, _IrpSp, TDI_SET_INFORMATION); \
835 _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \
836 _Request->RequestConnectionInformation = NULL; \
837 _Request->SetType = (ULONG)(SType); \
838 (Irp)->MdlAddress = (MdlAddr); \
841 /* TDI20_CLIENT_INTERFACE_INFO.TdiVersion constants */
842 #define TDI_CURRENT_MAJOR_VERSION 2
843 #define TDI_CURRENT_MINOR_VERSION 0
845 #define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 \
846 | (TDI_CURRENT_MAJOR_VERSION))
848 #define TDI_VERSION_ONE 0x0001
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;
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
868 typedef struct _TDI_PNP_CONTEXT {
869 USHORT ContextSize;
870 USHORT ContextType;
871 UCHAR ContextData[1];
872 } TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT;
874 typedef VOID DDKAPI
875 (*TDI_ADD_ADDRESS_HANDLER)(
876 /*IN*/ PTA_ADDRESS Address);
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);
884 typedef VOID DDKAPI
885 (*TDI_BINDING_HANDLER)(
886 /*IN*/ TDI_PNP_OPCODE PnPOpcode,
887 /*IN*/ PUNICODE_STRING DeviceName,
888 /*IN*/ PWSTR MultiSZBindList);
890 typedef VOID DDKAPI
891 (*TDI_BIND_HANDLER)(
892 /*IN*/ PUNICODE_STRING DeviceName);
894 typedef VOID DDKAPI
895 (*TDI_DEL_ADDRESS_HANDLER)(
896 /*IN*/ PTA_ADDRESS Address);
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);
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);
911 typedef VOID DDKAPI
912 (*TDI_UNBIND_HANDLER)(
913 /*IN*/ PUNICODE_STRING DeviceName);
915 typedef VOID DDKAPI
916 (*ProviderPnPPowerComplete)(
917 /*IN*/ PNET_PNP_EVENT NetEvent,
918 /*IN*/ NTSTATUS ProviderStatus);
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;
950 typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
951 typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO;
954 /* TDI functions */
957 * VOID
958 * TdiCompleteRequest(
959 * IN PIRP Irp,
960 * IN NTSTATUS Status);
962 #define TdiCompleteRequest(Irp, Status) \
964 (Irp)->IoStatus.Status = (Status); \
965 IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \
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);
980 * VOID
981 * TdiCopyLookaheadData(
982 * IN PVOID Destination,
983 * IN PVOID Source,
984 * IN ULONG Length,
985 * IN ULONG ReceiveFlags);
987 #define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \
988 RtlCopyMemory(Destination, Source, Length)
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);
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);
1011 TDIKRNLAPI
1012 NTSTATUS
1013 DDKAPI
1014 TdiDeregisterAddressChangeHandler(
1015 /*IN*/ HANDLE BindingHandle);
1017 TDIKRNLAPI
1018 NTSTATUS
1019 DDKAPI
1020 TdiDeregisterDeviceObject(
1021 /*IN*/ HANDLE DevRegistrationHandle);
1023 TDIKRNLAPI
1024 NTSTATUS
1025 DDKAPI
1026 TdiDeregisterNetAddress(
1027 /*IN*/ HANDLE AddrRegistrationHandle);
1029 TDIKRNLAPI
1030 NTSTATUS
1031 DDKAPI
1032 TdiDeregisterPnPHandlers(
1033 /*IN*/ HANDLE BindingHandle);
1035 TDIKRNLAPI
1036 NTSTATUS
1037 DDKAPI
1038 TdiDeregisterProvider(
1039 /*IN*/ HANDLE ProviderHandle);
1041 TDIKRNLAPI
1042 NTSTATUS
1043 DDKAPI
1044 TdiEnumerateAddresses(
1045 /*IN*/ HANDLE BindingHandle);
1047 TDIKRNLAPI
1048 VOID
1049 DDKAPI
1050 TdiInitialize(
1051 VOID);
1053 TDIKRNLAPI
1054 VOID
1055 DDKAPI
1056 TdiMapBuffer(
1057 /*IN*/ PMDL MdlChain);
1059 TDIKRNLAPI
1060 NTSTATUS
1061 DDKAPI
1062 TdiMapUserRequest(
1063 /*IN*/ PDEVICE_OBJECT DeviceObject,
1064 /*IN*/ PIRP Irp,
1065 /*IN*/ PIO_STACK_LOCATION IrpSp);
1067 TDIKRNLAPI
1068 BOOLEAN
1069 DDKAPI
1070 TdiMatchPdoWithChainedReceiveContext(
1071 /*IN*/ PVOID TsduDescriptor,
1072 /*IN*/ PVOID PDO);
1074 TDIKRNLAPI
1075 VOID
1076 DDKAPI
1077 TdiPnPPowerComplete(
1078 /*IN*/ HANDLE BindingHandle,
1079 /*IN*/ PNET_PNP_EVENT PowerEvent,
1080 /*IN*/ NTSTATUS Status);
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);
1092 TDIKRNLAPI
1093 NTSTATUS
1094 DDKAPI
1095 TdiProviderReady(
1096 /*IN*/ HANDLE ProviderHandle);
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);
1106 TDIKRNLAPI
1107 NTSTATUS
1108 DDKAPI
1109 TdiRegisterDeviceObject(
1110 /*IN*/ PUNICODE_STRING DeviceName,
1111 /*OUT*/ HANDLE *DevRegistrationHandle);
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);
1122 TDIKRNLAPI
1123 NTSTATUS
1124 DDKAPI
1125 TdiRegisterNotificationHandler(
1126 /*IN*/ TDI_BIND_HANDLER BindHandler,
1127 /*IN*/ TDI_UNBIND_HANDLER UnbindHandler,
1128 /*OUT*/ HANDLE *BindingHandle);
1130 TDIKRNLAPI
1131 NTSTATUS
1132 DDKAPI
1133 TdiRegisterPnPHandlers(
1134 /*IN*/ PTDI_CLIENT_INTERFACE_INFO ClientInterfaceInfo,
1135 /*IN*/ ULONG InterfaceInfoSize,
1136 /*OUT*/ HANDLE *BindingHandle);
1138 TDIKRNLAPI
1139 NTSTATUS
1140 DDKAPI
1141 TdiRegisterProvider(
1142 /*IN*/ PUNICODE_STRING ProviderName,
1143 /*OUT*/ HANDLE *ProviderHandle);
1145 TDIKRNLAPI
1146 VOID
1147 DDKAPI
1148 TdiReturnChainedReceives(
1149 /*IN*/ PVOID *TsduDescriptors,
1150 /*IN*/ ULONG NumberOfTsdus);
1152 TDIKRNLAPI
1153 VOID
1154 DDKAPI
1155 TdiUnmapBuffer(
1156 /*IN*/ PMDL MdlChain);
1158 #ifdef __cplusplus
1160 #endif
1162 #endif /* __TDIKRNL_H */