Compartir a través de


Función WdfMemoryCopyFromBuffer (wdfmemory.h)

[Se aplica a KMDF y UMDF]

El método WdfMemoryCopyFromBuffer copia el contenido de un búfer de origen especificado en el búfer de un objeto de memoria especificado.

Sintaxis

NTSTATUS WdfMemoryCopyFromBuffer(
  [in] WDFMEMORY DestinationMemory,
  [in] size_t    DestinationOffset,
  [in] PVOID     Buffer,
  [in] size_t    NumBytesToCopyFrom
);

Parámetros

[in] DestinationMemory

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

[in] DestinationOffset

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

[in] Buffer

Puntero a un búfer de origen.

[in] NumBytesToCopyFrom

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

WdfMemoryCopyFromBuffer 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_INVALID_BUFFER_SIZE
Desplazamiento de bytes que especificó el parámetro DestinationOffset era demasiado grande.
STATUS_BUFFER_TOO_SMALL
El tamaño del búfer de destino que especificó el parámetro DestinationOffset , a partir del desplazamiento de destino, era mayor que el parámetro NumBytesToCopyFrom .
 

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 comprueba que el búfer de destino es lo suficientemente grande como para recibir la cantidad de datos que especifica el parámetro NumBytesToCopyFrom .

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 WdfMemoryCopyFromBuffer 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 obtiene un identificador para el objeto de memoria del marco que representa el búfer de salida de una solicitud de E/S y, a continuación, copia el contenido de otro búfer en el búfer de salida de la solicitud de E/S.

WDFMEMORY  memoryBuffer;
NTSTATUS  status;

status = WdfRequestRetrieveOutputMemory(
                                        Request,
                                        &memoryBuffer
                                        );
if (!NT_SUCCESS(status)) {
    goto Error;
}
status = WdfMemoryCopyFromBuffer(
                                 memoryBuffer,
                                 0,
                                 deviceContext->Buffer,
                                 Length
                                 );
if (!NT_SUCCESS(status)) {
    goto Error;
}

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

WdfMemoryCopyToBuffer

WdfRequestRetrieveOutputMemory