1 /*++ 2 3 Copyright (c) Microsoft Corporation. All rights reserved. 4 5 _WdfVersionBuild_ 6 7 Module Name: 8 9 wdfiotarget.h 10 11 Abstract: 12 13 Interfaces for WDF IO Targets 14 15 Environment: 16 17 kernel mode only 18 19 Revision History: 20 21 --*/ 22 23 // 24 // NOTE: This header is generated by stubwork. Please make any 25 // modifications to the corresponding template files 26 // (.x or .y) and use stubwork to regenerate the header 27 // 28 29 #ifndef _WDFIOTARGET_H_ 30 #define _WDFIOTARGET_H_ 31 32 #ifndef WDF_EXTERN_C 33 #ifdef __cplusplus 34 #define WDF_EXTERN_C extern "C" 35 #define WDF_EXTERN_C_START extern "C" { 36 #define WDF_EXTERN_C_END } 37 #else 38 #define WDF_EXTERN_C 39 #define WDF_EXTERN_C_START 40 #define WDF_EXTERN_C_END 41 #endif 42 #endif 43 44 WDF_EXTERN_C_START 45 46 47 48 49 #if (NTDDI_VERSION >= NTDDI_WIN2K) 50 51 typedef enum _WDF_IO_TARGET_STATE { 52 WdfIoTargetStateUndefined = 0, 53 WdfIoTargetStarted, 54 WdfIoTargetStopped, 55 WdfIoTargetClosedForQueryRemove, 56 WdfIoTargetClosed, 57 WdfIoTargetDeleted, 58 WdfIoTargetPurged, 59 } WDF_IO_TARGET_STATE, *PWDF_IO_TARGET_STATE; 60 61 typedef enum _WDF_IO_TARGET_OPEN_TYPE { 62 WdfIoTargetOpenUndefined = 0, 63 WdfIoTargetOpenUseExistingDevice = 1, 64 WdfIoTargetOpenByName = 2, 65 WdfIoTargetOpenReopen = 3, 66 WdfIoTargetOpenLocalTargetByFile = 4, 67 } WDF_IO_TARGET_OPEN_TYPE; 68 69 typedef enum _WDF_IO_TARGET_SENT_IO_ACTION { 70 WdfIoTargetSentIoUndefined = 0, 71 WdfIoTargetCancelSentIo, 72 WdfIoTargetWaitForSentIoToComplete, 73 WdfIoTargetLeaveSentIoPending, 74 } WDF_IO_TARGET_SENT_IO_ACTION; 75 76 typedef enum _WDF_IO_TARGET_PURGE_IO_ACTION { 77 WdfIoTargetPurgeIoUndefined = 0, 78 WdfIoTargetPurgeIoAndWait = 1, 79 WdfIoTargetPurgeIo = 2, 80 } WDF_IO_TARGET_PURGE_IO_ACTION; 81 82 83 84 typedef 85 _Function_class_(EVT_WDF_IO_TARGET_QUERY_REMOVE) 86 _IRQL_requires_same_ 87 _IRQL_requires_max_(PASSIVE_LEVEL) 88 NTSTATUS 89 STDCALL 90 EVT_WDF_IO_TARGET_QUERY_REMOVE( 91 _In_ 92 WDFIOTARGET IoTarget 93 ); 94 95 typedef EVT_WDF_IO_TARGET_QUERY_REMOVE *PFN_WDF_IO_TARGET_QUERY_REMOVE; 96 97 typedef 98 _Function_class_(EVT_WDF_IO_TARGET_REMOVE_CANCELED) 99 _IRQL_requires_same_ 100 _IRQL_requires_max_(PASSIVE_LEVEL) 101 VOID 102 STDCALL 103 EVT_WDF_IO_TARGET_REMOVE_CANCELED( 104 _In_ 105 WDFIOTARGET IoTarget 106 ); 107 108 typedef EVT_WDF_IO_TARGET_REMOVE_CANCELED *PFN_WDF_IO_TARGET_REMOVE_CANCELED; 109 110 typedef 111 _Function_class_(EVT_WDF_IO_TARGET_REMOVE_COMPLETE) 112 _IRQL_requires_same_ 113 _IRQL_requires_max_(PASSIVE_LEVEL) 114 VOID 115 STDCALL 116 EVT_WDF_IO_TARGET_REMOVE_COMPLETE( 117 _In_ 118 WDFIOTARGET IoTarget 119 ); 120 121 typedef EVT_WDF_IO_TARGET_REMOVE_COMPLETE *PFN_WDF_IO_TARGET_REMOVE_COMPLETE; 122 123 typedef struct _WDF_IO_TARGET_OPEN_PARAMS { 124 // 125 // Size of this structure in bytes 126 // 127 ULONG Size; 128 129 // 130 // Indicates which fields of this structure are going to be used in 131 // creating the WDFIOTARGET. 132 // 133 WDF_IO_TARGET_OPEN_TYPE Type; 134 135 // 136 // Notification when the target is being queried for removal. 137 // If !NT_SUCCESS is returned, the query will fail and the target will 138 // remain opened. 139 // 140 PFN_WDF_IO_TARGET_QUERY_REMOVE EvtIoTargetQueryRemove; 141 142 // 143 // The previous query remove has been canceled and the target can now be 144 // reopened. 145 // 146 PFN_WDF_IO_TARGET_REMOVE_CANCELED EvtIoTargetRemoveCanceled; 147 148 // 149 // The query remove has succeeded and the target is now removed from the 150 // system. 151 // 152 PFN_WDF_IO_TARGET_REMOVE_COMPLETE EvtIoTargetRemoveComplete; 153 154 155 // <KMDF_ONLY/> 156 // ========== WdfIoTargetOpenUseExistingDevice begin ========== 157 // 158 // The device object to send requests to 159 // 160 PDEVICE_OBJECT TargetDeviceObject; 161 162 // <KMDF_ONLY/> 163 // File object representing the TargetDeviceObject. The PFILE_OBJECT will 164 // be passed as a parameter in all requests sent to the resulting 165 // WDFIOTARGET. 166 // 167 PFILE_OBJECT TargetFileObject; 168 169 // ========== WdfIoTargetOpenUseExistingDevice end ========== 170 171 // ========== WdfIoTargetOpenByName begin ========== 172 // 173 // Name of the device to open. 174 // 175 UNICODE_STRING TargetDeviceName; 176 177 // <KMDF_DOC> 178 // The access desired on the device being opened up, ie WDM FILE_XXX_ACCESS 179 // such as FILE_ANY_ACCESS, FILE_SPECIAL_ACCESS, FILE_READ_ACCESS, or 180 // FILE_WRITE_ACCESS or you can use values such as GENERIC_READ, 181 // GENERIC_WRITE, or GENERIC_ALL. 182 // </KMDF_DOC> 183 // <UMDF_DOC> 184 // The requested access to the file or device, which can be summarized as 185 // read, write, both or neither zero). For more information about 186 // this member, see the dwDesiredAccess parameter of CreateFile in the 187 // Windows SDK. Note that ACCESS_MASK data type is a DWORD value. 188 // </UMDF_DOC> 189 // 190 ACCESS_MASK DesiredAccess; 191 192 // 193 // <KMDF_DOC> 194 // Share access desired on the target being opened, ie WDM FILE_SHARE_XXX 195 // values such as FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_DELETE. 196 // A zero value means exclusive access to the target. 197 // 198 // </KMDF_DOC> 199 // <UMDF_DOC> 200 // The type of sharing to allow for the file. For more information about 201 // this member, see the dwShareMode parameter of CreateFile in the 202 // Windows SDK. A value of 0 means exclusive access. 203 // </UMDF_DOC> 204 // 205 ULONG ShareAccess; 206 207 // 208 // <KMDF_DOC> 209 // File attributes, see ZwCreateFile in the DDK for a list of valid 210 // values and their meaning. 211 // </KMDF_DOC> 212 // <UMDF_DOC> 213 // Additional flags and attributes for the file. For more information about 214 // this member, see the dwFlagsAndAttributes parameter of CreateFile 215 // in the Windows SDK. 216 // </UMDF_DOC> 217 // 218 ULONG FileAttributes; 219 220 // 221 // <KMDF_DOC> 222 // Create disposition, see ZwCreateFile in the DDK for a list of valid 223 // values and their meaning. 224 // </KMDF_DOC> 225 // <UMDF_DOC> 226 // The action to take if the file already exists. For more information 227 // about this member, see the dwCreationDisposition parameter of 228 // CreateFile in the Windows SDK. 229 // </UMDF_DOC> 230 // 231 ULONG CreateDisposition; 232 233 // 234 // <KMDF_ONLY/> 235 // Options for opening the device, see CreateOptions for ZwCreateFile in the 236 // DDK for a list of valid values and their meaning. 237 // 238 ULONG CreateOptions; 239 240 // 241 // <KMDF_ONLY/> 242 // 243 PVOID EaBuffer; 244 245 // 246 // <KMDF_ONLY/> 247 // 248 ULONG EaBufferLength; 249 250 // 251 // <KMDF_ONLY/> 252 // 253 PLONGLONG AllocationSize; 254 255 // ========== WdfIoTargetOpenByName end ========== 256 257 // 258 // <KMDF_ONLY/> 259 // 260 // On return for a create by name, this will contain one of the following 261 // values: FILE_CREATED, FILE_OPENED, FILE_OVERWRITTEN, FILE_SUPERSEDED, 262 // FILE_EXISTS, FILE_DOES_NOT_EXIST 263 // 264 ULONG FileInformation; 265 266 // ========== WdfIoTargetOpenLocalTargetByFile begin ========== 267 268 // 269 // <UMDF_ONLY/> A UNICODE_STRING-formatted string that contains the 270 // name of the file to create a file object from. This parameter is 271 // optional, and is applicable only when Type parameter is 272 // WdfIoTargetOpenLocalTargetByFile. The driver can leave this member 273 // unchanged if the driver does not have to create the file object 274 // from a file name. If the driver must supply a name, the string that 275 // the driver passes must not contain any path separator characters 276 // ("/" or "\"). 277 // 278 UNICODE_STRING FileName; 279 280 // ========== WdfIoTargetOpenLocalTargetByFile end ========== 281 282 } WDF_IO_TARGET_OPEN_PARAMS, *PWDF_IO_TARGET_OPEN_PARAMS; 283 284 285 FORCEINLINE 286 VOID 287 WDF_IO_TARGET_OPEN_PARAMS_INIT_EXISTING_DEVICE( 288 _Out_ PWDF_IO_TARGET_OPEN_PARAMS Params, 289 _In_ PDEVICE_OBJECT DeviceObject 290 ) 291 { 292 RtlZeroMemory(Params, sizeof(WDF_IO_TARGET_OPEN_PARAMS)); 293 294 Params->Size = sizeof(WDF_IO_TARGET_OPEN_PARAMS); 295 Params->Type = WdfIoTargetOpenUseExistingDevice; 296 297 Params->TargetDeviceObject = DeviceObject; 298 } 299 300 301 FORCEINLINE 302 VOID 303 WDF_IO_TARGET_OPEN_PARAMS_INIT_CREATE_BY_NAME( 304 _Out_ PWDF_IO_TARGET_OPEN_PARAMS Params, 305 _In_ PCUNICODE_STRING TargetDeviceName, 306 _In_ ACCESS_MASK DesiredAccess 307 ) 308 { 309 RtlZeroMemory(Params, sizeof(WDF_IO_TARGET_OPEN_PARAMS)); 310 311 Params->Size = sizeof(WDF_IO_TARGET_OPEN_PARAMS); 312 Params->Type = WdfIoTargetOpenByName; 313 314 RtlCopyMemory(&Params->TargetDeviceName, 315 TargetDeviceName, 316 sizeof(UNICODE_STRING)); 317 Params->DesiredAccess = DesiredAccess; 318 Params->CreateOptions = FILE_NON_DIRECTORY_FILE; 319 } 320 321 FORCEINLINE 322 VOID 323 WDF_IO_TARGET_OPEN_PARAMS_INIT_OPEN_BY_NAME( 324 _Out_ PWDF_IO_TARGET_OPEN_PARAMS Params, 325 _In_ PCUNICODE_STRING TargetDeviceName, 326 _In_ ACCESS_MASK DesiredAccess 327 ) 328 { 329 WDF_IO_TARGET_OPEN_PARAMS_INIT_CREATE_BY_NAME(Params, 330 TargetDeviceName, 331 DesiredAccess); 332 Params->CreateDisposition = FILE_OPEN; 333 } 334 335 336 337 338 FORCEINLINE 339 VOID 340 WDF_IO_TARGET_OPEN_PARAMS_INIT_REOPEN( 341 _Out_ PWDF_IO_TARGET_OPEN_PARAMS Params 342 ) 343 { 344 RtlZeroMemory(Params, sizeof(WDF_IO_TARGET_OPEN_PARAMS)); 345 346 Params->Size = sizeof(WDF_IO_TARGET_OPEN_PARAMS); 347 Params->Type = WdfIoTargetOpenReopen; 348 } 349 350 351 // 352 // WDF Function: WdfIoTargetCreate 353 // 354 typedef 355 _Must_inspect_result_ 356 _IRQL_requires_max_(PASSIVE_LEVEL) 357 WDFAPI 358 NTSTATUS 359 (STDCALL *PFN_WDFIOTARGETCREATE)( 360 _In_ 361 PWDF_DRIVER_GLOBALS DriverGlobals, 362 _In_ 363 WDFDEVICE Device, 364 _In_opt_ 365 PWDF_OBJECT_ATTRIBUTES IoTargetAttributes, 366 _Out_ 367 WDFIOTARGET* IoTarget 368 ); 369 370 _Must_inspect_result_ 371 _IRQL_requires_max_(PASSIVE_LEVEL) 372 FORCEINLINE 373 NTSTATUS 374 WdfIoTargetCreate( 375 _In_ 376 WDFDEVICE Device, 377 _In_opt_ 378 PWDF_OBJECT_ATTRIBUTES IoTargetAttributes, 379 _Out_ 380 WDFIOTARGET* IoTarget 381 ) 382 { 383 return ((PFN_WDFIOTARGETCREATE) WdfFunctions[WdfIoTargetCreateTableIndex])(WdfDriverGlobals, Device, IoTargetAttributes, IoTarget); 384 } 385 386 // 387 // WDF Function: WdfIoTargetOpen 388 // 389 typedef 390 _Must_inspect_result_ 391 _IRQL_requires_max_(PASSIVE_LEVEL) 392 WDFAPI 393 NTSTATUS 394 (STDCALL *PFN_WDFIOTARGETOPEN)( 395 _In_ 396 PWDF_DRIVER_GLOBALS DriverGlobals, 397 _In_ 398 WDFIOTARGET IoTarget, 399 _In_ 400 PWDF_IO_TARGET_OPEN_PARAMS OpenParams 401 ); 402 403 _Must_inspect_result_ 404 _IRQL_requires_max_(PASSIVE_LEVEL) 405 FORCEINLINE 406 NTSTATUS 407 WdfIoTargetOpen( 408 _In_ 409 WDFIOTARGET IoTarget, 410 _In_ 411 PWDF_IO_TARGET_OPEN_PARAMS OpenParams 412 ) 413 { 414 return ((PFN_WDFIOTARGETOPEN) WdfFunctions[WdfIoTargetOpenTableIndex])(WdfDriverGlobals, IoTarget, OpenParams); 415 } 416 417 // 418 // WDF Function: WdfIoTargetCloseForQueryRemove 419 // 420 typedef 421 _IRQL_requires_max_(PASSIVE_LEVEL) 422 WDFAPI 423 VOID 424 (STDCALL *PFN_WDFIOTARGETCLOSEFORQUERYREMOVE)( 425 _In_ 426 PWDF_DRIVER_GLOBALS DriverGlobals, 427 _In_ 428 WDFIOTARGET IoTarget 429 ); 430 431 _IRQL_requires_max_(PASSIVE_LEVEL) 432 FORCEINLINE 433 VOID 434 WdfIoTargetCloseForQueryRemove( 435 _In_ 436 WDFIOTARGET IoTarget 437 ) 438 { 439 ((PFN_WDFIOTARGETCLOSEFORQUERYREMOVE) WdfFunctions[WdfIoTargetCloseForQueryRemoveTableIndex])(WdfDriverGlobals, IoTarget); 440 } 441 442 // 443 // WDF Function: WdfIoTargetClose 444 // 445 typedef 446 _IRQL_requires_max_(PASSIVE_LEVEL) 447 WDFAPI 448 VOID 449 (STDCALL *PFN_WDFIOTARGETCLOSE)( 450 _In_ 451 PWDF_DRIVER_GLOBALS DriverGlobals, 452 _In_ 453 WDFIOTARGET IoTarget 454 ); 455 456 _IRQL_requires_max_(PASSIVE_LEVEL) 457 FORCEINLINE 458 VOID 459 WdfIoTargetClose( 460 _In_ 461 WDFIOTARGET IoTarget 462 ) 463 { 464 ((PFN_WDFIOTARGETCLOSE) WdfFunctions[WdfIoTargetCloseTableIndex])(WdfDriverGlobals, IoTarget); 465 } 466 467 // 468 // WDF Function: WdfIoTargetStart 469 // 470 typedef 471 _Must_inspect_result_ 472 _IRQL_requires_max_(DISPATCH_LEVEL) 473 WDFAPI 474 NTSTATUS 475 (STDCALL *PFN_WDFIOTARGETSTART)( 476 _In_ 477 PWDF_DRIVER_GLOBALS DriverGlobals, 478 _In_ 479 WDFIOTARGET IoTarget 480 ); 481 482 _Must_inspect_result_ 483 _IRQL_requires_max_(DISPATCH_LEVEL) 484 FORCEINLINE 485 NTSTATUS 486 WdfIoTargetStart( 487 _In_ 488 WDFIOTARGET IoTarget 489 ) 490 { 491 return ((PFN_WDFIOTARGETSTART) WdfFunctions[WdfIoTargetStartTableIndex])(WdfDriverGlobals, IoTarget); 492 } 493 494 // 495 // WDF Function: WdfIoTargetStop 496 // 497 typedef 498 _When_(Action == 3, _IRQL_requires_max_(DISPATCH_LEVEL)) 499 _When_(Action == 0 || Action == 1 || Action == 2, _IRQL_requires_max_(PASSIVE_LEVEL)) 500 WDFAPI 501 VOID 502 (STDCALL *PFN_WDFIOTARGETSTOP)( 503 _In_ 504 PWDF_DRIVER_GLOBALS DriverGlobals, 505 _In_ 506 WDFIOTARGET IoTarget, 507 _In_ 508 _Strict_type_match_ 509 WDF_IO_TARGET_SENT_IO_ACTION Action 510 ); 511 512 _When_(Action == 3, _IRQL_requires_max_(DISPATCH_LEVEL)) 513 _When_(Action == 0 || Action == 1 || Action == 2, _IRQL_requires_max_(PASSIVE_LEVEL)) 514 FORCEINLINE 515 VOID 516 WdfIoTargetStop( 517 _In_ 518 WDFIOTARGET IoTarget, 519 _In_ 520 _Strict_type_match_ 521 WDF_IO_TARGET_SENT_IO_ACTION Action 522 ) 523 { 524 ((PFN_WDFIOTARGETSTOP) WdfFunctions[WdfIoTargetStopTableIndex])(WdfDriverGlobals, IoTarget, Action); 525 } 526 527 // 528 // WDF Function: WdfIoTargetPurge 529 // 530 typedef 531 _When_(Action == 2, _IRQL_requires_max_(DISPATCH_LEVEL)) 532 _When_(Action == 0 || Action == 1, _IRQL_requires_max_(PASSIVE_LEVEL)) 533 WDFAPI 534 VOID 535 (STDCALL *PFN_WDFIOTARGETPURGE)( 536 _In_ 537 PWDF_DRIVER_GLOBALS DriverGlobals, 538 _In_ 539 WDFIOTARGET IoTarget, 540 _In_ 541 _Strict_type_match_ 542 WDF_IO_TARGET_PURGE_IO_ACTION Action 543 ); 544 545 _When_(Action == 2, _IRQL_requires_max_(DISPATCH_LEVEL)) 546 _When_(Action == 0 || Action == 1, _IRQL_requires_max_(PASSIVE_LEVEL)) 547 FORCEINLINE 548 VOID 549 WdfIoTargetPurge( 550 _In_ 551 WDFIOTARGET IoTarget, 552 _In_ 553 _Strict_type_match_ 554 WDF_IO_TARGET_PURGE_IO_ACTION Action 555 ) 556 { 557 ((PFN_WDFIOTARGETPURGE) WdfFunctions[WdfIoTargetPurgeTableIndex])(WdfDriverGlobals, IoTarget, Action); 558 } 559 560 // 561 // WDF Function: WdfIoTargetGetState 562 // 563 typedef 564 _IRQL_requires_max_(DISPATCH_LEVEL) 565 WDFAPI 566 WDF_IO_TARGET_STATE 567 (STDCALL *PFN_WDFIOTARGETGETSTATE)( 568 _In_ 569 PWDF_DRIVER_GLOBALS DriverGlobals, 570 _In_ 571 WDFIOTARGET IoTarget 572 ); 573 574 _IRQL_requires_max_(DISPATCH_LEVEL) 575 FORCEINLINE 576 WDF_IO_TARGET_STATE 577 WdfIoTargetGetState( 578 _In_ 579 WDFIOTARGET IoTarget 580 ) 581 { 582 return ((PFN_WDFIOTARGETGETSTATE) WdfFunctions[WdfIoTargetGetStateTableIndex])(WdfDriverGlobals, IoTarget); 583 } 584 585 // 586 // WDF Function: WdfIoTargetGetDevice 587 // 588 typedef 589 _IRQL_requires_max_(DISPATCH_LEVEL) 590 WDFAPI 591 WDFDEVICE 592 (STDCALL *PFN_WDFIOTARGETGETDEVICE)( 593 _In_ 594 PWDF_DRIVER_GLOBALS DriverGlobals, 595 _In_ 596 WDFIOTARGET IoTarget 597 ); 598 599 _IRQL_requires_max_(DISPATCH_LEVEL) 600 FORCEINLINE 601 WDFDEVICE 602 WdfIoTargetGetDevice( 603 _In_ 604 WDFIOTARGET IoTarget 605 ) 606 { 607 return ((PFN_WDFIOTARGETGETDEVICE) WdfFunctions[WdfIoTargetGetDeviceTableIndex])(WdfDriverGlobals, IoTarget); 608 } 609 610 // 611 // WDF Function: WdfIoTargetQueryTargetProperty 612 // 613 typedef 614 _Must_inspect_result_ 615 _IRQL_requires_max_(PASSIVE_LEVEL) 616 WDFAPI 617 NTSTATUS 618 (STDCALL *PFN_WDFIOTARGETQUERYTARGETPROPERTY)( 619 _In_ 620 PWDF_DRIVER_GLOBALS DriverGlobals, 621 _In_ 622 WDFIOTARGET IoTarget, 623 _In_ 624 DEVICE_REGISTRY_PROPERTY DeviceProperty, 625 _In_ 626 ULONG BufferLength, 627 _When_(BufferLength != 0, _Out_writes_bytes_to_opt_(BufferLength, *ResultLength)) 628 _When_(BufferLength == 0, _Out_opt_) 629 PVOID PropertyBuffer, 630 _Deref_out_range_(<=,BufferLength) 631 PULONG ResultLength 632 ); 633 634 _Must_inspect_result_ 635 _IRQL_requires_max_(PASSIVE_LEVEL) 636 FORCEINLINE 637 NTSTATUS 638 WdfIoTargetQueryTargetProperty( 639 _In_ 640 WDFIOTARGET IoTarget, 641 _In_ 642 DEVICE_REGISTRY_PROPERTY DeviceProperty, 643 _In_ 644 ULONG BufferLength, 645 _When_(BufferLength != 0, _Out_writes_bytes_to_opt_(BufferLength, *ResultLength)) 646 _When_(BufferLength == 0, _Out_opt_) 647 PVOID PropertyBuffer, 648 _Deref_out_range_(<=,BufferLength) 649 PULONG ResultLength 650 ) 651 { 652 return ((PFN_WDFIOTARGETQUERYTARGETPROPERTY) WdfFunctions[WdfIoTargetQueryTargetPropertyTableIndex])(WdfDriverGlobals, IoTarget, DeviceProperty, BufferLength, PropertyBuffer, ResultLength); 653 } 654 655 // 656 // WDF Function: WdfIoTargetAllocAndQueryTargetProperty 657 // 658 typedef 659 _Must_inspect_result_ 660 _IRQL_requires_max_(PASSIVE_LEVEL) 661 WDFAPI 662 NTSTATUS 663 (STDCALL *PFN_WDFIOTARGETALLOCANDQUERYTARGETPROPERTY)( 664 _In_ 665 PWDF_DRIVER_GLOBALS DriverGlobals, 666 _In_ 667 WDFIOTARGET IoTarget, 668 _In_ 669 DEVICE_REGISTRY_PROPERTY DeviceProperty, 670 _In_ 671 _Strict_type_match_ 672 POOL_TYPE PoolType, 673 _In_opt_ 674 PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes, 675 _Out_ 676 WDFMEMORY* PropertyMemory 677 ); 678 679 _Must_inspect_result_ 680 _IRQL_requires_max_(PASSIVE_LEVEL) 681 FORCEINLINE 682 NTSTATUS 683 WdfIoTargetAllocAndQueryTargetProperty( 684 _In_ 685 WDFIOTARGET IoTarget, 686 _In_ 687 DEVICE_REGISTRY_PROPERTY DeviceProperty, 688 _In_ 689 _Strict_type_match_ 690 POOL_TYPE PoolType, 691 _In_opt_ 692 PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes, 693 _Out_ 694 WDFMEMORY* PropertyMemory 695 ) 696 { 697 return ((PFN_WDFIOTARGETALLOCANDQUERYTARGETPROPERTY) WdfFunctions[WdfIoTargetAllocAndQueryTargetPropertyTableIndex])(WdfDriverGlobals, IoTarget, DeviceProperty, PoolType, PropertyMemoryAttributes, PropertyMemory); 698 } 699 700 // 701 // WDF Function: WdfIoTargetQueryForInterface 702 // 703 typedef 704 _Must_inspect_result_ 705 _IRQL_requires_max_(PASSIVE_LEVEL) 706 WDFAPI 707 NTSTATUS 708 (STDCALL *PFN_WDFIOTARGETQUERYFORINTERFACE)( 709 _In_ 710 PWDF_DRIVER_GLOBALS DriverGlobals, 711 _In_ 712 WDFIOTARGET IoTarget, 713 _In_ 714 LPCGUID InterfaceType, 715 _Out_ 716 PINTERFACE Interface, 717 _In_ 718 USHORT Size, 719 _In_ 720 USHORT Version, 721 _In_opt_ 722 PVOID InterfaceSpecificData 723 ); 724 725 _Must_inspect_result_ 726 _IRQL_requires_max_(PASSIVE_LEVEL) 727 FORCEINLINE 728 NTSTATUS 729 WdfIoTargetQueryForInterface( 730 _In_ 731 WDFIOTARGET IoTarget, 732 _In_ 733 LPCGUID InterfaceType, 734 _Out_ 735 PINTERFACE Interface, 736 _In_ 737 USHORT Size, 738 _In_ 739 USHORT Version, 740 _In_opt_ 741 PVOID InterfaceSpecificData 742 ) 743 { 744 return ((PFN_WDFIOTARGETQUERYFORINTERFACE) WdfFunctions[WdfIoTargetQueryForInterfaceTableIndex])(WdfDriverGlobals, IoTarget, InterfaceType, Interface, Size, Version, InterfaceSpecificData); 745 } 746 747 // 748 // WDF Function: WdfIoTargetWdmGetTargetDeviceObject 749 // 750 typedef 751 _IRQL_requires_max_(DISPATCH_LEVEL) 752 WDFAPI 753 PDEVICE_OBJECT 754 (STDCALL *PFN_WDFIOTARGETWDMGETTARGETDEVICEOBJECT)( 755 _In_ 756 PWDF_DRIVER_GLOBALS DriverGlobals, 757 _In_ 758 WDFIOTARGET IoTarget 759 ); 760 761 _IRQL_requires_max_(DISPATCH_LEVEL) 762 FORCEINLINE 763 PDEVICE_OBJECT 764 WdfIoTargetWdmGetTargetDeviceObject( 765 _In_ 766 WDFIOTARGET IoTarget 767 ) 768 { 769 return ((PFN_WDFIOTARGETWDMGETTARGETDEVICEOBJECT) WdfFunctions[WdfIoTargetWdmGetTargetDeviceObjectTableIndex])(WdfDriverGlobals, IoTarget); 770 } 771 772 // 773 // WDF Function: WdfIoTargetWdmGetTargetPhysicalDevice 774 // 775 typedef 776 _IRQL_requires_max_(DISPATCH_LEVEL) 777 WDFAPI 778 PDEVICE_OBJECT 779 (STDCALL *PFN_WDFIOTARGETWDMGETTARGETPHYSICALDEVICE)( 780 _In_ 781 PWDF_DRIVER_GLOBALS DriverGlobals, 782 _In_ 783 WDFIOTARGET IoTarget 784 ); 785 786 _IRQL_requires_max_(DISPATCH_LEVEL) 787 FORCEINLINE 788 PDEVICE_OBJECT 789 WdfIoTargetWdmGetTargetPhysicalDevice( 790 _In_ 791 WDFIOTARGET IoTarget 792 ) 793 { 794 return ((PFN_WDFIOTARGETWDMGETTARGETPHYSICALDEVICE) WdfFunctions[WdfIoTargetWdmGetTargetPhysicalDeviceTableIndex])(WdfDriverGlobals, IoTarget); 795 } 796 797 // 798 // WDF Function: WdfIoTargetWdmGetTargetFileObject 799 // 800 typedef 801 _IRQL_requires_max_(DISPATCH_LEVEL) 802 WDFAPI 803 PFILE_OBJECT 804 (STDCALL *PFN_WDFIOTARGETWDMGETTARGETFILEOBJECT)( 805 _In_ 806 PWDF_DRIVER_GLOBALS DriverGlobals, 807 _In_ 808 WDFIOTARGET IoTarget 809 ); 810 811 _IRQL_requires_max_(DISPATCH_LEVEL) 812 FORCEINLINE 813 PFILE_OBJECT 814 WdfIoTargetWdmGetTargetFileObject( 815 _In_ 816 WDFIOTARGET IoTarget 817 ) 818 { 819 return ((PFN_WDFIOTARGETWDMGETTARGETFILEOBJECT) WdfFunctions[WdfIoTargetWdmGetTargetFileObjectTableIndex])(WdfDriverGlobals, IoTarget); 820 } 821 822 // 823 // WDF Function: WdfIoTargetWdmGetTargetFileHandle 824 // 825 typedef 826 _IRQL_requires_max_(DISPATCH_LEVEL) 827 WDFAPI 828 HANDLE 829 (STDCALL *PFN_WDFIOTARGETWDMGETTARGETFILEHANDLE)( 830 _In_ 831 PWDF_DRIVER_GLOBALS DriverGlobals, 832 _In_ 833 WDFIOTARGET IoTarget 834 ); 835 836 _IRQL_requires_max_(DISPATCH_LEVEL) 837 FORCEINLINE 838 HANDLE 839 WdfIoTargetWdmGetTargetFileHandle( 840 _In_ 841 WDFIOTARGET IoTarget 842 ) 843 { 844 return ((PFN_WDFIOTARGETWDMGETTARGETFILEHANDLE) WdfFunctions[WdfIoTargetWdmGetTargetFileHandleTableIndex])(WdfDriverGlobals, IoTarget); 845 } 846 847 // 848 // WDF Function: WdfIoTargetSendReadSynchronously 849 // 850 typedef 851 _Must_inspect_result_ 852 _IRQL_requires_max_(PASSIVE_LEVEL) 853 WDFAPI 854 NTSTATUS 855 (STDCALL *PFN_WDFIOTARGETSENDREADSYNCHRONOUSLY)( 856 _In_ 857 PWDF_DRIVER_GLOBALS DriverGlobals, 858 _In_ 859 WDFIOTARGET IoTarget, 860 _In_opt_ 861 WDFREQUEST Request, 862 _In_opt_ 863 PWDF_MEMORY_DESCRIPTOR OutputBuffer, 864 _In_opt_ 865 PLONGLONG DeviceOffset, 866 _In_opt_ 867 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 868 _Out_opt_ 869 PULONG_PTR BytesRead 870 ); 871 872 _Must_inspect_result_ 873 _IRQL_requires_max_(PASSIVE_LEVEL) 874 FORCEINLINE 875 NTSTATUS 876 WdfIoTargetSendReadSynchronously( 877 _In_ 878 WDFIOTARGET IoTarget, 879 _In_opt_ 880 WDFREQUEST Request, 881 _In_opt_ 882 PWDF_MEMORY_DESCRIPTOR OutputBuffer, 883 _In_opt_ 884 PLONGLONG DeviceOffset, 885 _In_opt_ 886 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 887 _Out_opt_ 888 PULONG_PTR BytesRead 889 ) 890 { 891 return ((PFN_WDFIOTARGETSENDREADSYNCHRONOUSLY) WdfFunctions[WdfIoTargetSendReadSynchronouslyTableIndex])(WdfDriverGlobals, IoTarget, Request, OutputBuffer, DeviceOffset, RequestOptions, BytesRead); 892 } 893 894 // 895 // WDF Function: WdfIoTargetFormatRequestForRead 896 // 897 typedef 898 _Must_inspect_result_ 899 _IRQL_requires_max_(DISPATCH_LEVEL) 900 WDFAPI 901 NTSTATUS 902 (STDCALL *PFN_WDFIOTARGETFORMATREQUESTFORREAD)( 903 _In_ 904 PWDF_DRIVER_GLOBALS DriverGlobals, 905 _In_ 906 WDFIOTARGET IoTarget, 907 _In_ 908 WDFREQUEST Request, 909 _In_opt_ 910 WDFMEMORY OutputBuffer, 911 _In_opt_ 912 PWDFMEMORY_OFFSET OutputBufferOffset, 913 _In_opt_ 914 PLONGLONG DeviceOffset 915 ); 916 917 _Must_inspect_result_ 918 _IRQL_requires_max_(DISPATCH_LEVEL) 919 FORCEINLINE 920 NTSTATUS 921 WdfIoTargetFormatRequestForRead( 922 _In_ 923 WDFIOTARGET IoTarget, 924 _In_ 925 WDFREQUEST Request, 926 _In_opt_ 927 WDFMEMORY OutputBuffer, 928 _In_opt_ 929 PWDFMEMORY_OFFSET OutputBufferOffset, 930 _In_opt_ 931 PLONGLONG DeviceOffset 932 ) 933 { 934 return ((PFN_WDFIOTARGETFORMATREQUESTFORREAD) WdfFunctions[WdfIoTargetFormatRequestForReadTableIndex])(WdfDriverGlobals, IoTarget, Request, OutputBuffer, OutputBufferOffset, DeviceOffset); 935 } 936 937 // 938 // WDF Function: WdfIoTargetSendWriteSynchronously 939 // 940 typedef 941 _Must_inspect_result_ 942 _IRQL_requires_max_(PASSIVE_LEVEL) 943 WDFAPI 944 NTSTATUS 945 (STDCALL *PFN_WDFIOTARGETSENDWRITESYNCHRONOUSLY)( 946 _In_ 947 PWDF_DRIVER_GLOBALS DriverGlobals, 948 _In_ 949 WDFIOTARGET IoTarget, 950 _In_opt_ 951 WDFREQUEST Request, 952 _In_opt_ 953 PWDF_MEMORY_DESCRIPTOR InputBuffer, 954 _In_opt_ 955 PLONGLONG DeviceOffset, 956 _In_opt_ 957 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 958 _Out_opt_ 959 PULONG_PTR BytesWritten 960 ); 961 962 _Must_inspect_result_ 963 _IRQL_requires_max_(PASSIVE_LEVEL) 964 FORCEINLINE 965 NTSTATUS 966 WdfIoTargetSendWriteSynchronously( 967 _In_ 968 WDFIOTARGET IoTarget, 969 _In_opt_ 970 WDFREQUEST Request, 971 _In_opt_ 972 PWDF_MEMORY_DESCRIPTOR InputBuffer, 973 _In_opt_ 974 PLONGLONG DeviceOffset, 975 _In_opt_ 976 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 977 _Out_opt_ 978 PULONG_PTR BytesWritten 979 ) 980 { 981 return ((PFN_WDFIOTARGETSENDWRITESYNCHRONOUSLY) WdfFunctions[WdfIoTargetSendWriteSynchronouslyTableIndex])(WdfDriverGlobals, IoTarget, Request, InputBuffer, DeviceOffset, RequestOptions, BytesWritten); 982 } 983 984 // 985 // WDF Function: WdfIoTargetFormatRequestForWrite 986 // 987 typedef 988 _Must_inspect_result_ 989 _IRQL_requires_max_(DISPATCH_LEVEL) 990 WDFAPI 991 NTSTATUS 992 (STDCALL *PFN_WDFIOTARGETFORMATREQUESTFORWRITE)( 993 _In_ 994 PWDF_DRIVER_GLOBALS DriverGlobals, 995 _In_ 996 WDFIOTARGET IoTarget, 997 _In_ 998 WDFREQUEST Request, 999 _In_opt_ 1000 WDFMEMORY InputBuffer, 1001 _In_opt_ 1002 PWDFMEMORY_OFFSET InputBufferOffset, 1003 _In_opt_ 1004 PLONGLONG DeviceOffset 1005 ); 1006 1007 _Must_inspect_result_ 1008 _IRQL_requires_max_(DISPATCH_LEVEL) 1009 FORCEINLINE 1010 NTSTATUS 1011 WdfIoTargetFormatRequestForWrite( 1012 _In_ 1013 WDFIOTARGET IoTarget, 1014 _In_ 1015 WDFREQUEST Request, 1016 _In_opt_ 1017 WDFMEMORY InputBuffer, 1018 _In_opt_ 1019 PWDFMEMORY_OFFSET InputBufferOffset, 1020 _In_opt_ 1021 PLONGLONG DeviceOffset 1022 ) 1023 { 1024 return ((PFN_WDFIOTARGETFORMATREQUESTFORWRITE) WdfFunctions[WdfIoTargetFormatRequestForWriteTableIndex])(WdfDriverGlobals, IoTarget, Request, InputBuffer, InputBufferOffset, DeviceOffset); 1025 } 1026 1027 // 1028 // WDF Function: WdfIoTargetSendIoctlSynchronously 1029 // 1030 typedef 1031 _Must_inspect_result_ 1032 _IRQL_requires_max_(PASSIVE_LEVEL) 1033 WDFAPI 1034 NTSTATUS 1035 (STDCALL *PFN_WDFIOTARGETSENDIOCTLSYNCHRONOUSLY)( 1036 _In_ 1037 PWDF_DRIVER_GLOBALS DriverGlobals, 1038 _In_ 1039 WDFIOTARGET IoTarget, 1040 _In_opt_ 1041 WDFREQUEST Request, 1042 _In_ 1043 ULONG IoctlCode, 1044 _In_opt_ 1045 PWDF_MEMORY_DESCRIPTOR InputBuffer, 1046 _In_opt_ 1047 PWDF_MEMORY_DESCRIPTOR OutputBuffer, 1048 _In_opt_ 1049 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 1050 _Out_opt_ 1051 PULONG_PTR BytesReturned 1052 ); 1053 1054 _Must_inspect_result_ 1055 _IRQL_requires_max_(PASSIVE_LEVEL) 1056 FORCEINLINE 1057 NTSTATUS 1058 WdfIoTargetSendIoctlSynchronously( 1059 _In_ 1060 WDFIOTARGET IoTarget, 1061 _In_opt_ 1062 WDFREQUEST Request, 1063 _In_ 1064 ULONG IoctlCode, 1065 _In_opt_ 1066 PWDF_MEMORY_DESCRIPTOR InputBuffer, 1067 _In_opt_ 1068 PWDF_MEMORY_DESCRIPTOR OutputBuffer, 1069 _In_opt_ 1070 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 1071 _Out_opt_ 1072 PULONG_PTR BytesReturned 1073 ) 1074 { 1075 return ((PFN_WDFIOTARGETSENDIOCTLSYNCHRONOUSLY) WdfFunctions[WdfIoTargetSendIoctlSynchronouslyTableIndex])(WdfDriverGlobals, IoTarget, Request, IoctlCode, InputBuffer, OutputBuffer, RequestOptions, BytesReturned); 1076 } 1077 1078 // 1079 // WDF Function: WdfIoTargetFormatRequestForIoctl 1080 // 1081 typedef 1082 _Must_inspect_result_ 1083 _IRQL_requires_max_(DISPATCH_LEVEL) 1084 WDFAPI 1085 NTSTATUS 1086 (STDCALL *PFN_WDFIOTARGETFORMATREQUESTFORIOCTL)( 1087 _In_ 1088 PWDF_DRIVER_GLOBALS DriverGlobals, 1089 _In_ 1090 WDFIOTARGET IoTarget, 1091 _In_ 1092 WDFREQUEST Request, 1093 _In_ 1094 ULONG IoctlCode, 1095 _In_opt_ 1096 WDFMEMORY InputBuffer, 1097 _In_opt_ 1098 PWDFMEMORY_OFFSET InputBufferOffset, 1099 _In_opt_ 1100 WDFMEMORY OutputBuffer, 1101 _In_opt_ 1102 PWDFMEMORY_OFFSET OutputBufferOffset 1103 ); 1104 1105 _Must_inspect_result_ 1106 _IRQL_requires_max_(DISPATCH_LEVEL) 1107 FORCEINLINE 1108 NTSTATUS 1109 WdfIoTargetFormatRequestForIoctl( 1110 _In_ 1111 WDFIOTARGET IoTarget, 1112 _In_ 1113 WDFREQUEST Request, 1114 _In_ 1115 ULONG IoctlCode, 1116 _In_opt_ 1117 WDFMEMORY InputBuffer, 1118 _In_opt_ 1119 PWDFMEMORY_OFFSET InputBufferOffset, 1120 _In_opt_ 1121 WDFMEMORY OutputBuffer, 1122 _In_opt_ 1123 PWDFMEMORY_OFFSET OutputBufferOffset 1124 ) 1125 { 1126 return ((PFN_WDFIOTARGETFORMATREQUESTFORIOCTL) WdfFunctions[WdfIoTargetFormatRequestForIoctlTableIndex])(WdfDriverGlobals, IoTarget, Request, IoctlCode, InputBuffer, InputBufferOffset, OutputBuffer, OutputBufferOffset); 1127 } 1128 1129 // 1130 // WDF Function: WdfIoTargetSendInternalIoctlSynchronously 1131 // 1132 typedef 1133 _Must_inspect_result_ 1134 _IRQL_requires_max_(PASSIVE_LEVEL) 1135 WDFAPI 1136 NTSTATUS 1137 (STDCALL *PFN_WDFIOTARGETSENDINTERNALIOCTLSYNCHRONOUSLY)( 1138 _In_ 1139 PWDF_DRIVER_GLOBALS DriverGlobals, 1140 _In_ 1141 WDFIOTARGET IoTarget, 1142 _In_opt_ 1143 WDFREQUEST Request, 1144 _In_ 1145 ULONG IoctlCode, 1146 _In_opt_ 1147 PWDF_MEMORY_DESCRIPTOR InputBuffer, 1148 _In_opt_ 1149 PWDF_MEMORY_DESCRIPTOR OutputBuffer, 1150 _In_opt_ 1151 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 1152 _Out_opt_ 1153 PULONG_PTR BytesReturned 1154 ); 1155 1156 _Must_inspect_result_ 1157 _IRQL_requires_max_(PASSIVE_LEVEL) 1158 FORCEINLINE 1159 NTSTATUS 1160 WdfIoTargetSendInternalIoctlSynchronously( 1161 _In_ 1162 WDFIOTARGET IoTarget, 1163 _In_opt_ 1164 WDFREQUEST Request, 1165 _In_ 1166 ULONG IoctlCode, 1167 _In_opt_ 1168 PWDF_MEMORY_DESCRIPTOR InputBuffer, 1169 _In_opt_ 1170 PWDF_MEMORY_DESCRIPTOR OutputBuffer, 1171 _In_opt_ 1172 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 1173 _Out_opt_ 1174 PULONG_PTR BytesReturned 1175 ) 1176 { 1177 return ((PFN_WDFIOTARGETSENDINTERNALIOCTLSYNCHRONOUSLY) WdfFunctions[WdfIoTargetSendInternalIoctlSynchronouslyTableIndex])(WdfDriverGlobals, IoTarget, Request, IoctlCode, InputBuffer, OutputBuffer, RequestOptions, BytesReturned); 1178 } 1179 1180 // 1181 // WDF Function: WdfIoTargetFormatRequestForInternalIoctl 1182 // 1183 typedef 1184 _Must_inspect_result_ 1185 _IRQL_requires_max_(DISPATCH_LEVEL) 1186 WDFAPI 1187 NTSTATUS 1188 (STDCALL *PFN_WDFIOTARGETFORMATREQUESTFORINTERNALIOCTL)( 1189 _In_ 1190 PWDF_DRIVER_GLOBALS DriverGlobals, 1191 _In_ 1192 WDFIOTARGET IoTarget, 1193 _In_ 1194 WDFREQUEST Request, 1195 _In_ 1196 ULONG IoctlCode, 1197 _In_opt_ 1198 WDFMEMORY InputBuffer, 1199 _In_opt_ 1200 PWDFMEMORY_OFFSET InputBufferOffset, 1201 _In_opt_ 1202 WDFMEMORY OutputBuffer, 1203 _In_opt_ 1204 PWDFMEMORY_OFFSET OutputBufferOffset 1205 ); 1206 1207 _Must_inspect_result_ 1208 _IRQL_requires_max_(DISPATCH_LEVEL) 1209 FORCEINLINE 1210 NTSTATUS 1211 WdfIoTargetFormatRequestForInternalIoctl( 1212 _In_ 1213 WDFIOTARGET IoTarget, 1214 _In_ 1215 WDFREQUEST Request, 1216 _In_ 1217 ULONG IoctlCode, 1218 _In_opt_ 1219 WDFMEMORY InputBuffer, 1220 _In_opt_ 1221 PWDFMEMORY_OFFSET InputBufferOffset, 1222 _In_opt_ 1223 WDFMEMORY OutputBuffer, 1224 _In_opt_ 1225 PWDFMEMORY_OFFSET OutputBufferOffset 1226 ) 1227 { 1228 return ((PFN_WDFIOTARGETFORMATREQUESTFORINTERNALIOCTL) WdfFunctions[WdfIoTargetFormatRequestForInternalIoctlTableIndex])(WdfDriverGlobals, IoTarget, Request, IoctlCode, InputBuffer, InputBufferOffset, OutputBuffer, OutputBufferOffset); 1229 } 1230 1231 // 1232 // WDF Function: WdfIoTargetSendInternalIoctlOthersSynchronously 1233 // 1234 typedef 1235 _Must_inspect_result_ 1236 _IRQL_requires_max_(PASSIVE_LEVEL) 1237 WDFAPI 1238 NTSTATUS 1239 (STDCALL *PFN_WDFIOTARGETSENDINTERNALIOCTLOTHERSSYNCHRONOUSLY)( 1240 _In_ 1241 PWDF_DRIVER_GLOBALS DriverGlobals, 1242 _In_ 1243 WDFIOTARGET IoTarget, 1244 _In_opt_ 1245 WDFREQUEST Request, 1246 _In_ 1247 ULONG IoctlCode, 1248 _In_opt_ 1249 PWDF_MEMORY_DESCRIPTOR OtherArg1, 1250 _In_opt_ 1251 PWDF_MEMORY_DESCRIPTOR OtherArg2, 1252 _In_opt_ 1253 PWDF_MEMORY_DESCRIPTOR OtherArg4, 1254 _In_opt_ 1255 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 1256 _Out_opt_ 1257 PULONG_PTR BytesReturned 1258 ); 1259 1260 _Must_inspect_result_ 1261 _IRQL_requires_max_(PASSIVE_LEVEL) 1262 FORCEINLINE 1263 NTSTATUS 1264 WdfIoTargetSendInternalIoctlOthersSynchronously( 1265 _In_ 1266 WDFIOTARGET IoTarget, 1267 _In_opt_ 1268 WDFREQUEST Request, 1269 _In_ 1270 ULONG IoctlCode, 1271 _In_opt_ 1272 PWDF_MEMORY_DESCRIPTOR OtherArg1, 1273 _In_opt_ 1274 PWDF_MEMORY_DESCRIPTOR OtherArg2, 1275 _In_opt_ 1276 PWDF_MEMORY_DESCRIPTOR OtherArg4, 1277 _In_opt_ 1278 PWDF_REQUEST_SEND_OPTIONS RequestOptions, 1279 _Out_opt_ 1280 PULONG_PTR BytesReturned 1281 ) 1282 { 1283 return ((PFN_WDFIOTARGETSENDINTERNALIOCTLOTHERSSYNCHRONOUSLY) WdfFunctions[WdfIoTargetSendInternalIoctlOthersSynchronouslyTableIndex])(WdfDriverGlobals, IoTarget, Request, IoctlCode, OtherArg1, OtherArg2, OtherArg4, RequestOptions, BytesReturned); 1284 } 1285 1286 // 1287 // WDF Function: WdfIoTargetFormatRequestForInternalIoctlOthers 1288 // 1289 typedef 1290 _Must_inspect_result_ 1291 _IRQL_requires_max_(DISPATCH_LEVEL) 1292 WDFAPI 1293 NTSTATUS 1294 (STDCALL *PFN_WDFIOTARGETFORMATREQUESTFORINTERNALIOCTLOTHERS)( 1295 _In_ 1296 PWDF_DRIVER_GLOBALS DriverGlobals, 1297 _In_ 1298 WDFIOTARGET IoTarget, 1299 _In_ 1300 WDFREQUEST Request, 1301 _In_ 1302 ULONG IoctlCode, 1303 _In_opt_ 1304 WDFMEMORY OtherArg1, 1305 _In_opt_ 1306 PWDFMEMORY_OFFSET OtherArg1Offset, 1307 _In_opt_ 1308 WDFMEMORY OtherArg2, 1309 _In_opt_ 1310 PWDFMEMORY_OFFSET OtherArg2Offset, 1311 _In_opt_ 1312 WDFMEMORY OtherArg4, 1313 _In_opt_ 1314 PWDFMEMORY_OFFSET OtherArg4Offset 1315 ); 1316 1317 _Must_inspect_result_ 1318 _IRQL_requires_max_(DISPATCH_LEVEL) 1319 FORCEINLINE 1320 NTSTATUS 1321 WdfIoTargetFormatRequestForInternalIoctlOthers( 1322 _In_ 1323 WDFIOTARGET IoTarget, 1324 _In_ 1325 WDFREQUEST Request, 1326 _In_ 1327 ULONG IoctlCode, 1328 _In_opt_ 1329 WDFMEMORY OtherArg1, 1330 _In_opt_ 1331 PWDFMEMORY_OFFSET OtherArg1Offset, 1332 _In_opt_ 1333 WDFMEMORY OtherArg2, 1334 _In_opt_ 1335 PWDFMEMORY_OFFSET OtherArg2Offset, 1336 _In_opt_ 1337 WDFMEMORY OtherArg4, 1338 _In_opt_ 1339 PWDFMEMORY_OFFSET OtherArg4Offset 1340 ) 1341 { 1342 return ((PFN_WDFIOTARGETFORMATREQUESTFORINTERNALIOCTLOTHERS) WdfFunctions[WdfIoTargetFormatRequestForInternalIoctlOthersTableIndex])(WdfDriverGlobals, IoTarget, Request, IoctlCode, OtherArg1, OtherArg1Offset, OtherArg2, OtherArg2Offset, OtherArg4, OtherArg4Offset); 1343 } 1344 1345 1346 1347 #endif // (NTDDI_VERSION >= NTDDI_WIN2K) 1348 1349 1350 1351 WDF_EXTERN_C_END 1352 1353 #endif // _WDFIOTARGET_H_ 1354 1355