1 2 /*++ 3 4 Copyright (c) Microsoft. All rights reserved. 5 6 Module Name: 7 8 FxRequestMemory.hpp 9 10 Abstract: 11 12 This is the memory object for FxRequest that is sized, and 13 allows checking for read/write access. 14 15 It's reference lifetime is tied with IRP completion in 16 FxRequest. 17 18 Author: 19 20 21 22 Environment: 23 24 Both kernel and user mode 25 26 Revision History: 27 28 --*/ 29 30 #ifndef _FXREQUESTMEMORY_H_ 31 #define _FXREQUESTMEMORY_H_ 32 33 class FxRequestMemory : public FxMemoryBufferPreallocated { 34 public: 35 36 // Factory function 37 static 38 NTSTATUS 39 Create( 40 __in PFX_DRIVER_GLOBALS DriverGlobals, 41 __in_opt PWDF_OBJECT_ATTRIBUTES Attributes, 42 __out FxRequestMemory** Object 43 ); 44 45 FxRequestMemory( 46 __in PFX_DRIVER_GLOBALS Globals 47 ); 48 49 // begin end FxMemoryObject 50 virtual 51 PVOID 52 GetBuffer( 53 VOID 54 ); 55 56 _Must_inspect_result_ 57 virtual 58 PMDL 59 GetMdl( 60 VOID 61 ); 62 63 virtual 64 USHORT 65 GetFlags( 66 VOID 67 ) 68 { 69 return m_Flags; 70 } 71 // end FxMemoryObject overrides 72 73 VOID 74 SetBuffer( 75 _In_ FxRequest* Request, 76 _Pre_notnull_ _Pre_writable_byte_size_(BufferSize) PVOID Buffer, 77 _In_ PMDL BackingMdl, 78 _In_ size_t BufferSize, 79 _In_ BOOLEAN ReadOnly 80 ); 81 82 VOID 83 SetMdl( 84 __in FxRequest* Request, 85 __in PMDL Mdl, 86 __in PVOID MdlBuffer, 87 __in size_t BufferSize, 88 __in BOOLEAN ReadOnly 89 ); 90 91 _Must_inspect_result_ 92 NTSTATUS 93 QueryInterface( 94 __in FxQueryInterfaceParams* Params 95 ); 96 97 ~FxRequestMemory( 98 VOID 99 ); 100 101 protected: 102 VOID 103 SetFlags( 104 __in USHORT Flags 105 ) 106 { 107 m_Flags = Flags; 108 } 109 110 protected: 111 112 FxRequest* m_Request; 113 114 // 115 // The m_Mdl is owned by this object and it must be freed by the this object. 116 // 117 PMDL m_Mdl; 118 119 USHORT m_Flags; 120 }; 121 122 #endif // _FXREQUESTMEMORY_H_ 123 124 125