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