Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
tdikrnl.h
00001 /* 00002 * tdikrnl.h 00003 * 00004 * TDI kernel mode definitions 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __TDIKRNL_H 00024 #define __TDIKRNL_H 00025 00026 #if __GNUC__ >=3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #ifdef __cplusplus 00031 extern "C" { 00032 #endif 00033 00034 #include "ntddk.h" 00035 #include "tdi.h" 00036 00037 #if defined(_TDI_) 00038 #define TDIKRNLAPI DECLSPEC_EXPORT 00039 #else 00040 #define TDIKRNLAPI DECLSPEC_IMPORT 00041 #endif 00042 00043 00044 typedef struct _TDI_REQUEST_KERNEL { 00045 ULONG RequestFlags; 00046 PTDI_CONNECTION_INFORMATION RequestConnectionInformation; 00047 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; 00048 PVOID RequestSpecific; 00049 } TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL; 00050 00051 /* Request codes */ 00052 #define TDI_ASSOCIATE_ADDRESS 0x01 00053 #define TDI_DISASSOCIATE_ADDRESS 0x02 00054 #define TDI_CONNECT 0x03 00055 #define TDI_LISTEN 0x04 00056 #define TDI_ACCEPT 0x05 00057 #define TDI_DISCONNECT 0x06 00058 #define TDI_SEND 0x07 00059 #define TDI_RECEIVE 0x08 00060 #define TDI_SEND_DATAGRAM 0x09 00061 #define TDI_RECEIVE_DATAGRAM 0x0A 00062 #define TDI_SET_EVENT_HANDLER 0x0B 00063 #define TDI_QUERY_INFORMATION 0x0C 00064 #define TDI_SET_INFORMATION 0x0D 00065 #define TDI_ACTION 0x0E 00066 00067 #define TDI_DIRECT_SEND 0x27 00068 #define TDI_DIRECT_SEND_DATAGRAM 0x29 00069 00070 #define TDI_TRANSPORT_ADDRESS_FILE 1 00071 #define TDI_CONNECTION_FILE 2 00072 #define TDI_CONTROL_CHANNEL_FILE 3 00073 00074 /* Internal TDI IOCTLS */ 00075 #define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER _TDI_CONTROL_CODE(0x80, METHOD_NEITHER) 00076 #define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER _TDI_CONTROL_CODE(0x81, METHOD_NEITHER) 00077 00078 /* TdiAssociateAddress */ 00079 typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE { 00080 HANDLE AddressHandle; 00081 } TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE; 00082 00083 /* TdiDisassociateAddress */ 00084 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE, 00085 *PTDI_REQUEST_KERNEL_DISASSOCIATE; 00086 00087 /* TdiAccept */ 00088 typedef struct _TDI_REQUEST_KERNEL_ACCEPT { 00089 PTDI_CONNECTION_INFORMATION RequestConnectionInformation; 00090 PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; 00091 } TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT; 00092 00093 /* TdiConnect */ 00094 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_CONNECT, 00095 *PTDI_REQUEST_KERNEL_CONNECT; 00096 00097 /* TdiDisconnect */ 00098 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISCONNECT, 00099 *PTDI_REQUEST_KERNEL_DISCONNECT; 00100 00101 /* TdiListen */ 00102 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN, 00103 *PTDI_REQUEST_KERNEL_LISTEN; 00104 00105 /* TdiReceive */ 00106 typedef struct _TDI_REQUEST_KERNEL_RECEIVE { 00107 ULONG ReceiveLength; 00108 ULONG ReceiveFlags; 00109 } TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE; 00110 00111 /* TdiReceiveDatagram */ 00112 typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG { 00113 ULONG ReceiveLength; 00114 PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation; 00115 PTDI_CONNECTION_INFORMATION ReturnDatagramInformation; 00116 ULONG ReceiveFlags; 00117 } TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG; 00118 00119 /* TdiSend */ 00120 typedef struct _TDI_REQUEST_KERNEL_SEND { 00121 ULONG SendLength; 00122 ULONG SendFlags; 00123 } TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND; 00124 00125 /* TdiSendDatagram */ 00126 typedef struct _TDI_REQUEST_KERNEL_SENDDG { 00127 ULONG SendLength; 00128 PTDI_CONNECTION_INFORMATION SendDatagramInformation; 00129 } TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG; 00130 00131 /* TdiSetEventHandler */ 00132 typedef struct _TDI_REQUEST_KERNEL_SET_EVENT { 00133 LONG EventType; 00134 PVOID EventHandler; 00135 PVOID EventContext; 00136 } TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT; 00137 00138 /* TdiQueryInformation */ 00139 typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO { 00140 LONG QueryType; 00141 PTDI_CONNECTION_INFORMATION RequestConnectionInformation; 00142 } TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION; 00143 00144 /* TdiSetInformation */ 00145 typedef struct _TDI_REQUEST_KERNEL_SET_INFO { 00146 LONG SetType; 00147 PTDI_CONNECTION_INFORMATION RequestConnectionInformation; 00148 } TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION; 00149 00150 00151 /* Event types */ 00152 #define TDI_EVENT_CONNECT 0 00153 #define TDI_EVENT_DISCONNECT 1 00154 #define TDI_EVENT_ERROR 2 00155 #define TDI_EVENT_RECEIVE 3 00156 #define TDI_EVENT_RECEIVE_DATAGRAM 4 00157 #define TDI_EVENT_RECEIVE_EXPEDITED 5 00158 #define TDI_EVENT_SEND_POSSIBLE 6 00159 #define TDI_EVENT_CHAINED_RECEIVE 7 00160 #define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM 8 00161 #define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9 00162 #define TDI_EVENT_ERROR_EX 10 00163 00164 typedef NTSTATUS DDKAPI 00165 (*PTDI_IND_CONNECT)( 00166 /*IN*/ PVOID TdiEventContext, 00167 /*IN*/ LONG RemoteAddressLength, 00168 /*IN*/ PVOID RemoteAddress, 00169 /*IN*/ LONG UserDataLength, 00170 /*IN*/ PVOID UserData, 00171 /*IN*/ LONG OptionsLength, 00172 /*IN*/ PVOID Options, 00173 /*OUT*/ CONNECTION_CONTEXT *ConnectionContext, 00174 /*OUT*/ PIRP *AcceptIrp); 00175 00176 TDIKRNLAPI 00177 NTSTATUS 00178 DDKAPI 00179 TdiDefaultConnectHandler( 00180 /*IN*/ PVOID TdiEventContext, 00181 /*IN*/ LONG RemoteAddressLength, 00182 /*IN*/ PVOID RemoteAddress, 00183 /*IN*/ LONG UserDataLength, 00184 /*IN*/ PVOID UserData, 00185 /*IN*/ LONG OptionsLength, 00186 /*IN*/ PVOID Options, 00187 /*OUT*/ CONNECTION_CONTEXT *ConnectionContext, 00188 /*OUT*/ PIRP *AcceptIrp); 00189 00190 typedef NTSTATUS DDKAPI 00191 (*PTDI_IND_DISCONNECT)( 00192 /*IN*/ PVOID TdiEventContext, 00193 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00194 /*IN*/ LONG DisconnectDataLength, 00195 /*IN*/ PVOID DisconnectData, 00196 /*IN*/ LONG DisconnectInformationLength, 00197 /*IN*/ PVOID DisconnectInformation, 00198 /*IN*/ ULONG DisconnectFlags); 00199 00200 TDIKRNLAPI 00201 NTSTATUS 00202 DDKAPI 00203 TdiDefaultDisconnectHandler( 00204 /*IN*/ PVOID TdiEventContext, 00205 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00206 /*IN*/ LONG DisconnectDataLength, 00207 /*IN*/ PVOID DisconnectData, 00208 /*IN*/ LONG DisconnectInformationLength, 00209 /*IN*/ PVOID DisconnectInformation, 00210 /*IN*/ ULONG DisconnectFlags); 00211 00212 typedef NTSTATUS DDKAPI 00213 (*PTDI_IND_ERROR)( 00214 /*IN*/ PVOID TdiEventContext, 00215 /*IN*/ NTSTATUS Status); 00216 00217 typedef NTSTATUS DDKAPI 00218 (*PTDI_IND_ERROR_EX)( 00219 /*IN*/ PVOID TdiEventContext, 00220 /*IN*/ NTSTATUS Status, 00221 /*IN*/ PVOID Buffer); 00222 00223 TDIKRNLAPI 00224 NTSTATUS 00225 DDKAPI 00226 TdiDefaultErrorHandler( 00227 /*IN*/ PVOID TdiEventContext, 00228 /*IN*/ NTSTATUS Status); 00229 00230 typedef NTSTATUS DDKAPI 00231 (*PTDI_IND_RECEIVE)( 00232 /*IN*/ PVOID TdiEventContext, 00233 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00234 /*IN*/ ULONG ReceiveFlags, 00235 /*IN*/ ULONG BytesIndicated, 00236 /*IN*/ ULONG BytesAvailable, 00237 /*OUT*/ ULONG *BytesTaken, 00238 /*IN*/ PVOID Tsdu, 00239 /*OUT*/ PIRP *IoRequestPacket); 00240 00241 TDIKRNLAPI 00242 NTSTATUS 00243 DDKAPI 00244 TdiDefaultReceiveHandler( 00245 /*IN*/ PVOID TdiEventContext, 00246 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00247 /*IN*/ ULONG ReceiveFlags, 00248 /*IN*/ ULONG BytesIndicated, 00249 /*IN*/ ULONG BytesAvailable, 00250 /*OUT*/ ULONG *BytesTaken, 00251 /*IN*/ PVOID Tsdu, 00252 /*OUT*/ PIRP *IoRequestPacket); 00253 00254 typedef NTSTATUS DDKAPI 00255 (*PTDI_IND_RECEIVE_DATAGRAM)( 00256 /*IN*/ PVOID TdiEventContext, 00257 /*IN*/ LONG SourceAddressLength, 00258 /*IN*/ PVOID SourceAddress, 00259 /*IN*/ LONG OptionsLength, 00260 /*IN*/ PVOID Options, 00261 /*IN*/ ULONG ReceiveDatagramFlags, 00262 /*IN*/ ULONG BytesIndicated, 00263 /*IN*/ ULONG BytesAvailable, 00264 /*OUT*/ ULONG *BytesTaken, 00265 /*IN*/ PVOID Tsdu, 00266 /*OUT*/ PIRP *IoRequestPacket); 00267 00268 TDIKRNLAPI 00269 NTSTATUS DDKAPI 00270 TdiDefaultRcvDatagramHandler( 00271 /*IN*/ PVOID TdiEventContext, 00272 /*IN*/ LONG SourceAddressLength, 00273 /*IN*/ PVOID SourceAddress, 00274 /*IN*/ LONG OptionsLength, 00275 /*IN*/ PVOID Options, 00276 /*IN*/ ULONG ReceiveDatagramFlags, 00277 /*IN*/ ULONG BytesIndicated, 00278 /*IN*/ ULONG BytesAvailable, 00279 /*OUT*/ ULONG *BytesTaken, 00280 /*IN*/ PVOID Tsdu, 00281 /*OUT*/ PIRP *IoRequestPacket); 00282 00283 typedef NTSTATUS DDKAPI 00284 (*PTDI_IND_RECEIVE_EXPEDITED)( 00285 /*IN*/ PVOID TdiEventContext, 00286 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00287 /*IN*/ ULONG ReceiveFlags, 00288 /*IN*/ ULONG BytesIndicated, 00289 /*IN*/ ULONG BytesAvailable, 00290 /*OUT*/ ULONG *BytesTaken, 00291 /*IN*/ PVOID Tsdu, 00292 /*OUT*/ PIRP *IoRequestPacket); 00293 00294 TDIKRNLAPI 00295 NTSTATUS 00296 DDKAPI 00297 TdiDefaultRcvExpeditedHandler( 00298 /*IN*/ PVOID TdiEventContext, 00299 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00300 /*IN*/ ULONG ReceiveFlags, 00301 /*IN*/ ULONG BytesIndicated, 00302 /*IN*/ ULONG BytesAvailable, 00303 /*OUT*/ ULONG *BytesTaken, 00304 /*IN*/ PVOID Tsdu, 00305 /*OUT*/ PIRP *IoRequestPacket); 00306 00307 typedef NTSTATUS DDKAPI 00308 (*PTDI_IND_CHAINED_RECEIVE)( 00309 /*IN*/ PVOID TdiEventContext, 00310 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00311 /*IN*/ ULONG ReceiveFlags, 00312 /*IN*/ ULONG ReceiveLength, 00313 /*IN*/ ULONG StartingOffset, 00314 /*IN*/ PMDL Tsdu, 00315 /*IN*/ PVOID TsduDescriptor); 00316 00317 TDIKRNLAPI 00318 NTSTATUS 00319 DDKAPI 00320 TdiDefaultChainedReceiveHandler( 00321 /*IN*/ PVOID TdiEventContext, 00322 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00323 /*IN*/ ULONG ReceiveFlags, 00324 /*IN*/ ULONG ReceiveLength, 00325 /*IN*/ ULONG StartingOffset, 00326 /*IN*/ PMDL Tsdu, 00327 /*IN*/ PVOID TsduDescriptor); 00328 00329 typedef NTSTATUS DDKAPI 00330 (*PTDI_IND_CHAINED_RECEIVE_DATAGRAM)( 00331 /*IN*/ PVOID TdiEventContext, 00332 /*IN*/ LONG SourceAddressLength, 00333 /*IN*/ PVOID SourceAddress, 00334 /*IN*/ LONG OptionsLength, 00335 /*IN*/ PVOID Options, 00336 /*IN*/ ULONG ReceiveDatagramFlags, 00337 /*IN*/ ULONG ReceiveDatagramLength, 00338 /*IN*/ ULONG StartingOffset, 00339 /*IN*/ PMDL Tsdu, 00340 /*IN*/ PVOID TsduDescriptor); 00341 00342 TDIKRNLAPI 00343 NTSTATUS 00344 DDKAPI 00345 TdiDefaultChainedRcvDatagramHandler( 00346 /*IN*/ PVOID TdiEventContext, 00347 /*IN*/ LONG SourceAddressLength, 00348 /*IN*/ PVOID SourceAddress, 00349 /*IN*/ LONG OptionsLength, 00350 /*IN*/ PVOID Options, 00351 /*IN*/ ULONG ReceiveDatagramFlags, 00352 /*IN*/ ULONG ReceiveDatagramLength, 00353 /*IN*/ ULONG StartingOffset, 00354 /*IN*/ PMDL Tsdu, 00355 /*IN*/ PVOID TsduDescriptor); 00356 00357 typedef NTSTATUS DDKAPI 00358 (*PTDI_IND_CHAINED_RECEIVE_EXPEDITED)( 00359 /*IN*/ PVOID TdiEventContext, 00360 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00361 /*IN*/ ULONG ReceiveFlags, 00362 /*IN*/ ULONG ReceiveLength, 00363 /*IN*/ ULONG StartingOffset, 00364 /*IN*/ PMDL Tsdu, 00365 /*IN*/ PVOID TsduDescriptor); 00366 00367 TDIKRNLAPI 00368 NTSTATUS 00369 DDKAPI 00370 TdiDefaultChainedRcvExpeditedHandler( 00371 /*IN*/ PVOID TdiEventContext, 00372 /*IN*/ CONNECTION_CONTEXT ConnectionContext, 00373 /*IN*/ ULONG ReceiveFlags, 00374 /*IN*/ ULONG ReceiveLength, 00375 /*IN*/ ULONG StartingOffset, 00376 /*IN*/ PMDL Tsdu, 00377 /*IN*/ PVOID TsduDescriptor); 00378 00379 typedef NTSTATUS DDKAPI 00380 (*PTDI_IND_SEND_POSSIBLE)( 00381 /*IN*/ PVOID TdiEventContext, 00382 /*IN*/ PVOID ConnectionContext, 00383 /*IN*/ ULONG BytesAvailable); 00384 00385 TDIKRNLAPI 00386 NTSTATUS 00387 DDKAPI 00388 TdiDefaultSendPossibleHandler( 00389 /*IN*/ PVOID TdiEventContext, 00390 /*IN*/ PVOID ConnectionContext, 00391 /*IN*/ ULONG BytesAvailable); 00392 00393 00394 00395 /* Macros and functions to build IRPs */ 00396 00397 #define TdiBuildBaseIrp( \ 00398 bIrp, bDevObj, bFileObj, bCompRoutine, bContxt, bIrpSp, bMinor) \ 00399 { \ 00400 bIrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; \ 00401 bIrpSp->MinorFunction = (bMinor); \ 00402 bIrpSp->DeviceObject = (bDevObj); \ 00403 bIrpSp->FileObject = (bFileObj); \ 00404 if (bCompRoutine) \ 00405 IoSetCompletionRoutine(bIrp, bCompRoutine, bContxt, TRUE, TRUE, TRUE) \ 00406 else \ 00407 IoSetCompletionRoutine(bIrp, NULL, NULL, FALSE, FALSE, FALSE); \ 00408 } 00409 00410 /* 00411 * VOID 00412 * TdiBuildAccept( 00413 * IN PIRP Irp, 00414 * IN PDEVICE_OBJECT DevObj, 00415 * IN PFILE_OBJECT FileObj, 00416 * IN PVOID CompRoutine, 00417 * IN PVOID Contxt, 00418 * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo, 00419 * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo); 00420 */ 00421 #define TdiBuildAccept( \ 00422 Irp, DevObj, FileObj, CompRoutine, Contxt, \ 00423 RequestConnectionInfo, ReturnConnectionInfo) \ 00424 { \ 00425 PTDI_REQUEST_KERNEL_ACCEPT _Request; \ 00426 PIO_STACK_LOCATION _IrpSp; \ 00427 \ 00428 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00429 \ 00430 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00431 Contxt, _IrpSp, TDI_ACCEPT); \ 00432 \ 00433 _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters; \ 00434 _Request->RequestConnectionInformation = (RequestConnectionInfo); \ 00435 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \ 00436 } 00437 00438 /* 00439 * VOID 00440 * TdiBuildAction( 00441 * IN PIRP Irp, 00442 * IN PDEVICE_OBJECT DevObj, 00443 * IN PFILE_OBJECT FileObj, 00444 * IN PVOID CompRoutine, 00445 * IN PVOID Contxt, 00446 * IN PMDL MdlAddr); 00447 */ 00448 #define TdiBuildAction( \ 00449 Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \ 00450 { \ 00451 PIO_STACK_LOCATION _IrpSp; \ 00452 \ 00453 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00454 \ 00455 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00456 Contxt, _IrpSp, TDI_ACTION); \ 00457 \ 00458 (Irp)->MdlAddress = (MdlAddr); \ 00459 } 00460 00461 /* 00462 * VOID 00463 * TdiBuildAssociateAddress( 00464 * IN PIRP Irp, 00465 * IN PDEVICE_OBJECT DevObj, 00466 * IN PFILE_OBJECT FileObj, 00467 * IN PVOID CompRoutine, 00468 * IN PVOID Contxt, 00469 * IN HANDLE AddrHandle); 00470 */ 00471 #define TdiBuildAssociateAddress( \ 00472 Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle) \ 00473 { \ 00474 PTDI_REQUEST_KERNEL_ASSOCIATE _Request; \ 00475 PIO_STACK_LOCATION _IrpSp; \ 00476 \ 00477 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00478 \ 00479 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00480 Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS); \ 00481 \ 00482 _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \ 00483 _Request->AddressHandle = (HANDLE)(AddrHandle); \ 00484 } 00485 00486 /* 00487 * VOID 00488 * TdiBuildConnect( 00489 * IN PIRP Irp, 00490 * IN PDEVICE_OBJECT DevObj, 00491 * IN PFILE_OBJECT FileObj, 00492 * IN PVOID CompRoutine, 00493 * IN PVOID Contxt, 00494 * IN PLARGE_INTEGER Time, 00495 * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo, 00496 * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo); 00497 */ 00498 #define TdiBuildConnect( \ 00499 Irp, DevObj, FileObj, CompRoutine, Contxt, \ 00500 Time, RequestConnectionInfo, ReturnConnectionInfo) \ 00501 { \ 00502 PTDI_REQUEST_KERNEL _Request; \ 00503 PIO_STACK_LOCATION _IrpSp; \ 00504 \ 00505 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00506 \ 00507 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00508 Contxt, _IrpSp, TDI_CONNECT); \ 00509 \ 00510 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \ 00511 _Request->RequestConnectionInformation = (RequestConnectionInfo); \ 00512 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \ 00513 _Request->RequestSpecific = (PVOID)(Time); \ 00514 } 00515 00516 /* 00517 * VOID 00518 * TdiBuildDisassociateAddress( 00519 * IN PIRP Irp, 00520 * IN PDEVICE_OBJECT DevObj, 00521 * IN PFILE_OBJECT FileObj, 00522 * IN PVOID CompRoutine, 00523 * IN PVOID Contxt); 00524 */ 00525 #define TdiBuildDisassociateAddress( \ 00526 Irp, DevObj, FileObj, CompRoutine, Contxt) \ 00527 { \ 00528 PIO_STACK_LOCATION _IrpSp; \ 00529 \ 00530 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00531 \ 00532 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00533 Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS); \ 00534 } 00535 00536 /* 00537 * VOID 00538 * TdiBuildDisconnect( 00539 * IN PIRP Irp, 00540 * IN PDEVICE_OBJECT DevObj, 00541 * IN PFILE_OBJECT FileObj, 00542 * IN PVOID CompRoutine, 00543 * IN PVOID Contxt, 00544 * IN PLARGE_INTEGER Time, 00545 * IN PULONG Flags, 00546 * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo, 00547 * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo); 00548 */ 00549 #define TdiBuildDisconnect( \ 00550 Irp, DevObj, FileObj, CompRoutine, Contxt, Time, \ 00551 Flags, RequestConnectionInfo, ReturnConnectionInfo) \ 00552 { \ 00553 PTDI_REQUEST_KERNEL _Request; \ 00554 PIO_STACK_LOCATION _IrpSp; \ 00555 \ 00556 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00557 \ 00558 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00559 Contxt, _IrpSp, TDI_DISCONNECT); \ 00560 \ 00561 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \ 00562 _Request->RequestConnectionInformation = (RequestConnectionInfo); \ 00563 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \ 00564 _Request->RequestSpecific = (PVOID)(Time); \ 00565 _Request->RequestFlags = (Flags); \ 00566 } 00567 00568 /* 00569 * PIRP 00570 * TdiBuildInternalDeviceControlIrp( 00571 * IN CCHAR IrpSubFunction, 00572 * IN PDEVICE_OBJECT DeviceObject, 00573 * IN PFILE_OBJECT FileObject, 00574 * IN PKEVENT Event, 00575 * IN PIO_STATUS_BLOCK IoStatusBlock); 00576 */ 00577 #define TdiBuildInternalDeviceControlIrp( \ 00578 IrpSubFunction, DeviceObject, \ 00579 FileObject, Event, IoStatusBlock) \ 00580 IoBuildDeviceIoControlRequest( \ 00581 0x00000003, DeviceObject, \ 00582 NULL, 0, NULL, 0, \ 00583 TRUE, Event, IoStatusBlock) 00584 00585 /* 00586 * VOID 00587 * TdiBuildListen( 00588 * IN PIRP Irp, 00589 * IN PDEVICE_OBJECT DevObj, 00590 * IN PFILE_OBJECT FileObj, 00591 * IN PVOID CompRoutine, 00592 * IN PVOID Contxt, 00593 * IN ULONG Flags, 00594 * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo, 00595 * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo); 00596 */ 00597 #define TdiBuildListen( \ 00598 Irp, DevObj, FileObj, CompRoutine, Contxt, \ 00599 Flags, RequestConnectionInfo, ReturnConnectionInfo) \ 00600 { \ 00601 PTDI_REQUEST_KERNEL _Request; \ 00602 PIO_STACK_LOCATION _IrpSp; \ 00603 \ 00604 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00605 \ 00606 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00607 Contxt, _IrpSp, TDI_LISTEN); \ 00608 \ 00609 _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \ 00610 _Request->RequestConnectionInformation = (RequestConnectionInfo); \ 00611 _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \ 00612 _Request->RequestFlags = (Flags); \ 00613 } 00614 00615 TDIKRNLAPI 00616 VOID 00617 DDKAPI 00618 TdiBuildNetbiosAddress( 00619 /*IN*/ PUCHAR NetbiosName, 00620 /*IN*/ BOOLEAN IsGroupName, 00621 /*IN OUT*/ PTA_NETBIOS_ADDRESS NetworkName); 00622 00623 TDIKRNLAPI 00624 NTSTATUS 00625 DDKAPI 00626 TdiBuildNetbiosAddressEa( 00627 /*IN*/ PUCHAR Buffer, 00628 /*IN*/ BOOLEAN IsGroupName, 00629 /*IN*/ PUCHAR NetbiosName); 00630 00631 /* 00632 * VOID 00633 * TdiBuildQueryInformation( 00634 * IN PIRP Irp, 00635 * IN PDEVICE_OBJECT DevObj, 00636 * IN PFILE_OBJECT FileObj, 00637 * IN PVOID CompRoutine, 00638 * IN PVOID Contxt, 00639 * IN UINT QType, 00640 * IN PMDL MdlAddr); 00641 */ 00642 #define TdiBuildQueryInformation( \ 00643 Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr) \ 00644 { \ 00645 PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request; \ 00646 PIO_STACK_LOCATION _IrpSp; \ 00647 \ 00648 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00649 \ 00650 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00651 Contxt, _IrpSp, TDI_QUERY_INFORMATION); \ 00652 \ 00653 _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \ 00654 _Request->RequestConnectionInformation = NULL; \ 00655 _Request->QueryType = (ULONG)(QType); \ 00656 (Irp)->MdlAddress = (MdlAddr); \ 00657 } 00658 00659 /* 00660 * VOID 00661 * TdiBuildReceive( 00662 * IN PIRP Irp, 00663 * IN PDEVICE_OBJECT DevObj, 00664 * IN PFILE_OBJECT FileObj, 00665 * IN PVOID CompRoutine, 00666 * IN PVOID Contxt, 00667 * IN PMDL MdlAddr, 00668 * IN ULONG InFlags, 00669 * IN ULONG ReceiveLen); 00670 */ 00671 #define TdiBuildReceive( \ 00672 Irp, DevObj, FileObj, CompRoutine, Contxt, \ 00673 MdlAddr, InFlags, ReceiveLen) \ 00674 { \ 00675 PTDI_REQUEST_KERNEL_RECEIVE _Request; \ 00676 PIO_STACK_LOCATION _IrpSp; \ 00677 \ 00678 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00679 \ 00680 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00681 Contxt, _IrpSp, TDI_RECEIVE); \ 00682 \ 00683 _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \ 00684 _Request->ReceiveFlags = (InFlags); \ 00685 _Request->ReceiveLength = (ReceiveLen); \ 00686 (Irp)->MdlAddress = (MdlAddr); \ 00687 } 00688 00689 /* 00690 * VOID 00691 * TdiBuildReceiveDatagram( 00692 * IN PIRP Irp, 00693 * IN PDEVICE_OBJECT DevObj, 00694 * IN PFILE_OBJECT FileObj, 00695 * IN PVOID CompRoutine, 00696 * IN PVOID Contxt, 00697 * IN PMDL MdlAddr, 00698 * IN ULONG ReceiveLen, 00699 * IN PTDI_CONNECTION_INFORMATION ReceiveDatagramInfo, 00700 * OUT PTDI_CONNECTION_INFORMATION ReturnInfo, 00701 * ULONG InFlags); 00702 */ 00703 #define TdiBuildReceiveDatagram( \ 00704 Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr, \ 00705 ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags) \ 00706 { \ 00707 PTDI_REQUEST_KERNEL_RECEIVEDG _Request; \ 00708 PIO_STACK_LOCATION _IrpSp; \ 00709 \ 00710 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00711 \ 00712 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00713 Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM); \ 00714 \ 00715 _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \ 00716 _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo); \ 00717 _Request->ReturnDatagramInformation = (ReturnInfo); \ 00718 _Request->ReceiveLength = (ReceiveLen); \ 00719 _Request->ReceiveFlags = (InFlags); \ 00720 (Irp)->MdlAddress = (MdlAddr); \ 00721 } 00722 00723 /* 00724 * VOID 00725 * TdiBuildSend( 00726 * IN PIRP Irp, 00727 * IN PDEVICE_OBJECT DevObj, 00728 * IN PFILE_OBJECT FileObj, 00729 * IN PVOID CompRoutine, 00730 * IN PVOID Contxt, 00731 * IN PMDL MdlAddr, 00732 * IN ULONG InFlags, 00733 * IN ULONG SendLen); 00734 */ 00735 #define TdiBuildSend( \ 00736 Irp, DevObj, FileObj, CompRoutine, Contxt, \ 00737 MdlAddr, InFlags, SendLen) \ 00738 { \ 00739 PTDI_REQUEST_KERNEL_SEND _Request; \ 00740 PIO_STACK_LOCATION _IrpSp; \ 00741 \ 00742 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00743 \ 00744 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00745 Contxt, _IrpSp, TDI_SEND); \ 00746 \ 00747 _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \ 00748 _Request->SendFlags = (InFlags); \ 00749 _Request->SendLength = (SendLen); \ 00750 (Irp)->MdlAddress = (MdlAddr); \ 00751 } 00752 00753 /* 00754 * VOID 00755 * TdiBuildSendDatagram( 00756 * IN PIRP Irp, 00757 * IN PDEVICE_OBJECT DevObj, 00758 * IN PFILE_OBJECT FileObj, 00759 * IN PVOID CompRoutine, 00760 * IN PVOID Contxt, 00761 * IN PMDL MdlAddr, 00762 * IN ULONG SendLen, 00763 * IN PTDI_CONNECTION_INFORMATION SendDatagramInfo); 00764 */ 00765 #define TdiBuildSendDatagram( \ 00766 Irp, DevObj, FileObj, CompRoutine, Contxt, \ 00767 MdlAddr, SendLen, SendDatagramInfo) \ 00768 { \ 00769 PTDI_REQUEST_KERNEL_SENDDG _Request; \ 00770 PIO_STACK_LOCATION _IrpSp; \ 00771 \ 00772 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00773 \ 00774 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00775 Contxt, _IrpSp, TDI_SEND_DATAGRAM); \ 00776 \ 00777 _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \ 00778 _Request->SendDatagramInformation = (SendDatagramInfo); \ 00779 _Request->SendLength = (SendLen); \ 00780 (Irp)->MdlAddress = (MdlAddr); \ 00781 } 00782 00783 /* 00784 * VOID 00785 * TdiBuildSetEventHandler( 00786 * IN PIRP Irp, 00787 * IN PDEVICE_OBJECT DevObj, 00788 * IN PFILE_OBJECT FileObj, 00789 * IN PVOID CompRoutine, 00790 * IN PVOID Contxt, 00791 * IN INT InEventType, 00792 * IN PVOID InEventHandler, 00793 * IN PVOID InEventContext); 00794 */ 00795 #define TdiBuildSetEventHandler( \ 00796 Irp, DevObj, FileObj, CompRoutine, Contxt, \ 00797 InEventType, InEventHandler, InEventContext) \ 00798 { \ 00799 PTDI_REQUEST_KERNEL_SET_EVENT _Request; \ 00800 PIO_STACK_LOCATION _IrpSp; \ 00801 \ 00802 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00803 \ 00804 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00805 Contxt, _IrpSp, TDI_SET_EVENT_HANDLER); \ 00806 \ 00807 _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \ 00808 _Request->EventType = (InEventType); \ 00809 _Request->EventHandler = (PVOID)(InEventHandler); \ 00810 _Request->EventContext = (PVOID)(InEventContext); \ 00811 } 00812 00813 /* 00814 * VOID 00815 * TdiBuildSetInformation( 00816 * IN PIRP Irp, 00817 * IN PDEVICE_OBJECT DevObj, 00818 * IN PFILE_OBJECT FileObj, 00819 * IN PVOID CompRoutine, 00820 * IN PVOID Contxt, 00821 * IN UINT SType, 00822 * IN PMDL MdlAddr); 00823 */ 00824 #define TdiBuildSetInformation( \ 00825 Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr) \ 00826 { \ 00827 PTDI_REQUEST_KERNEL_SET_INFORMATION _Request; \ 00828 PIO_STACK_LOCATION _IrpSp; \ 00829 \ 00830 _IrpSp = IoGetNextIrpStackLocation(Irp); \ 00831 \ 00832 TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \ 00833 Contxt, _IrpSp, TDI_SET_INFORMATION); \ 00834 \ 00835 _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \ 00836 _Request->RequestConnectionInformation = NULL; \ 00837 _Request->SetType = (ULONG)(SType); \ 00838 (Irp)->MdlAddress = (MdlAddr); \ 00839 } 00840 00841 /* TDI20_CLIENT_INTERFACE_INFO.TdiVersion constants */ 00842 #define TDI_CURRENT_MAJOR_VERSION 2 00843 #define TDI_CURRENT_MINOR_VERSION 0 00844 00845 #define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 \ 00846 | (TDI_CURRENT_MAJOR_VERSION)) 00847 00848 #define TDI_VERSION_ONE 0x0001 00849 00850 typedef enum _TDI_PNP_OPCODE { 00851 TDI_PNP_OP_MIN, 00852 TDI_PNP_OP_ADD, 00853 TDI_PNP_OP_DEL, 00854 TDI_PNP_OP_UPDATE, 00855 TDI_PNP_OP_PROVIDERREADY, 00856 TDI_PNP_OP_NETREADY, 00857 TDI_PNP_OP_ADD_IGNORE_BINDING, 00858 TDI_PNP_OP_DELETE_IGNORE_BINDING, 00859 TDI_PNP_OP_MAX 00860 } TDI_PNP_OPCODE; 00861 00862 /* TDI_PNP_CONTEXT.ContextType */ 00863 #define TDI_PNP_CONTEXT_TYPE_IF_NAME 0x1 00864 #define TDI_PNP_CONTEXT_TYPE_IF_ADDR 0x2 00865 #define TDI_PNP_CONTEXT_TYPE_PDO 0x3 00866 #define TDI_PNP_CONTEXT_TYPE_FIRST_OR_LAST_IF 0x4 00867 00868 typedef struct _TDI_PNP_CONTEXT { 00869 USHORT ContextSize; 00870 USHORT ContextType; 00871 UCHAR ContextData[1]; 00872 } TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT; 00873 00874 typedef VOID DDKAPI 00875 (*TDI_ADD_ADDRESS_HANDLER)( 00876 /*IN*/ PTA_ADDRESS Address); 00877 00878 typedef VOID DDKAPI 00879 (*TDI_ADD_ADDRESS_HANDLER_V2)( 00880 /*IN*/ PTA_ADDRESS Address, 00881 /*IN*/ PUNICODE_STRING DeviceName, 00882 /*IN*/ PTDI_PNP_CONTEXT Context); 00883 00884 typedef VOID DDKAPI 00885 (*TDI_BINDING_HANDLER)( 00886 /*IN*/ TDI_PNP_OPCODE PnPOpcode, 00887 /*IN*/ PUNICODE_STRING DeviceName, 00888 /*IN*/ PWSTR MultiSZBindList); 00889 00890 typedef VOID DDKAPI 00891 (*TDI_BIND_HANDLER)( 00892 /*IN*/ PUNICODE_STRING DeviceName); 00893 00894 typedef VOID DDKAPI 00895 (*TDI_DEL_ADDRESS_HANDLER)( 00896 /*IN*/ PTA_ADDRESS Address); 00897 00898 typedef VOID DDKAPI 00899 (*TDI_DEL_ADDRESS_HANDLER_V2)( 00900 /*IN*/ PTA_ADDRESS Address, 00901 /*IN*/ PUNICODE_STRING DeviceName, 00902 /*IN*/ PTDI_PNP_CONTEXT Context); 00903 00904 typedef NTSTATUS DDKAPI 00905 (*TDI_PNP_POWER_HANDLER)( 00906 /*IN*/ PUNICODE_STRING DeviceName, 00907 /*IN*/ PNET_PNP_EVENT PowerEvent, 00908 /*IN*/ PTDI_PNP_CONTEXT Context1, 00909 /*IN*/ PTDI_PNP_CONTEXT Context2); 00910 00911 typedef VOID DDKAPI 00912 (*TDI_UNBIND_HANDLER)( 00913 /*IN*/ PUNICODE_STRING DeviceName); 00914 00915 typedef VOID DDKAPI 00916 (*ProviderPnPPowerComplete)( 00917 /*IN*/ PNET_PNP_EVENT NetEvent, 00918 /*IN*/ NTSTATUS ProviderStatus); 00919 00920 typedef struct _TDI20_CLIENT_INTERFACE_INFO { 00921 _ANONYMOUS_UNION union { 00922 _ANONYMOUS_STRUCT struct { 00923 UCHAR MajorTdiVersion; 00924 UCHAR MinorTdiVersion; 00925 } DUMMYSTRUCTNAME; 00926 USHORT TdiVersion; 00927 } DUMMYUNIONNAME; 00928 USHORT Unused; 00929 PUNICODE_STRING ClientName; 00930 TDI_PNP_POWER_HANDLER PnPPowerHandler; 00931 _ANONYMOUS_UNION union { 00932 TDI_BINDING_HANDLER BindingHandler; 00933 _ANONYMOUS_STRUCT struct { 00934 TDI_BIND_HANDLER BindHandler; 00935 TDI_UNBIND_HANDLER UnBindHandler; 00936 } DUMMYSTRUCTNAME; 00937 }DUMMYUNIONNAME2; 00938 _ANONYMOUS_UNION union { 00939 _ANONYMOUS_STRUCT struct { 00940 TDI_ADD_ADDRESS_HANDLER_V2 AddAddressHandlerV2; 00941 TDI_DEL_ADDRESS_HANDLER_V2 DelAddressHandlerV2; 00942 } DUMMYSTRUCTNAME; 00943 _ANONYMOUS_STRUCT struct { 00944 TDI_ADD_ADDRESS_HANDLER AddAddressHandler; 00945 TDI_DEL_ADDRESS_HANDLER DelAddressHandler; 00946 } DUMMYSTRUCTNAME2; 00947 } DUMMYUNIONNAME3; 00948 } TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO; 00949 00950 typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO; 00951 typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO; 00952 00953 00954 /* TDI functions */ 00955 00956 /* 00957 * VOID 00958 * TdiCompleteRequest( 00959 * IN PIRP Irp, 00960 * IN NTSTATUS Status); 00961 */ 00962 #define TdiCompleteRequest(Irp, Status) \ 00963 { \ 00964 (Irp)->IoStatus.Status = (Status); \ 00965 IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \ 00966 } 00967 00968 TDIKRNLAPI 00969 NTSTATUS 00970 DDKAPI 00971 TdiCopyBufferToMdl( 00972 /*IN*/ PVOID SourceBuffer, 00973 /*IN*/ ULONG SourceOffset, 00974 /*IN*/ ULONG SourceBytesToCopy, 00975 /*IN*/ PMDL DestinationMdlChain, 00976 /*IN*/ ULONG DestinationOffset, 00977 /*IN*/ PULONG BytesCopied); 00978 00979 /* 00980 * VOID 00981 * TdiCopyLookaheadData( 00982 * IN PVOID Destination, 00983 * IN PVOID Source, 00984 * IN ULONG Length, 00985 * IN ULONG ReceiveFlags); 00986 */ 00987 #define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \ 00988 RtlCopyMemory(Destination, Source, Length) 00989 00990 TDIKRNLAPI 00991 NTSTATUS 00992 DDKAPI 00993 TdiCopyMdlChainToMdlChain ( 00994 /*IN*/ PMDL SourceMdlChain, 00995 /*IN*/ ULONG SourceOffset, 00996 /*IN*/ PMDL DestinationMdlChain, 00997 /*IN*/ ULONG DestinationOffset, 00998 /*OUT*/ PULONG BytesCopied); 00999 01000 TDIKRNLAPI 01001 NTSTATUS 01002 DDKAPI 01003 TdiCopyMdlToBuffer( 01004 /*IN*/ PMDL SourceMdlChain, 01005 /*IN*/ ULONG SourceOffset, 01006 /*IN*/ PVOID DestinationBuffer, 01007 /*IN*/ ULONG DestinationOffset, 01008 /*IN*/ ULONG DestinationBufferSize, 01009 /*OUT*/ PULONG BytesCopied); 01010 01011 TDIKRNLAPI 01012 NTSTATUS 01013 DDKAPI 01014 TdiDeregisterAddressChangeHandler( 01015 /*IN*/ HANDLE BindingHandle); 01016 01017 TDIKRNLAPI 01018 NTSTATUS 01019 DDKAPI 01020 TdiDeregisterDeviceObject( 01021 /*IN*/ HANDLE DevRegistrationHandle); 01022 01023 TDIKRNLAPI 01024 NTSTATUS 01025 DDKAPI 01026 TdiDeregisterNetAddress( 01027 /*IN*/ HANDLE AddrRegistrationHandle); 01028 01029 TDIKRNLAPI 01030 NTSTATUS 01031 DDKAPI 01032 TdiDeregisterPnPHandlers( 01033 /*IN*/ HANDLE BindingHandle); 01034 01035 TDIKRNLAPI 01036 NTSTATUS 01037 DDKAPI 01038 TdiDeregisterProvider( 01039 /*IN*/ HANDLE ProviderHandle); 01040 01041 TDIKRNLAPI 01042 NTSTATUS 01043 DDKAPI 01044 TdiEnumerateAddresses( 01045 /*IN*/ HANDLE BindingHandle); 01046 01047 TDIKRNLAPI 01048 VOID 01049 DDKAPI 01050 TdiInitialize( 01051 VOID); 01052 01053 TDIKRNLAPI 01054 VOID 01055 DDKAPI 01056 TdiMapBuffer( 01057 /*IN*/ PMDL MdlChain); 01058 01059 TDIKRNLAPI 01060 NTSTATUS 01061 DDKAPI 01062 TdiMapUserRequest( 01063 /*IN*/ PDEVICE_OBJECT DeviceObject, 01064 /*IN*/ PIRP Irp, 01065 /*IN*/ PIO_STACK_LOCATION IrpSp); 01066 01067 TDIKRNLAPI 01068 BOOLEAN 01069 DDKAPI 01070 TdiMatchPdoWithChainedReceiveContext( 01071 /*IN*/ PVOID TsduDescriptor, 01072 /*IN*/ PVOID PDO); 01073 01074 TDIKRNLAPI 01075 VOID 01076 DDKAPI 01077 TdiPnPPowerComplete( 01078 /*IN*/ HANDLE BindingHandle, 01079 /*IN*/ PNET_PNP_EVENT PowerEvent, 01080 /*IN*/ NTSTATUS Status); 01081 01082 TDIKRNLAPI 01083 NTSTATUS 01084 DDKAPI 01085 TdiPnPPowerRequest( 01086 /*IN*/ PUNICODE_STRING DeviceName, 01087 /*IN*/ PNET_PNP_EVENT PowerEvent, 01088 /*IN*/ PTDI_PNP_CONTEXT Context1, 01089 /*IN*/ PTDI_PNP_CONTEXT Context2, 01090 /*IN*/ ProviderPnPPowerComplete ProtocolCompletionHandler); 01091 01092 TDIKRNLAPI 01093 NTSTATUS 01094 DDKAPI 01095 TdiProviderReady( 01096 /*IN*/ HANDLE ProviderHandle); 01097 01098 TDIKRNLAPI 01099 NTSTATUS 01100 DDKAPI 01101 TdiRegisterAddressChangeHandler( 01102 /*IN*/ TDI_ADD_ADDRESS_HANDLER AddHandler, 01103 /*IN*/ TDI_DEL_ADDRESS_HANDLER DeleteHandler, 01104 /*OUT*/ HANDLE *BindingHandle); 01105 01106 TDIKRNLAPI 01107 NTSTATUS 01108 DDKAPI 01109 TdiRegisterDeviceObject( 01110 /*IN*/ PUNICODE_STRING DeviceName, 01111 /*OUT*/ HANDLE *DevRegistrationHandle); 01112 01113 TDIKRNLAPI 01114 NTSTATUS 01115 DDKAPI 01116 TdiRegisterNetAddress( 01117 /*IN*/ PTA_ADDRESS Address, 01118 /*IN*/ PUNICODE_STRING DeviceName, 01119 /*IN*/ PTDI_PNP_CONTEXT Context, 01120 /*OUT*/ HANDLE *AddrRegistrationHandle); 01121 01122 TDIKRNLAPI 01123 NTSTATUS 01124 DDKAPI 01125 TdiRegisterNotificationHandler( 01126 /*IN*/ TDI_BIND_HANDLER BindHandler, 01127 /*IN*/ TDI_UNBIND_HANDLER UnbindHandler, 01128 /*OUT*/ HANDLE *BindingHandle); 01129 01130 TDIKRNLAPI 01131 NTSTATUS 01132 DDKAPI 01133 TdiRegisterPnPHandlers( 01134 /*IN*/ PTDI_CLIENT_INTERFACE_INFO ClientInterfaceInfo, 01135 /*IN*/ ULONG InterfaceInfoSize, 01136 /*OUT*/ HANDLE *BindingHandle); 01137 01138 TDIKRNLAPI 01139 NTSTATUS 01140 DDKAPI 01141 TdiRegisterProvider( 01142 /*IN*/ PUNICODE_STRING ProviderName, 01143 /*OUT*/ HANDLE *ProviderHandle); 01144 01145 TDIKRNLAPI 01146 VOID 01147 DDKAPI 01148 TdiReturnChainedReceives( 01149 /*IN*/ PVOID *TsduDescriptors, 01150 /*IN*/ ULONG NumberOfTsdus); 01151 01152 TDIKRNLAPI 01153 VOID 01154 DDKAPI 01155 TdiUnmapBuffer( 01156 /*IN*/ PMDL MdlChain); 01157 01158 #ifdef __cplusplus 01159 } 01160 #endif 01161 01162 #endif /* __TDIKRNL_H */
Generated on Tue Jul 12 2022 19:59:55 by
1.7.2