WdfMemoryCreatePreallocated function (wdfmemory.h)

[Applies to KMDF and UMDF]

The WdfMemoryCreatePreallocated method creates a framework memory object for a driver-supplied memory buffer.


NTSTATUS WdfMemoryCreatePreallocated(
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]           __drv_aliasesMem PVOID Buffer,
  [in]           size_t                 BufferSize,
  [out]          WDFMEMORY              *Memory


[in, optional] Attributes

A pointer to a WDF_OBJECT_ATTRIBUTES structure that contains object attributes for the new memory object. This parameter is optional and can be WDF_NO_OBJECT_ATTRIBUTES.

[in] Buffer

A pointer to a driver-supplied buffer.

[in] BufferSize

The nonzero size, in bytes, of the buffer that Buffer points to.

[out] Memory

A pointer to a location that receives a handle to the new memory object.

Return value

WdfMemoryCreatePreallocated returns STATUS_SUCCESS if the operation succeeds. Otherwise, this method might return one of the following values:

Return code Description
An invalid parameter was detected.
There was insufficient memory.

For a list of other return values that the WdfMemoryCreatePreallocated method might return, see Framework Object Creation Errors.

This method also might return other NTSTATUS values.


The WdfMemoryCreatePreallocated method creates a framework memory object for a buffer that the driver has previously allocated or obtained.

Your driver can call WdfMemoryCreatePreallocated if you need to create memory objects that represent pre-existing memory buffers. For example, the driver might receive a driver-defined structure within a buffer for an I/O request that contains an internal I/O control code. The driver can call WdfMemoryCreatePreallocated to create a memory object so that the driver can pass the structure to an I/O target.

After a driver has called WdfMemoryCreatePreallocated, the driver can call WdfMemoryAssignBuffer to assign a different buffer to the memory object that WdfMemoryCreatePreallocated created.

The default parent object for each memory object is the framework driver object that represents the driver that called WdfMemoryCreatePreallocated. If your driver creates a memory object that it uses with a specific device object, request object, or other framework object, it should set the memory object's parent appropriately. The memory object will be deleted when the parent object is deleted. If you do not change the default parent object, the memory object will remain in memory until the I/O manager unloads your driver.

A driver can also delete a memory object by calling WdfObjectDelete.

When the framework memory object that WdfMemoryCreatePreallocated created is deleted, the framework does not deallocate the pre-existing buffer. Likewise, a call to WdfMemoryAssignBuffer does not deallocate the previously assigned buffer.

For more information about framework memory objects, see Using Memory Buffers.


The following code example allocates a buffer and then creates a framework memory object for the buffer.

PVOID  pBuffer = NULL;
WDFMEMORY  memHandle;

pBuffer = ExAllocatePoolWithTag(
if (pBuffer == NULL){
    goto Error;
attributes.ParentObject = requestHandle;

status = WdfMemoryCreatePreallocated(


Target Platform Universal
Minimum KMDF version 1.0
Minimum UMDF version 2.0
Header wdfmemory.h (include Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
DDI compliance rules BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

See also