1 /*++ 2 3 Copyright (c) Microsoft Corporation. All rights reserved. 4 5 _WdfVersionBuild_ 6 7 Module Name: 8 9 wdfrequest.h 10 11 Abstract: 12 13 This module contains contains the Windows Driver Framework Request object 14 interfaces. 15 16 Environment: 17 18 kernel mode only 19 20 Revision History: 21 22 23 --*/ 24 25 // 26 // NOTE: This header is generated by stubwork. Please make any 27 // modifications to the corresponding template files 28 // (.x or .y) and use stubwork to regenerate the header 29 // 30 31 #ifndef _WDFREQUEST_H_ 32 #define _WDFREQUEST_H_ 33 34 #ifndef WDF_EXTERN_C 35 #ifdef __cplusplus 36 #define WDF_EXTERN_C extern "C" 37 #define WDF_EXTERN_C_START extern "C" { 38 #define WDF_EXTERN_C_END } 39 #else 40 #define WDF_EXTERN_C 41 #define WDF_EXTERN_C_START 42 #define WDF_EXTERN_C_END 43 #endif 44 #endif 45 46 WDF_EXTERN_C_START 47 48 49 50 #if (NTDDI_VERSION >= NTDDI_WIN2K) 51 52 // 53 // Types 54 // 55 56 /* typedef enum _WDF_REQUEST_TYPE { // declaration moved to wdfdevice.h 57 WdfRequestTypeCreate = 0x0, 58 WdfRequestTypeCreateNamedPipe = 0x1, 59 WdfRequestTypeClose = 0x2, 60 WdfRequestTypeRead = 0x3, 61 WdfRequestTypeWrite = 0x4, 62 WdfRequestTypeQueryInformation = 0x5, 63 WdfRequestTypeSetInformation = 0x6, 64 WdfRequestTypeQueryEA = 0x7, 65 WdfRequestTypeSetEA = 0x8, 66 WdfRequestTypeFlushBuffers = 0x9, 67 WdfRequestTypeQueryVolumeInformation = 0xa, 68 WdfRequestTypeSetVolumeInformation = 0xb, 69 WdfRequestTypeDirectoryControl = 0xc, 70 WdfRequestTypeFileSystemControl = 0xd, 71 WdfRequestTypeDeviceControl = 0xe, 72 WdfRequestTypeDeviceControlInternal = 0xf, 73 WdfRequestTypeShutdown = 0x10, 74 WdfRequestTypeLockControl = 0x11, 75 WdfRequestTypeCleanup = 0x12, 76 WdfRequestTypeCreateMailSlot = 0x13, 77 WdfRequestTypeQuerySecurity = 0x14, 78 WdfRequestTypeSetSecurity = 0x15, 79 WdfRequestTypePower = 0x16, 80 WdfRequestTypeSystemControl = 0x17, 81 WdfRequestTypeDeviceChange = 0x18, 82 WdfRequestTypeQueryQuota = 0x19, 83 WdfRequestTypeSetQuota = 0x1A, 84 WdfRequestTypePnp = 0x1B, 85 WdfRequestTypeOther =0x1C, 86 WdfRequestTypeUsb = 0x40, 87 WdfRequestTypeNoFormat = 0xFF, 88 WdfRequestTypeMax, 89 } WDF_REQUEST_TYPE; */ 90 91 typedef enum _WDF_REQUEST_REUSE_FLAGS { 92 WDF_REQUEST_REUSE_NO_FLAGS = 0x00000000, 93 WDF_REQUEST_REUSE_SET_NEW_IRP = 0x00000001, 94 } WDF_REQUEST_REUSE_FLAGS; 95 96 // 97 // This defines the actions to take on a request 98 // in EvtIoStop. 99 // 100 typedef enum _WDF_REQUEST_STOP_ACTION_FLAGS { 101 WdfRequestStopActionInvalid = 0, 102 WdfRequestStopActionSuspend = 0x01, // Device is being suspended 103 WdfRequestStopActionPurge = 0x2, // Device/queue is being removed 104 WdfRequestStopRequestCancelable = 0x10000000, // This bit is set if the request is marked cancelable 105 } WDF_REQUEST_STOP_ACTION_FLAGS; 106 107 typedef enum _WDF_REQUEST_SEND_OPTIONS_FLAGS { 108 WDF_REQUEST_SEND_OPTION_TIMEOUT = 0x00000001, 109 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS = 0x00000002, 110 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE = 0x00000004, 111 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET = 0x00000008, 112 WDF_REQUEST_SEND_OPTION_IMPERSONATE_CLIENT = 0x00010000, 113 WDF_REQUEST_SEND_OPTION_IMPERSONATION_IGNORE_FAILURE = 0x00020000, 114 } WDF_REQUEST_SEND_OPTIONS_FLAGS; 115 116 117 118 // Request cancel is called if a request that has been marked cancelable is cancelled 119 typedef 120 _Function_class_(EVT_WDF_REQUEST_CANCEL) 121 _IRQL_requires_same_ 122 _IRQL_requires_max_(DISPATCH_LEVEL) 123 VOID 124 STDCALL 125 EVT_WDF_REQUEST_CANCEL( 126 _In_ 127 WDFREQUEST Request 128 ); 129 130 typedef EVT_WDF_REQUEST_CANCEL *PFN_WDF_REQUEST_CANCEL; 131 132 133 // 134 // This parameters structure allows general access to a requests parameters 135 // 136 typedef struct _WDF_REQUEST_PARAMETERS { 137 138 USHORT Size; 139 140 UCHAR MinorFunction; 141 142 WDF_REQUEST_TYPE Type; 143 144 // 145 // The following user parameters are based on the service that is being 146 // invoked. Drivers and file systems can determine which set to use based 147 // on the above major and minor function codes. 148 // 149 union { 150 151 // 152 // System service parameters for: Create 153 // 154 155 struct { 156 PIO_SECURITY_CONTEXT SecurityContext; 157 ULONG Options; 158 USHORT POINTER_ALIGNMENT FileAttributes; 159 USHORT ShareAccess; 160 ULONG POINTER_ALIGNMENT EaLength; 161 } Create; 162 163 164 // 165 // System service parameters for: Read 166 // 167 168 struct { 169 size_t Length; 170 ULONG POINTER_ALIGNMENT Key; 171 LONGLONG DeviceOffset; 172 } Read; 173 174 // 175 // System service parameters for: Write 176 // 177 178 struct { 179 size_t Length; 180 ULONG POINTER_ALIGNMENT Key; 181 LONGLONG DeviceOffset; 182 } Write; 183 184 // 185 // System service parameters for: Device Control 186 // 187 // Note that the user's output buffer is stored in the UserBuffer field 188 // and the user's input buffer is stored in the SystemBuffer field. 189 // 190 191 struct { 192 size_t OutputBufferLength; 193 size_t POINTER_ALIGNMENT InputBufferLength; 194 ULONG POINTER_ALIGNMENT IoControlCode; 195 PVOID Type3InputBuffer; 196 } DeviceIoControl; 197 198 struct { 199 PVOID Arg1; 200 PVOID Arg2; 201 ULONG POINTER_ALIGNMENT IoControlCode; 202 PVOID Arg4; 203 } Others; 204 205 } Parameters; 206 207 } WDF_REQUEST_PARAMETERS, *PWDF_REQUEST_PARAMETERS; 208 209 FORCEINLINE 210 VOID 211 WDF_REQUEST_PARAMETERS_INIT( 212 _Out_ PWDF_REQUEST_PARAMETERS Parameters 213 ) 214 { 215 RtlZeroMemory(Parameters, sizeof(WDF_REQUEST_PARAMETERS)); 216 217 Parameters->Size = sizeof(WDF_REQUEST_PARAMETERS); 218 } 219 220 typedef struct _WDF_USB_REQUEST_COMPLETION_PARAMS *PWDF_USB_REQUEST_COMPLETION_PARAMS; 221 222 typedef struct _WDF_REQUEST_COMPLETION_PARAMS { 223 // 224 // Size of the structure in bytes 225 // 226 ULONG Size; 227 228 WDF_REQUEST_TYPE Type; 229 230 IO_STATUS_BLOCK IoStatus; 231 232 union { 233 struct { 234 WDFMEMORY Buffer; 235 size_t Length; 236 size_t Offset; 237 } Write; 238 239 struct { 240 WDFMEMORY Buffer; 241 size_t Length; 242 size_t Offset; 243 } Read; 244 245 struct { 246 ULONG IoControlCode; 247 248 struct { 249 WDFMEMORY Buffer; 250 size_t Offset; 251 } Input; 252 253 struct { 254 WDFMEMORY Buffer; 255 size_t Offset; 256 size_t Length; 257 } Output; 258 } Ioctl; 259 260 struct { 261 union { 262 PVOID Ptr; 263 ULONG_PTR Value; 264 } Argument1; 265 union { 266 PVOID Ptr; 267 ULONG_PTR Value; 268 } Argument2; 269 union { 270 PVOID Ptr; 271 ULONG_PTR Value; 272 } Argument3; 273 union { 274 PVOID Ptr; 275 ULONG_PTR Value; 276 } Argument4; 277 } Others; 278 279 struct { 280 PWDF_USB_REQUEST_COMPLETION_PARAMS Completion; 281 } Usb; 282 } Parameters; 283 284 } WDF_REQUEST_COMPLETION_PARAMS, *PWDF_REQUEST_COMPLETION_PARAMS; 285 286 FORCEINLINE 287 VOID 288 WDF_REQUEST_COMPLETION_PARAMS_INIT( 289 _Out_ PWDF_REQUEST_COMPLETION_PARAMS Params 290 ) 291 { 292 RtlZeroMemory(Params, sizeof(WDF_REQUEST_COMPLETION_PARAMS)); 293 Params->Size = sizeof(WDF_REQUEST_COMPLETION_PARAMS); 294 Params->Type = WdfRequestTypeNoFormat; 295 } 296 297 typedef 298 _Function_class_(EVT_WDF_REQUEST_COMPLETION_ROUTINE) 299 _IRQL_requires_same_ 300 VOID 301 STDCALL 302 EVT_WDF_REQUEST_COMPLETION_ROUTINE( 303 _In_ 304 WDFREQUEST Request, 305 _In_ 306 WDFIOTARGET Target, 307 _In_ 308 PWDF_REQUEST_COMPLETION_PARAMS Params, 309 _In_ 310 WDFCONTEXT Context 311 ); 312 313 typedef EVT_WDF_REQUEST_COMPLETION_ROUTINE *PFN_WDF_REQUEST_COMPLETION_ROUTINE; 314 315 /*++ 316 317 Routine Description: 318 Clears out the internal state of the irp, which includes, but is not limited 319 to: 320 a) Any internal allocations for the previously formatted request 321 b) The completion routine and its context 322 c) The request's intended i/o target 323 d) All of the internal IRP's stack locations 324 325 Arguments: 326 Request - The request to be reused. 327 328 ReuseParams - Parameters controlling the reuse of the request, see comments 329 for each field in the structure for usage 330 331 Return Value: 332 None 333 334 --*/ 335 336 typedef struct _WDF_REQUEST_REUSE_PARAMS { 337 // 338 // Size of this structure in bytes 339 // 340 ULONG Size; 341 342 // 343 // Bit field combination of WDF_REQUEST_REUSE_Xxx values 344 // 345 ULONG Flags; 346 347 // 348 // The new status of the request. 349 // 350 NTSTATUS Status; 351 352 // 353 // New PIRP to be contained in the WDFREQUEST. Setting a new PIRP value 354 // is only valid for WDFREQUESTs created by WdfRequestCreateFromIrp where 355 // RequestFreesIrp == FALSE. No other WDFREQUESTs (presented by the 356 // I/O queue for instance) may have their IRPs changed. 357 // 358 PIRP NewIrp; 359 360 } WDF_REQUEST_REUSE_PARAMS, *PWDF_REQUEST_REUSE_PARAMS; 361 362 FORCEINLINE 363 VOID 364 WDF_REQUEST_REUSE_PARAMS_INIT( 365 _Out_ PWDF_REQUEST_REUSE_PARAMS Params, 366 _In_ ULONG Flags, 367 _In_ NTSTATUS Status 368 ) 369 { 370 RtlZeroMemory(Params, sizeof(WDF_REQUEST_REUSE_PARAMS)); 371 372 Params->Size = sizeof(WDF_REQUEST_REUSE_PARAMS); 373 Params->Flags = Flags; 374 Params->Status = Status; 375 } 376 377 FORCEINLINE 378 VOID 379 WDF_REQUEST_REUSE_PARAMS_SET_NEW_IRP( 380 _Inout_ PWDF_REQUEST_REUSE_PARAMS Params, 381 _In_ PIRP NewIrp 382 ) 383 { 384 Params->Flags |= WDF_REQUEST_REUSE_SET_NEW_IRP; 385 Params->NewIrp = NewIrp; 386 } 387 388 typedef struct _WDF_REQUEST_SEND_OPTIONS { 389 // 390 // Size of the structure in bytes 391 // 392 ULONG Size; 393 394 // 395 // Bit field combination of values from the WDF_REQUEST_SEND_OPTIONS_FLAGS 396 // enumeration 397 // 398 ULONG Flags; 399 400 // 401 // Valid when WDF_REQUEST_SEND_OPTION_TIMEOUT is set 402 // 403 LONGLONG Timeout; 404 405 } WDF_REQUEST_SEND_OPTIONS, *PWDF_REQUEST_SEND_OPTIONS; 406 407 FORCEINLINE 408 VOID 409 WDF_REQUEST_SEND_OPTIONS_INIT( 410 _Out_ PWDF_REQUEST_SEND_OPTIONS Options, 411 _In_ ULONG Flags 412 ) 413 { 414 RtlZeroMemory(Options, sizeof(WDF_REQUEST_SEND_OPTIONS)); 415 Options->Size = sizeof(WDF_REQUEST_SEND_OPTIONS); 416 Options->Flags = Flags; 417 } 418 419 FORCEINLINE 420 VOID 421 WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT( 422 _Inout_ PWDF_REQUEST_SEND_OPTIONS Options, 423 _In_ LONGLONG Timeout 424 ) 425 { 426 Options->Flags |= WDF_REQUEST_SEND_OPTION_TIMEOUT; 427 Options->Timeout = Timeout; 428 } 429 430 typedef enum _WDF_REQUEST_FORWARD_OPTIONS_FLAGS { 431 WDF_REQUEST_FORWARD_OPTION_SEND_AND_FORGET = 0x00000001 432 } WDF_REQUEST_FORWARD_OPTIONS_FLAGS; 433 434 typedef struct _WDF_REQUEST_FORWARD_OPTIONS { 435 // 436 // Size of the structure in bytes 437 // 438 ULONG Size; 439 440 // 441 // Bit field combination of values from the WDF_REQUEST_FORWARD_OPTIONS_FLAGS 442 // enumeration 443 // 444 ULONG Flags; 445 } WDF_REQUEST_FORWARD_OPTIONS, *PWDF_REQUEST_FORWARD_OPTIONS; 446 447 448 // 449 // Default REquest forward initialization macro 450 // 451 FORCEINLINE 452 VOID 453 WDF_REQUEST_FORWARD_OPTIONS_INIT( 454 _Out_ PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions 455 ) 456 { 457 RtlZeroMemory(ForwardOptions, sizeof(WDF_REQUEST_FORWARD_OPTIONS)); 458 459 ForwardOptions->Size = sizeof(WDF_REQUEST_FORWARD_OPTIONS); 460 ForwardOptions->Flags |= WDF_REQUEST_FORWARD_OPTION_SEND_AND_FORGET; 461 } 462 463 464 465 466 // 467 // WDF Function: WdfRequestCreate 468 // 469 typedef 470 _Must_inspect_result_ 471 _IRQL_requires_max_(DISPATCH_LEVEL) 472 WDFAPI 473 NTSTATUS 474 (STDCALL *PFN_WDFREQUESTCREATE)( 475 _In_ 476 PWDF_DRIVER_GLOBALS DriverGlobals, 477 _In_opt_ 478 PWDF_OBJECT_ATTRIBUTES RequestAttributes, 479 _In_opt_ 480 WDFIOTARGET IoTarget, 481 _Out_ 482 WDFREQUEST* Request 483 ); 484 485 _Must_inspect_result_ 486 _IRQL_requires_max_(DISPATCH_LEVEL) 487 FORCEINLINE 488 NTSTATUS 489 WdfRequestCreate( 490 _In_opt_ 491 PWDF_OBJECT_ATTRIBUTES RequestAttributes, 492 _In_opt_ 493 WDFIOTARGET IoTarget, 494 _Out_ 495 WDFREQUEST* Request 496 ) 497 { 498 return ((PFN_WDFREQUESTCREATE) WdfFunctions[WdfRequestCreateTableIndex])(WdfDriverGlobals, RequestAttributes, IoTarget, Request); 499 } 500 501 // 502 // WDF Function: WdfRequestCreateFromIrp 503 // 504 typedef 505 _Must_inspect_result_ 506 _IRQL_requires_max_(DISPATCH_LEVEL) 507 WDFAPI 508 NTSTATUS 509 (STDCALL *PFN_WDFREQUESTCREATEFROMIRP)( 510 _In_ 511 PWDF_DRIVER_GLOBALS DriverGlobals, 512 _In_opt_ 513 PWDF_OBJECT_ATTRIBUTES RequestAttributes, 514 _In_ 515 PIRP Irp, 516 _In_ 517 BOOLEAN RequestFreesIrp, 518 _Out_ 519 WDFREQUEST* Request 520 ); 521 522 _Must_inspect_result_ 523 _IRQL_requires_max_(DISPATCH_LEVEL) 524 FORCEINLINE 525 NTSTATUS 526 WdfRequestCreateFromIrp( 527 _In_opt_ 528 PWDF_OBJECT_ATTRIBUTES RequestAttributes, 529 _In_ 530 PIRP Irp, 531 _In_ 532 BOOLEAN RequestFreesIrp, 533 _Out_ 534 WDFREQUEST* Request 535 ) 536 { 537 return ((PFN_WDFREQUESTCREATEFROMIRP) WdfFunctions[WdfRequestCreateFromIrpTableIndex])(WdfDriverGlobals, RequestAttributes, Irp, RequestFreesIrp, Request); 538 } 539 540 // 541 // WDF Function: WdfRequestReuse 542 // 543 typedef 544 _IRQL_requires_max_(DISPATCH_LEVEL) 545 WDFAPI 546 NTSTATUS 547 (STDCALL *PFN_WDFREQUESTREUSE)( 548 _In_ 549 PWDF_DRIVER_GLOBALS DriverGlobals, 550 _In_ 551 WDFREQUEST Request, 552 _In_ 553 PWDF_REQUEST_REUSE_PARAMS ReuseParams 554 ); 555 556 _IRQL_requires_max_(DISPATCH_LEVEL) 557 FORCEINLINE 558 NTSTATUS 559 WdfRequestReuse( 560 _In_ 561 WDFREQUEST Request, 562 _In_ 563 PWDF_REQUEST_REUSE_PARAMS ReuseParams 564 ) 565 { 566 return ((PFN_WDFREQUESTREUSE) WdfFunctions[WdfRequestReuseTableIndex])(WdfDriverGlobals, Request, ReuseParams); 567 } 568 569 // 570 // WDF Function: WdfRequestChangeTarget 571 // 572 typedef 573 _Must_inspect_result_ 574 _IRQL_requires_max_(DISPATCH_LEVEL) 575 WDFAPI 576 NTSTATUS 577 (STDCALL *PFN_WDFREQUESTCHANGETARGET)( 578 _In_ 579 PWDF_DRIVER_GLOBALS DriverGlobals, 580 _In_ 581 WDFREQUEST Request, 582 _In_ 583 WDFIOTARGET IoTarget 584 ); 585 586 _Must_inspect_result_ 587 _IRQL_requires_max_(DISPATCH_LEVEL) 588 FORCEINLINE 589 NTSTATUS 590 WdfRequestChangeTarget( 591 _In_ 592 WDFREQUEST Request, 593 _In_ 594 WDFIOTARGET IoTarget 595 ) 596 { 597 return ((PFN_WDFREQUESTCHANGETARGET) WdfFunctions[WdfRequestChangeTargetTableIndex])(WdfDriverGlobals, Request, IoTarget); 598 } 599 600 // 601 // WDF Function: WdfRequestFormatRequestUsingCurrentType 602 // 603 typedef 604 _IRQL_requires_max_(DISPATCH_LEVEL) 605 WDFAPI 606 VOID 607 (STDCALL *PFN_WDFREQUESTFORMATREQUESTUSINGCURRENTTYPE)( 608 _In_ 609 PWDF_DRIVER_GLOBALS DriverGlobals, 610 _In_ 611 WDFREQUEST Request 612 ); 613 614 _IRQL_requires_max_(DISPATCH_LEVEL) 615 FORCEINLINE 616 VOID 617 WdfRequestFormatRequestUsingCurrentType( 618 _In_ 619 WDFREQUEST Request 620 ) 621 { 622 ((PFN_WDFREQUESTFORMATREQUESTUSINGCURRENTTYPE) WdfFunctions[WdfRequestFormatRequestUsingCurrentTypeTableIndex])(WdfDriverGlobals, Request); 623 } 624 625 // 626 // WDF Function: WdfRequestWdmFormatUsingStackLocation 627 // 628 typedef 629 _IRQL_requires_max_(DISPATCH_LEVEL) 630 WDFAPI 631 VOID 632 (STDCALL *PFN_WDFREQUESTWDMFORMATUSINGSTACKLOCATION)( 633 _In_ 634 PWDF_DRIVER_GLOBALS DriverGlobals, 635 _In_ 636 WDFREQUEST Request, 637 _In_ 638 PIO_STACK_LOCATION Stack 639 ); 640 641 _IRQL_requires_max_(DISPATCH_LEVEL) 642 FORCEINLINE 643 VOID 644 WdfRequestWdmFormatUsingStackLocation( 645 _In_ 646 WDFREQUEST Request, 647 _In_ 648 PIO_STACK_LOCATION Stack 649 ) 650 { 651 ((PFN_WDFREQUESTWDMFORMATUSINGSTACKLOCATION) WdfFunctions[WdfRequestWdmFormatUsingStackLocationTableIndex])(WdfDriverGlobals, Request, Stack); 652 } 653 654 // 655 // WDF Function: WdfRequestSend 656 // 657 typedef 658 _IRQL_requires_max_(DISPATCH_LEVEL) 659 _When_(Options->Flags & WDF_REQUEST_SEND_OPTION_SYNCHRONOUS == 0, _Must_inspect_result_) 660 WDFAPI 661 BOOLEAN 662 (STDCALL *PFN_WDFREQUESTSEND)( 663 _In_ 664 PWDF_DRIVER_GLOBALS DriverGlobals, 665 _In_ 666 WDFREQUEST Request, 667 _In_ 668 WDFIOTARGET Target, 669 _In_opt_ 670 PWDF_REQUEST_SEND_OPTIONS Options 671 ); 672 673 _IRQL_requires_max_(DISPATCH_LEVEL) 674 _When_(Options->Flags & WDF_REQUEST_SEND_OPTION_SYNCHRONOUS == 0, _Must_inspect_result_) 675 FORCEINLINE 676 BOOLEAN 677 WdfRequestSend( 678 _In_ 679 WDFREQUEST Request, 680 _In_ 681 WDFIOTARGET Target, 682 _In_opt_ 683 PWDF_REQUEST_SEND_OPTIONS Options 684 ) 685 { 686 return ((PFN_WDFREQUESTSEND) WdfFunctions[WdfRequestSendTableIndex])(WdfDriverGlobals, Request, Target, Options); 687 } 688 689 // 690 // WDF Function: WdfRequestGetStatus 691 // 692 typedef 693 _Must_inspect_result_ 694 _IRQL_requires_max_(DISPATCH_LEVEL) 695 WDFAPI 696 NTSTATUS 697 (STDCALL *PFN_WDFREQUESTGETSTATUS)( 698 _In_ 699 PWDF_DRIVER_GLOBALS DriverGlobals, 700 _In_ 701 WDFREQUEST Request 702 ); 703 704 _Must_inspect_result_ 705 _IRQL_requires_max_(DISPATCH_LEVEL) 706 FORCEINLINE 707 NTSTATUS 708 WdfRequestGetStatus( 709 _In_ 710 WDFREQUEST Request 711 ) 712 { 713 return ((PFN_WDFREQUESTGETSTATUS) WdfFunctions[WdfRequestGetStatusTableIndex])(WdfDriverGlobals, Request); 714 } 715 716 // 717 // WDF Function: WdfRequestMarkCancelable 718 // 719 typedef 720 _IRQL_requires_max_(DISPATCH_LEVEL) 721 WDFAPI 722 VOID 723 (STDCALL *PFN_WDFREQUESTMARKCANCELABLE)( 724 _In_ 725 PWDF_DRIVER_GLOBALS DriverGlobals, 726 _In_ 727 WDFREQUEST Request, 728 _In_ 729 PFN_WDF_REQUEST_CANCEL EvtRequestCancel 730 ); 731 732 _IRQL_requires_max_(DISPATCH_LEVEL) 733 FORCEINLINE 734 VOID 735 WdfRequestMarkCancelable( 736 _In_ 737 WDFREQUEST Request, 738 _In_ 739 PFN_WDF_REQUEST_CANCEL EvtRequestCancel 740 ) 741 { 742 ((PFN_WDFREQUESTMARKCANCELABLE) WdfFunctions[WdfRequestMarkCancelableTableIndex])(WdfDriverGlobals, Request, EvtRequestCancel); 743 } 744 745 // 746 // WDF Function: WdfRequestMarkCancelableEx 747 // 748 typedef 749 _Must_inspect_result_ 750 _IRQL_requires_max_(DISPATCH_LEVEL) 751 WDFAPI 752 NTSTATUS 753 (STDCALL *PFN_WDFREQUESTMARKCANCELABLEEX)( 754 _In_ 755 PWDF_DRIVER_GLOBALS DriverGlobals, 756 _In_ 757 WDFREQUEST Request, 758 _In_ 759 PFN_WDF_REQUEST_CANCEL EvtRequestCancel 760 ); 761 762 _Must_inspect_result_ 763 _IRQL_requires_max_(DISPATCH_LEVEL) 764 FORCEINLINE 765 NTSTATUS 766 WdfRequestMarkCancelableEx( 767 _In_ 768 WDFREQUEST Request, 769 _In_ 770 PFN_WDF_REQUEST_CANCEL EvtRequestCancel 771 ) 772 { 773 return ((PFN_WDFREQUESTMARKCANCELABLEEX) WdfFunctions[WdfRequestMarkCancelableExTableIndex])(WdfDriverGlobals, Request, EvtRequestCancel); 774 } 775 776 // 777 // WDF Function: WdfRequestUnmarkCancelable 778 // 779 typedef 780 _Must_inspect_result_ 781 _IRQL_requires_max_(DISPATCH_LEVEL) 782 WDFAPI 783 NTSTATUS 784 (STDCALL *PFN_WDFREQUESTUNMARKCANCELABLE)( 785 _In_ 786 PWDF_DRIVER_GLOBALS DriverGlobals, 787 _In_ 788 WDFREQUEST Request 789 ); 790 791 _Must_inspect_result_ 792 _IRQL_requires_max_(DISPATCH_LEVEL) 793 FORCEINLINE 794 NTSTATUS 795 WdfRequestUnmarkCancelable( 796 _In_ 797 WDFREQUEST Request 798 ) 799 { 800 return ((PFN_WDFREQUESTUNMARKCANCELABLE) WdfFunctions[WdfRequestUnmarkCancelableTableIndex])(WdfDriverGlobals, Request); 801 } 802 803 // 804 // WDF Function: WdfRequestIsCanceled 805 // 806 typedef 807 _Must_inspect_result_ 808 _IRQL_requires_max_(DISPATCH_LEVEL) 809 WDFAPI 810 BOOLEAN 811 (STDCALL *PFN_WDFREQUESTISCANCELED)( 812 _In_ 813 PWDF_DRIVER_GLOBALS DriverGlobals, 814 _In_ 815 WDFREQUEST Request 816 ); 817 818 _Must_inspect_result_ 819 _IRQL_requires_max_(DISPATCH_LEVEL) 820 FORCEINLINE 821 BOOLEAN 822 WdfRequestIsCanceled( 823 _In_ 824 WDFREQUEST Request 825 ) 826 { 827 return ((PFN_WDFREQUESTISCANCELED) WdfFunctions[WdfRequestIsCanceledTableIndex])(WdfDriverGlobals, Request); 828 } 829 830 // 831 // WDF Function: WdfRequestCancelSentRequest 832 // 833 typedef 834 _IRQL_requires_max_(DISPATCH_LEVEL) 835 WDFAPI 836 BOOLEAN 837 (STDCALL *PFN_WDFREQUESTCANCELSENTREQUEST)( 838 _In_ 839 PWDF_DRIVER_GLOBALS DriverGlobals, 840 _In_ 841 WDFREQUEST Request 842 ); 843 844 _IRQL_requires_max_(DISPATCH_LEVEL) 845 FORCEINLINE 846 BOOLEAN 847 WdfRequestCancelSentRequest( 848 _In_ 849 WDFREQUEST Request 850 ) 851 { 852 return ((PFN_WDFREQUESTCANCELSENTREQUEST) WdfFunctions[WdfRequestCancelSentRequestTableIndex])(WdfDriverGlobals, Request); 853 } 854 855 // 856 // WDF Function: WdfRequestIsFrom32BitProcess 857 // 858 typedef 859 _Must_inspect_result_ 860 _IRQL_requires_max_(APC_LEVEL) 861 WDFAPI 862 BOOLEAN 863 (STDCALL *PFN_WDFREQUESTISFROM32BITPROCESS)( 864 _In_ 865 PWDF_DRIVER_GLOBALS DriverGlobals, 866 _In_ 867 WDFREQUEST Request 868 ); 869 870 _Must_inspect_result_ 871 _IRQL_requires_max_(APC_LEVEL) 872 FORCEINLINE 873 BOOLEAN 874 WdfRequestIsFrom32BitProcess( 875 _In_ 876 WDFREQUEST Request 877 ) 878 { 879 return ((PFN_WDFREQUESTISFROM32BITPROCESS) WdfFunctions[WdfRequestIsFrom32BitProcessTableIndex])(WdfDriverGlobals, Request); 880 } 881 882 // 883 // WDF Function: WdfRequestSetCompletionRoutine 884 // 885 typedef 886 _IRQL_requires_max_(DISPATCH_LEVEL) 887 WDFAPI 888 VOID 889 (STDCALL *PFN_WDFREQUESTSETCOMPLETIONROUTINE)( 890 _In_ 891 PWDF_DRIVER_GLOBALS DriverGlobals, 892 _In_ 893 WDFREQUEST Request, 894 _In_opt_ 895 PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine, 896 _In_opt_ __drv_aliasesMem 897 WDFCONTEXT CompletionContext 898 ); 899 900 _IRQL_requires_max_(DISPATCH_LEVEL) 901 FORCEINLINE 902 VOID 903 WdfRequestSetCompletionRoutine( 904 _In_ 905 WDFREQUEST Request, 906 _In_opt_ 907 PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine, 908 _In_opt_ __drv_aliasesMem 909 WDFCONTEXT CompletionContext 910 ) 911 { 912 ((PFN_WDFREQUESTSETCOMPLETIONROUTINE) WdfFunctions[WdfRequestSetCompletionRoutineTableIndex])(WdfDriverGlobals, Request, CompletionRoutine, CompletionContext); 913 } 914 915 // 916 // WDF Function: WdfRequestGetCompletionParams 917 // 918 typedef 919 _IRQL_requires_max_(DISPATCH_LEVEL) 920 WDFAPI 921 VOID 922 (STDCALL *PFN_WDFREQUESTGETCOMPLETIONPARAMS)( 923 _In_ 924 PWDF_DRIVER_GLOBALS DriverGlobals, 925 _In_ 926 WDFREQUEST Request, 927 _Out_ 928 PWDF_REQUEST_COMPLETION_PARAMS Params 929 ); 930 931 _IRQL_requires_max_(DISPATCH_LEVEL) 932 FORCEINLINE 933 VOID 934 WdfRequestGetCompletionParams( 935 _In_ 936 WDFREQUEST Request, 937 _Out_ 938 PWDF_REQUEST_COMPLETION_PARAMS Params 939 ) 940 { 941 ((PFN_WDFREQUESTGETCOMPLETIONPARAMS) WdfFunctions[WdfRequestGetCompletionParamsTableIndex])(WdfDriverGlobals, Request, Params); 942 } 943 944 // 945 // WDF Function: WdfRequestAllocateTimer 946 // 947 typedef 948 _Must_inspect_result_ 949 _IRQL_requires_max_(DISPATCH_LEVEL) 950 WDFAPI 951 NTSTATUS 952 (STDCALL *PFN_WDFREQUESTALLOCATETIMER)( 953 _In_ 954 PWDF_DRIVER_GLOBALS DriverGlobals, 955 _In_ 956 WDFREQUEST Request 957 ); 958 959 _Must_inspect_result_ 960 _IRQL_requires_max_(DISPATCH_LEVEL) 961 FORCEINLINE 962 NTSTATUS 963 WdfRequestAllocateTimer( 964 _In_ 965 WDFREQUEST Request 966 ) 967 { 968 return ((PFN_WDFREQUESTALLOCATETIMER) WdfFunctions[WdfRequestAllocateTimerTableIndex])(WdfDriverGlobals, Request); 969 } 970 971 // 972 // WDF Function: WdfRequestComplete 973 // 974 typedef 975 _IRQL_requires_max_(DISPATCH_LEVEL) 976 WDFAPI 977 VOID 978 (STDCALL *PFN_WDFREQUESTCOMPLETE)( 979 _In_ 980 PWDF_DRIVER_GLOBALS DriverGlobals, 981 _In_ 982 WDFREQUEST Request, 983 _In_ 984 NTSTATUS Status 985 ); 986 987 _IRQL_requires_max_(DISPATCH_LEVEL) 988 FORCEINLINE 989 VOID 990 WdfRequestComplete( 991 _In_ 992 WDFREQUEST Request, 993 _In_ 994 NTSTATUS Status 995 ) 996 { 997 ((PFN_WDFREQUESTCOMPLETE) WdfFunctions[WdfRequestCompleteTableIndex])(WdfDriverGlobals, Request, Status); 998 } 999 1000 // 1001 // WDF Function: WdfRequestCompleteWithPriorityBoost 1002 // 1003 typedef 1004 _IRQL_requires_max_(DISPATCH_LEVEL) 1005 WDFAPI 1006 VOID 1007 (STDCALL *PFN_WDFREQUESTCOMPLETEWITHPRIORITYBOOST)( 1008 _In_ 1009 PWDF_DRIVER_GLOBALS DriverGlobals, 1010 _In_ 1011 WDFREQUEST Request, 1012 _In_ 1013 NTSTATUS Status, 1014 _In_ 1015 CCHAR PriorityBoost 1016 ); 1017 1018 _IRQL_requires_max_(DISPATCH_LEVEL) 1019 FORCEINLINE 1020 VOID 1021 WdfRequestCompleteWithPriorityBoost( 1022 _In_ 1023 WDFREQUEST Request, 1024 _In_ 1025 NTSTATUS Status, 1026 _In_ 1027 CCHAR PriorityBoost 1028 ) 1029 { 1030 ((PFN_WDFREQUESTCOMPLETEWITHPRIORITYBOOST) WdfFunctions[WdfRequestCompleteWithPriorityBoostTableIndex])(WdfDriverGlobals, Request, Status, PriorityBoost); 1031 } 1032 1033 // 1034 // WDF Function: WdfRequestCompleteWithInformation 1035 // 1036 typedef 1037 _IRQL_requires_max_(DISPATCH_LEVEL) 1038 WDFAPI 1039 VOID 1040 (STDCALL *PFN_WDFREQUESTCOMPLETEWITHINFORMATION)( 1041 _In_ 1042 PWDF_DRIVER_GLOBALS DriverGlobals, 1043 _In_ 1044 WDFREQUEST Request, 1045 _In_ 1046 NTSTATUS Status, 1047 _In_ 1048 ULONG_PTR Information 1049 ); 1050 1051 _IRQL_requires_max_(DISPATCH_LEVEL) 1052 FORCEINLINE 1053 VOID 1054 WdfRequestCompleteWithInformation( 1055 _In_ 1056 WDFREQUEST Request, 1057 _In_ 1058 NTSTATUS Status, 1059 _In_ 1060 ULONG_PTR Information 1061 ) 1062 { 1063 ((PFN_WDFREQUESTCOMPLETEWITHINFORMATION) WdfFunctions[WdfRequestCompleteWithInformationTableIndex])(WdfDriverGlobals, Request, Status, Information); 1064 } 1065 1066 // 1067 // WDF Function: WdfRequestGetParameters 1068 // 1069 typedef 1070 _IRQL_requires_max_(DISPATCH_LEVEL) 1071 WDFAPI 1072 VOID 1073 (STDCALL *PFN_WDFREQUESTGETPARAMETERS)( 1074 _In_ 1075 PWDF_DRIVER_GLOBALS DriverGlobals, 1076 _In_ 1077 WDFREQUEST Request, 1078 _Out_ 1079 PWDF_REQUEST_PARAMETERS Parameters 1080 ); 1081 1082 _IRQL_requires_max_(DISPATCH_LEVEL) 1083 FORCEINLINE 1084 VOID 1085 WdfRequestGetParameters( 1086 _In_ 1087 WDFREQUEST Request, 1088 _Out_ 1089 PWDF_REQUEST_PARAMETERS Parameters 1090 ) 1091 { 1092 ((PFN_WDFREQUESTGETPARAMETERS) WdfFunctions[WdfRequestGetParametersTableIndex])(WdfDriverGlobals, Request, Parameters); 1093 } 1094 1095 // 1096 // WDF Function: WdfRequestRetrieveInputMemory 1097 // 1098 typedef 1099 _Must_inspect_result_ 1100 _IRQL_requires_max_(DISPATCH_LEVEL) 1101 WDFAPI 1102 NTSTATUS 1103 (STDCALL *PFN_WDFREQUESTRETRIEVEINPUTMEMORY)( 1104 _In_ 1105 PWDF_DRIVER_GLOBALS DriverGlobals, 1106 _In_ 1107 WDFREQUEST Request, 1108 _Out_ 1109 WDFMEMORY* Memory 1110 ); 1111 1112 _Must_inspect_result_ 1113 _IRQL_requires_max_(DISPATCH_LEVEL) 1114 FORCEINLINE 1115 NTSTATUS 1116 WdfRequestRetrieveInputMemory( 1117 _In_ 1118 WDFREQUEST Request, 1119 _Out_ 1120 WDFMEMORY* Memory 1121 ) 1122 { 1123 return ((PFN_WDFREQUESTRETRIEVEINPUTMEMORY) WdfFunctions[WdfRequestRetrieveInputMemoryTableIndex])(WdfDriverGlobals, Request, Memory); 1124 } 1125 1126 // 1127 // WDF Function: WdfRequestRetrieveOutputMemory 1128 // 1129 typedef 1130 _Must_inspect_result_ 1131 _IRQL_requires_max_(DISPATCH_LEVEL) 1132 WDFAPI 1133 NTSTATUS 1134 (STDCALL *PFN_WDFREQUESTRETRIEVEOUTPUTMEMORY)( 1135 _In_ 1136 PWDF_DRIVER_GLOBALS DriverGlobals, 1137 _In_ 1138 WDFREQUEST Request, 1139 _Out_ 1140 WDFMEMORY* Memory 1141 ); 1142 1143 _Must_inspect_result_ 1144 _IRQL_requires_max_(DISPATCH_LEVEL) 1145 FORCEINLINE 1146 NTSTATUS 1147 WdfRequestRetrieveOutputMemory( 1148 _In_ 1149 WDFREQUEST Request, 1150 _Out_ 1151 WDFMEMORY* Memory 1152 ) 1153 { 1154 return ((PFN_WDFREQUESTRETRIEVEOUTPUTMEMORY) WdfFunctions[WdfRequestRetrieveOutputMemoryTableIndex])(WdfDriverGlobals, Request, Memory); 1155 } 1156 1157 // 1158 // WDF Function: WdfRequestRetrieveInputBuffer 1159 // 1160 typedef 1161 _Must_inspect_result_ 1162 _IRQL_requires_max_(DISPATCH_LEVEL) 1163 WDFAPI 1164 NTSTATUS 1165 (STDCALL *PFN_WDFREQUESTRETRIEVEINPUTBUFFER)( 1166 _In_ 1167 PWDF_DRIVER_GLOBALS DriverGlobals, 1168 _In_ 1169 WDFREQUEST Request, 1170 _In_ 1171 size_t MinimumRequiredLength, 1172 _Outptr_result_bytebuffer_(*Length) 1173 PVOID* Buffer, 1174 _Out_opt_ 1175 size_t* Length 1176 ); 1177 1178 _Must_inspect_result_ 1179 _IRQL_requires_max_(DISPATCH_LEVEL) 1180 FORCEINLINE 1181 NTSTATUS 1182 WdfRequestRetrieveInputBuffer( 1183 _In_ 1184 WDFREQUEST Request, 1185 _In_ 1186 size_t MinimumRequiredLength, 1187 _Outptr_result_bytebuffer_(*Length) 1188 PVOID* Buffer, 1189 _Out_opt_ 1190 size_t* Length 1191 ) 1192 { 1193 return ((PFN_WDFREQUESTRETRIEVEINPUTBUFFER) WdfFunctions[WdfRequestRetrieveInputBufferTableIndex])(WdfDriverGlobals, Request, MinimumRequiredLength, Buffer, Length); 1194 } 1195 1196 // 1197 // WDF Function: WdfRequestRetrieveOutputBuffer 1198 // 1199 typedef 1200 _Must_inspect_result_ 1201 _IRQL_requires_max_(DISPATCH_LEVEL) 1202 WDFAPI 1203 NTSTATUS 1204 (STDCALL *PFN_WDFREQUESTRETRIEVEOUTPUTBUFFER)( 1205 _In_ 1206 PWDF_DRIVER_GLOBALS DriverGlobals, 1207 _In_ 1208 WDFREQUEST Request, 1209 _In_ 1210 size_t MinimumRequiredSize, 1211 _Outptr_result_bytebuffer_(*Length) 1212 PVOID* Buffer, 1213 _Out_opt_ 1214 size_t* Length 1215 ); 1216 1217 _Must_inspect_result_ 1218 _IRQL_requires_max_(DISPATCH_LEVEL) 1219 FORCEINLINE 1220 NTSTATUS 1221 WdfRequestRetrieveOutputBuffer( 1222 _In_ 1223 WDFREQUEST Request, 1224 _In_ 1225 size_t MinimumRequiredSize, 1226 _Outptr_result_bytebuffer_(*Length) 1227 PVOID* Buffer, 1228 _Out_opt_ 1229 size_t* Length 1230 ) 1231 { 1232 return ((PFN_WDFREQUESTRETRIEVEOUTPUTBUFFER) WdfFunctions[WdfRequestRetrieveOutputBufferTableIndex])(WdfDriverGlobals, Request, MinimumRequiredSize, Buffer, Length); 1233 } 1234 1235 // 1236 // WDF Function: WdfRequestRetrieveInputWdmMdl 1237 // 1238 typedef 1239 _Must_inspect_result_ 1240 _IRQL_requires_max_(DISPATCH_LEVEL) 1241 WDFAPI 1242 NTSTATUS 1243 (STDCALL *PFN_WDFREQUESTRETRIEVEINPUTWDMMDL)( 1244 _In_ 1245 PWDF_DRIVER_GLOBALS DriverGlobals, 1246 _In_ 1247 WDFREQUEST Request, 1248 _Outptr_ 1249 PMDL* Mdl 1250 ); 1251 1252 _Must_inspect_result_ 1253 _IRQL_requires_max_(DISPATCH_LEVEL) 1254 FORCEINLINE 1255 NTSTATUS 1256 WdfRequestRetrieveInputWdmMdl( 1257 _In_ 1258 WDFREQUEST Request, 1259 _Outptr_ 1260 PMDL* Mdl 1261 ) 1262 { 1263 return ((PFN_WDFREQUESTRETRIEVEINPUTWDMMDL) WdfFunctions[WdfRequestRetrieveInputWdmMdlTableIndex])(WdfDriverGlobals, Request, Mdl); 1264 } 1265 1266 // 1267 // WDF Function: WdfRequestRetrieveOutputWdmMdl 1268 // 1269 typedef 1270 _Must_inspect_result_ 1271 _IRQL_requires_max_(DISPATCH_LEVEL) 1272 WDFAPI 1273 NTSTATUS 1274 (STDCALL *PFN_WDFREQUESTRETRIEVEOUTPUTWDMMDL)( 1275 _In_ 1276 PWDF_DRIVER_GLOBALS DriverGlobals, 1277 _In_ 1278 WDFREQUEST Request, 1279 _Outptr_ 1280 PMDL* Mdl 1281 ); 1282 1283 _Must_inspect_result_ 1284 _IRQL_requires_max_(DISPATCH_LEVEL) 1285 FORCEINLINE 1286 NTSTATUS 1287 WdfRequestRetrieveOutputWdmMdl( 1288 _In_ 1289 WDFREQUEST Request, 1290 _Outptr_ 1291 PMDL* Mdl 1292 ) 1293 { 1294 return ((PFN_WDFREQUESTRETRIEVEOUTPUTWDMMDL) WdfFunctions[WdfRequestRetrieveOutputWdmMdlTableIndex])(WdfDriverGlobals, Request, Mdl); 1295 } 1296 1297 // 1298 // WDF Function: WdfRequestRetrieveUnsafeUserInputBuffer 1299 // 1300 typedef 1301 _Must_inspect_result_ 1302 _IRQL_requires_max_(PASSIVE_LEVEL) 1303 WDFAPI 1304 NTSTATUS 1305 (STDCALL *PFN_WDFREQUESTRETRIEVEUNSAFEUSERINPUTBUFFER)( 1306 _In_ 1307 PWDF_DRIVER_GLOBALS DriverGlobals, 1308 _In_ 1309 WDFREQUEST Request, 1310 _In_ 1311 size_t MinimumRequiredLength, 1312 _Outptr_result_bytebuffer_maybenull_(*Length) 1313 PVOID* InputBuffer, 1314 _Out_opt_ 1315 size_t* Length 1316 ); 1317 1318 _Must_inspect_result_ 1319 _IRQL_requires_max_(PASSIVE_LEVEL) 1320 FORCEINLINE 1321 NTSTATUS 1322 WdfRequestRetrieveUnsafeUserInputBuffer( 1323 _In_ 1324 WDFREQUEST Request, 1325 _In_ 1326 size_t MinimumRequiredLength, 1327 _Outptr_result_bytebuffer_maybenull_(*Length) 1328 PVOID* InputBuffer, 1329 _Out_opt_ 1330 size_t* Length 1331 ) 1332 { 1333 return ((PFN_WDFREQUESTRETRIEVEUNSAFEUSERINPUTBUFFER) WdfFunctions[WdfRequestRetrieveUnsafeUserInputBufferTableIndex])(WdfDriverGlobals, Request, MinimumRequiredLength, InputBuffer, Length); 1334 } 1335 1336 // 1337 // WDF Function: WdfRequestRetrieveUnsafeUserOutputBuffer 1338 // 1339 typedef 1340 _Must_inspect_result_ 1341 _IRQL_requires_max_(PASSIVE_LEVEL) 1342 WDFAPI 1343 NTSTATUS 1344 (STDCALL *PFN_WDFREQUESTRETRIEVEUNSAFEUSEROUTPUTBUFFER)( 1345 _In_ 1346 PWDF_DRIVER_GLOBALS DriverGlobals, 1347 _In_ 1348 WDFREQUEST Request, 1349 _In_ 1350 size_t MinimumRequiredLength, 1351 _Outptr_result_bytebuffer_maybenull_(*Length) 1352 PVOID* OutputBuffer, 1353 _Out_opt_ 1354 size_t* Length 1355 ); 1356 1357 _Must_inspect_result_ 1358 _IRQL_requires_max_(PASSIVE_LEVEL) 1359 FORCEINLINE 1360 NTSTATUS 1361 WdfRequestRetrieveUnsafeUserOutputBuffer( 1362 _In_ 1363 WDFREQUEST Request, 1364 _In_ 1365 size_t MinimumRequiredLength, 1366 _Outptr_result_bytebuffer_maybenull_(*Length) 1367 PVOID* OutputBuffer, 1368 _Out_opt_ 1369 size_t* Length 1370 ) 1371 { 1372 return ((PFN_WDFREQUESTRETRIEVEUNSAFEUSEROUTPUTBUFFER) WdfFunctions[WdfRequestRetrieveUnsafeUserOutputBufferTableIndex])(WdfDriverGlobals, Request, MinimumRequiredLength, OutputBuffer, Length); 1373 } 1374 1375 // 1376 // WDF Function: WdfRequestSetInformation 1377 // 1378 typedef 1379 _IRQL_requires_max_(DISPATCH_LEVEL) 1380 WDFAPI 1381 VOID 1382 (STDCALL *PFN_WDFREQUESTSETINFORMATION)( 1383 _In_ 1384 PWDF_DRIVER_GLOBALS DriverGlobals, 1385 _In_ 1386 WDFREQUEST Request, 1387 _In_ 1388 ULONG_PTR Information 1389 ); 1390 1391 _IRQL_requires_max_(DISPATCH_LEVEL) 1392 FORCEINLINE 1393 VOID 1394 WdfRequestSetInformation( 1395 _In_ 1396 WDFREQUEST Request, 1397 _In_ 1398 ULONG_PTR Information 1399 ) 1400 { 1401 ((PFN_WDFREQUESTSETINFORMATION) WdfFunctions[WdfRequestSetInformationTableIndex])(WdfDriverGlobals, Request, Information); 1402 } 1403 1404 // 1405 // WDF Function: WdfRequestGetInformation 1406 // 1407 typedef 1408 _IRQL_requires_max_(DISPATCH_LEVEL) 1409 WDFAPI 1410 ULONG_PTR 1411 (STDCALL *PFN_WDFREQUESTGETINFORMATION)( 1412 _In_ 1413 PWDF_DRIVER_GLOBALS DriverGlobals, 1414 _In_ 1415 WDFREQUEST Request 1416 ); 1417 1418 _IRQL_requires_max_(DISPATCH_LEVEL) 1419 FORCEINLINE 1420 ULONG_PTR 1421 WdfRequestGetInformation( 1422 _In_ 1423 WDFREQUEST Request 1424 ) 1425 { 1426 return ((PFN_WDFREQUESTGETINFORMATION) WdfFunctions[WdfRequestGetInformationTableIndex])(WdfDriverGlobals, Request); 1427 } 1428 1429 // 1430 // WDF Function: WdfRequestGetFileObject 1431 // 1432 typedef 1433 _IRQL_requires_max_(DISPATCH_LEVEL) 1434 WDFAPI 1435 WDFFILEOBJECT 1436 (STDCALL *PFN_WDFREQUESTGETFILEOBJECT)( 1437 _In_ 1438 PWDF_DRIVER_GLOBALS DriverGlobals, 1439 _In_ 1440 WDFREQUEST Request 1441 ); 1442 1443 _IRQL_requires_max_(DISPATCH_LEVEL) 1444 FORCEINLINE 1445 WDFFILEOBJECT 1446 WdfRequestGetFileObject( 1447 _In_ 1448 WDFREQUEST Request 1449 ) 1450 { 1451 return ((PFN_WDFREQUESTGETFILEOBJECT) WdfFunctions[WdfRequestGetFileObjectTableIndex])(WdfDriverGlobals, Request); 1452 } 1453 1454 // 1455 // WDF Function: WdfRequestProbeAndLockUserBufferForRead 1456 // 1457 typedef 1458 _Must_inspect_result_ 1459 _IRQL_requires_max_(PASSIVE_LEVEL) 1460 WDFAPI 1461 NTSTATUS 1462 (STDCALL *PFN_WDFREQUESTPROBEANDLOCKUSERBUFFERFORREAD)( 1463 _In_ 1464 PWDF_DRIVER_GLOBALS DriverGlobals, 1465 _In_ 1466 WDFREQUEST Request, 1467 _In_reads_bytes_(Length) 1468 PVOID Buffer, 1469 _In_ 1470 size_t Length, 1471 _Out_ 1472 WDFMEMORY* MemoryObject 1473 ); 1474 1475 _Must_inspect_result_ 1476 _IRQL_requires_max_(PASSIVE_LEVEL) 1477 FORCEINLINE 1478 NTSTATUS 1479 WdfRequestProbeAndLockUserBufferForRead( 1480 _In_ 1481 WDFREQUEST Request, 1482 _In_reads_bytes_(Length) 1483 PVOID Buffer, 1484 _In_ 1485 size_t Length, 1486 _Out_ 1487 WDFMEMORY* MemoryObject 1488 ) 1489 { 1490 return ((PFN_WDFREQUESTPROBEANDLOCKUSERBUFFERFORREAD) WdfFunctions[WdfRequestProbeAndLockUserBufferForReadTableIndex])(WdfDriverGlobals, Request, Buffer, Length, MemoryObject); 1491 } 1492 1493 // 1494 // WDF Function: WdfRequestProbeAndLockUserBufferForWrite 1495 // 1496 typedef 1497 _Must_inspect_result_ 1498 _IRQL_requires_max_(PASSIVE_LEVEL) 1499 WDFAPI 1500 NTSTATUS 1501 (STDCALL *PFN_WDFREQUESTPROBEANDLOCKUSERBUFFERFORWRITE)( 1502 _In_ 1503 PWDF_DRIVER_GLOBALS DriverGlobals, 1504 _In_ 1505 WDFREQUEST Request, 1506 _In_reads_bytes_(Length) 1507 PVOID Buffer, 1508 _In_ 1509 size_t Length, 1510 _Out_ 1511 WDFMEMORY* MemoryObject 1512 ); 1513 1514 _Must_inspect_result_ 1515 _IRQL_requires_max_(PASSIVE_LEVEL) 1516 FORCEINLINE 1517 NTSTATUS 1518 WdfRequestProbeAndLockUserBufferForWrite( 1519 _In_ 1520 WDFREQUEST Request, 1521 _In_reads_bytes_(Length) 1522 PVOID Buffer, 1523 _In_ 1524 size_t Length, 1525 _Out_ 1526 WDFMEMORY* MemoryObject 1527 ) 1528 { 1529 return ((PFN_WDFREQUESTPROBEANDLOCKUSERBUFFERFORWRITE) WdfFunctions[WdfRequestProbeAndLockUserBufferForWriteTableIndex])(WdfDriverGlobals, Request, Buffer, Length, MemoryObject); 1530 } 1531 1532 // 1533 // WDF Function: WdfRequestGetRequestorMode 1534 // 1535 typedef 1536 _IRQL_requires_max_(DISPATCH_LEVEL) 1537 WDFAPI 1538 KPROCESSOR_MODE 1539 (STDCALL *PFN_WDFREQUESTGETREQUESTORMODE)( 1540 _In_ 1541 PWDF_DRIVER_GLOBALS DriverGlobals, 1542 _In_ 1543 WDFREQUEST Request 1544 ); 1545 1546 _IRQL_requires_max_(DISPATCH_LEVEL) 1547 FORCEINLINE 1548 KPROCESSOR_MODE 1549 WdfRequestGetRequestorMode( 1550 _In_ 1551 WDFREQUEST Request 1552 ) 1553 { 1554 return ((PFN_WDFREQUESTGETREQUESTORMODE) WdfFunctions[WdfRequestGetRequestorModeTableIndex])(WdfDriverGlobals, Request); 1555 } 1556 1557 // 1558 // WDF Function: WdfRequestForwardToIoQueue 1559 // 1560 typedef 1561 _Must_inspect_result_ 1562 _IRQL_requires_max_(DISPATCH_LEVEL) 1563 WDFAPI 1564 NTSTATUS 1565 (STDCALL *PFN_WDFREQUESTFORWARDTOIOQUEUE)( 1566 _In_ 1567 PWDF_DRIVER_GLOBALS DriverGlobals, 1568 _In_ 1569 WDFREQUEST Request, 1570 _In_ 1571 WDFQUEUE DestinationQueue 1572 ); 1573 1574 _Must_inspect_result_ 1575 _IRQL_requires_max_(DISPATCH_LEVEL) 1576 FORCEINLINE 1577 NTSTATUS 1578 WdfRequestForwardToIoQueue( 1579 _In_ 1580 WDFREQUEST Request, 1581 _In_ 1582 WDFQUEUE DestinationQueue 1583 ) 1584 { 1585 return ((PFN_WDFREQUESTFORWARDTOIOQUEUE) WdfFunctions[WdfRequestForwardToIoQueueTableIndex])(WdfDriverGlobals, Request, DestinationQueue); 1586 } 1587 1588 // 1589 // WDF Function: WdfRequestGetIoQueue 1590 // 1591 typedef 1592 _IRQL_requires_max_(DISPATCH_LEVEL) 1593 WDFAPI 1594 WDFQUEUE 1595 (STDCALL *PFN_WDFREQUESTGETIOQUEUE)( 1596 _In_ 1597 PWDF_DRIVER_GLOBALS DriverGlobals, 1598 _In_ 1599 WDFREQUEST Request 1600 ); 1601 1602 _IRQL_requires_max_(DISPATCH_LEVEL) 1603 FORCEINLINE 1604 WDFQUEUE 1605 WdfRequestGetIoQueue( 1606 _In_ 1607 WDFREQUEST Request 1608 ) 1609 { 1610 return ((PFN_WDFREQUESTGETIOQUEUE) WdfFunctions[WdfRequestGetIoQueueTableIndex])(WdfDriverGlobals, Request); 1611 } 1612 1613 // 1614 // WDF Function: WdfRequestRequeue 1615 // 1616 typedef 1617 _Must_inspect_result_ 1618 _IRQL_requires_max_(DISPATCH_LEVEL) 1619 WDFAPI 1620 NTSTATUS 1621 (STDCALL *PFN_WDFREQUESTREQUEUE)( 1622 _In_ 1623 PWDF_DRIVER_GLOBALS DriverGlobals, 1624 _In_ 1625 WDFREQUEST Request 1626 ); 1627 1628 _Must_inspect_result_ 1629 _IRQL_requires_max_(DISPATCH_LEVEL) 1630 FORCEINLINE 1631 NTSTATUS 1632 WdfRequestRequeue( 1633 _In_ 1634 WDFREQUEST Request 1635 ) 1636 { 1637 return ((PFN_WDFREQUESTREQUEUE) WdfFunctions[WdfRequestRequeueTableIndex])(WdfDriverGlobals, Request); 1638 } 1639 1640 // 1641 // WDF Function: WdfRequestStopAcknowledge 1642 // 1643 typedef 1644 _IRQL_requires_max_(DISPATCH_LEVEL) 1645 WDFAPI 1646 VOID 1647 (STDCALL *PFN_WDFREQUESTSTOPACKNOWLEDGE)( 1648 _In_ 1649 PWDF_DRIVER_GLOBALS DriverGlobals, 1650 _In_ 1651 WDFREQUEST Request, 1652 _In_ 1653 BOOLEAN Requeue 1654 ); 1655 1656 _IRQL_requires_max_(DISPATCH_LEVEL) 1657 FORCEINLINE 1658 VOID 1659 WdfRequestStopAcknowledge( 1660 _In_ 1661 WDFREQUEST Request, 1662 _In_ 1663 BOOLEAN Requeue 1664 ) 1665 { 1666 ((PFN_WDFREQUESTSTOPACKNOWLEDGE) WdfFunctions[WdfRequestStopAcknowledgeTableIndex])(WdfDriverGlobals, Request, Requeue); 1667 } 1668 1669 // 1670 // WDF Function: WdfRequestWdmGetIrp 1671 // 1672 typedef 1673 _IRQL_requires_max_(DISPATCH_LEVEL) 1674 WDFAPI 1675 PIRP 1676 (STDCALL *PFN_WDFREQUESTWDMGETIRP)( 1677 _In_ 1678 PWDF_DRIVER_GLOBALS DriverGlobals, 1679 _In_ 1680 WDFREQUEST Request 1681 ); 1682 1683 _IRQL_requires_max_(DISPATCH_LEVEL) 1684 FORCEINLINE 1685 PIRP 1686 WdfRequestWdmGetIrp( 1687 _In_ 1688 WDFREQUEST Request 1689 ) 1690 { 1691 return ((PFN_WDFREQUESTWDMGETIRP) WdfFunctions[WdfRequestWdmGetIrpTableIndex])(WdfDriverGlobals, Request); 1692 } 1693 1694 // 1695 // WDF Function: WdfRequestIsReserved 1696 // 1697 typedef 1698 _IRQL_requires_max_(DISPATCH_LEVEL) 1699 WDFAPI 1700 BOOLEAN 1701 (STDCALL *PFN_WDFREQUESTISRESERVED)( 1702 _In_ 1703 PWDF_DRIVER_GLOBALS DriverGlobals, 1704 _In_ 1705 WDFREQUEST Request 1706 ); 1707 1708 _IRQL_requires_max_(DISPATCH_LEVEL) 1709 FORCEINLINE 1710 BOOLEAN 1711 WdfRequestIsReserved( 1712 _In_ 1713 WDFREQUEST Request 1714 ) 1715 { 1716 return ((PFN_WDFREQUESTISRESERVED) WdfFunctions[WdfRequestIsReservedTableIndex])(WdfDriverGlobals, Request); 1717 } 1718 1719 // 1720 // WDF Function: WdfRequestForwardToParentDeviceIoQueue 1721 // 1722 typedef 1723 _Must_inspect_result_ 1724 _IRQL_requires_max_(DISPATCH_LEVEL) 1725 WDFAPI 1726 NTSTATUS 1727 (STDCALL *PFN_WDFREQUESTFORWARDTOPARENTDEVICEIOQUEUE)( 1728 _In_ 1729 PWDF_DRIVER_GLOBALS DriverGlobals, 1730 _In_ 1731 WDFREQUEST Request, 1732 _In_ 1733 WDFQUEUE ParentDeviceQueue, 1734 _In_ 1735 PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions 1736 ); 1737 1738 _Must_inspect_result_ 1739 _IRQL_requires_max_(DISPATCH_LEVEL) 1740 FORCEINLINE 1741 NTSTATUS 1742 WdfRequestForwardToParentDeviceIoQueue( 1743 _In_ 1744 WDFREQUEST Request, 1745 _In_ 1746 WDFQUEUE ParentDeviceQueue, 1747 _In_ 1748 PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions 1749 ) 1750 { 1751 return ((PFN_WDFREQUESTFORWARDTOPARENTDEVICEIOQUEUE) WdfFunctions[WdfRequestForwardToParentDeviceIoQueueTableIndex])(WdfDriverGlobals, Request, ParentDeviceQueue, ForwardOptions); 1752 } 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 #endif // (NTDDI_VERSION >= NTDDI_WIN2K) 1765 1766 1767 WDF_EXTERN_C_END 1768 1769 #endif // _WDFREQUEST_H_ 1770 1771