/*++ Copyright (c) Microsoft. All rights reserved. Module Name: FxRequestBufferUm.cpp Abstract: This module implements a memory union object Author: Environment: User mode only Revision History: --*/ #include "FxSupportPch.hpp" extern "C" { #include "FxRequestBufferUm.tmh" } _Must_inspect_result_ NTSTATUS FxRequestBuffer::GetOrAllocateMdl( __in PFX_DRIVER_GLOBALS FxDriverGlobals, __deref_out_opt PMDL* Mdl, __inout PMDL* MdlToFree, __inout PBOOLEAN UnlockWhenFreed, __in LOCK_OPERATION Operation, __in BOOLEAN ReuseMdl, __inout_opt size_t* SizeOfMdl ) /*++ Routine Description: This function attempts to reuse the passed-in MDL (if any) or allocates a new MDL if reuse flag isn't passed-in or if the existing MDL isn't big enough. Arguments: Return Value: FxDriverGlobals - Driver globals Mdl - on return it contains the MDL allocated/reused MdlToFree - pointer to any MDL * to be reused, if the size is <= current size, or * freed and set to newly allocated MDL UnlockWhenFreed - whether to unlock pages when freeing MDL (if FALSE, MDL may represent just MDL buffer but the pages might have already been unlocked) Operation - Operation to pass to MmLockPages ReuseMdl - whether to reuse *MdlToFree Please note that this can be FALSE even when MDL is supplied SizeOfMdl - on input contains size of *MdlToFree, on return contains size of *Mdl Remarks: *MdlToFree is modified only when this function frees the passed in MDL Otherwise it leaves it untouched. Caller is responsible for storing properly initialized value and/or freeing what's stored in the value. --*/ { UNREFERENCED_PARAMETER(FxDriverGlobals); UNREFERENCED_PARAMETER(Mdl); UNREFERENCED_PARAMETER(MdlToFree); UNREFERENCED_PARAMETER(UnlockWhenFreed); UNREFERENCED_PARAMETER(Operation); UNREFERENCED_PARAMETER(ReuseMdl); UNREFERENCED_PARAMETER(SizeOfMdl); UfxVerifierTrapNotImpl(); return STATUS_NOT_IMPLEMENTED; } VOID FxRequestBuffer::SetMemory( __in IFxMemory* Memory, __in PWDFMEMORY_OFFSET Offsets ) { DataType = FxRequestBufferMemory; u.Memory.Memory = Memory; u.Memory.Offsets = Offsets; }