Compartilhar via


Função WdfMemoryCopyFromBuffer (wdfmemory.h)

[Aplica-se a KMDF e UMDF]

O método WdfMemoryCopyFromBuffer copia o conteúdo de um buffer de origem especificado no buffer de um objeto de memória especificado.

Sintaxe

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

Parâmetros

[in] DestinationMemory

Um identificador para um objeto de memória de estrutura que representa o buffer de destino.

[in] DestinationOffset

Um deslocamento, em bytes, desde o início do buffer de destino. A operação de cópia começa no deslocamento especificado no buffer de destino.

[in] Buffer

Um ponteiro para um buffer de origem.

[in] NumBytesToCopyFrom

O número de bytes a serem copiados do buffer de origem para o buffer de destino. Esse valor não deve ser maior que o tamanho do buffer de origem.

Retornar valor

WdfMemoryCopyFromBuffer retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método pode retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INVALID_PARAMETER
Um parâmetro inválido foi detectado.
STATUS_INVALID_BUFFER_SIZE
O deslocamento de bytes especificado pelo parâmetro DestinationOffset era muito grande.
STATUS_BUFFER_TOO_SMALL
O tamanho do buffer de destino especificado pelo parâmetro DestinationOffset , começando no deslocamento de destino, foi maior que o parâmetro NumBytesToCopyFrom .
 

Esse método também pode retornar outros valores NTSTATUS.

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

Comentários

A estrutura verifica se o buffer de destino é grande o suficiente para receber a quantidade de dados especificada pelo parâmetro NumBytesToCopyFrom .

Para obter mais informações sobre objetos de memória de estrutura, consulte Usando buffers de memória.

Se o buffer de origem ou destino tiver sido alocado do pool de memória paginável, o método WdfMemoryCopyFromBuffer deverá ser chamado em IRQL <= APC_LEVEL. Caso contrário, o método pode ser chamado em qualquer IRQL.

Exemplos

O exemplo de código a seguir obtém um identificador para o objeto de memória da estrutura que representa o buffer de saída de uma solicitação de E/S e, em seguida, copia o conteúdo de outro buffer para o buffer de saída da solicitação 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 Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1.0
Versão mínima do UMDF 2,0
Cabeçalho wdfmemory.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Qualquer nível (consulte a seção Comentários)
Regras de conformidade da DDI BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

Confira também

WdfMemoryCopyToBuffer

WdfRequestRetrieveOutputMemory