Función WdfMemoryCopyToBuffer (wdfmemory.h)

[Se aplica a KMDF y UMDF]

El método WdfMemoryCopyToBuffer copia el contenido del búfer de un objeto de memoria especificado en un búfer de destino especificado.

Sintaxis

NTSTATUS WdfMemoryCopyToBuffer(
  [in]  WDFMEMORY SourceMemory,
  [in]  size_t    SourceOffset,
  [out] PVOID     Buffer,
  [in]  size_t    NumBytesToCopyTo
);

Parámetros

[in] SourceMemory

Identificador de un objeto de memoria de marco que representa el búfer de origen.

[in] SourceOffset

Desplazamiento, en bytes, desde el principio del búfer de origen. La operación de copia comienza en el desplazamiento especificado en el búfer de origen.

[out] Buffer

Puntero a un búfer de destino.

[in] NumBytesToCopyTo

Número de bytes que se van a copiar desde el búfer de origen al búfer de destino. Este valor no debe ser mayor que el tamaño del búfer de origen.

Valor devuelto

WdfMemoryCopyToBuffer 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.
STATUS_BUFFER_TOO_SMALL
El desplazamiento de bytes que especificó el parámetro SourceOffset era demasiado grande o el parámetro NumBytesToCopyTo era mayor que el tamaño del búfer de origen.
 

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 marco de trabajo no permite que el controlador copie más bytes que el búfer de origen que el parámetro SourceMemory especifica puede contener.

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

Si el búfer de origen o destino se asignó desde el grupo de memoria paginable, se debe llamar al método WdfMemoryCopyToBuffer en IRQL <= APC_LEVEL. De lo contrario, se puede llamar al método en cualquier IRQL.

Ejemplos

En el ejemplo de código siguiente se asigna un nuevo búfer y se copia el contenido del búfer de un objeto de memoria en el nuevo búfer.

PVOID  pOutputBuffer = NULL;
NTSTATUS  status = STATUS_SUCCESS;

pOutputBuffer = ExAllocatePoolWithTag(
                                      NonPagedPool,
                                      MY_BUFFER_LENGTH,
                                      MY_POOL_TAG
                                      );
if (pOutputBuffer != NULL){
    status = WdfMemoryCopyToBuffer(
                                   outputMemoryHandle,
                                   0,
                                   pOutputBuffer,
                                   MY_BUFFER_LENGTH
                                   );
}
else{
    status = STATUS_INSUFFICIENT_RESOURCES;
}

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 (incluya Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Cualquier nivel (consulte la sección Comentarios)
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

WdfMemoryCopyFromBuffer