Función WdfMemoryAssignBuffer (wdfmemory.h)

[Se aplica a KMDF y UMDF]

El método WdfMemoryAssignBuffer asigna un búfer especificado a un objeto de memoria que un controlador creado llamando a WdfMemoryCreatePreallocated.

Sintaxis

NTSTATUS WdfMemoryAssignBuffer(
  [in] WDFMEMORY Memory,
  [in] PVOID     Buffer,
  [in] size_t    BufferSize
);

Parámetros

[in] Memory

Identificador de un objeto de memoria de marco que se obtuvo mediante una llamada a WdfMemoryCreatePreallocated.

[in] Buffer

Puntero a un búfer proporcionado por el controlador.

[in] BufferSize

Tamaño distinto de cero, en bytes, del búfer al que apunta el búfer .

Valor devuelto

WdfMemoryAssignBuffer devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:

Código devuelto Descripción
STATUS_INVALID_PARAMETER
Se ha detectado un parámetro no válido.
 

Este método también podría devolver otros valores NTSTATUS.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Comentarios

El método puede asignar un búfer a un objeto de memoria que WdfMemoryCreatePreallocated creó, pero no a un objeto de memoria que WdfMemoryCreate creó.

El búfer al que apunta el parámetro Buffer se puede asignar desde el grupo de memoria paginable o no paginable. Si el controlador asigna el búfer del grupo paginable o si el búfer procede de un grupo paginable porque procede de una aplicación en modo de usuario, el controlador debe tener acceso al búfer solo en irQL < DISPATCH_LEVEL. (Tenga en cuenta que, si se proporciona, se puede llamar a las funciones de devolución de llamada EvtCleanupCallback y EvtDestroyCallback del controlador en IRQL <= DISPATCH_LEVEL).

Para obtener más información sobre los objetos de memoria del marco, vea Uso de búferes de memoria.

Ejemplos

En el ejemplo de código siguiente se asigna un búfer y, a continuación, se asigna el búfer a un objeto de memoria de marco.

PVOID  pNewBuffer = NULL;

pNewBuffer = ExAllocatePoolWithTag(
                                   NonPagedPool,
                                   NEW_BUFFER_SIZE,
                                   MY_DRIVER_TAG
                                   );
if (pNewBuffer == NULL){
    goto Error;
}

status = WdfMemoryAssignBuffer(
                               memHandle,
                               pNewBuffer,
                               NEW_BUFFER_SIZE
                               );

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdfmemory.h (incluir Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Cualquier nivel
Reglas de cumplimiento de DDI BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

Consulte también

ExAllocatePoolWithTag

WdfMemoryCreatePreallocated