Embed:
(wiki syntax)
Show/hide line numbers
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