Compartilhar via


Função WdfMemoryCopyToBuffer (wdfmemory.h)

[Aplica-se a KMDF e UMDF]

O método WdfMemoryCopyToBuffer copia o conteúdo do buffer de um objeto de memória especificado em um buffer de destino especificado.

Sintaxe

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

Parâmetros

[in] SourceMemory

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

[in] SourceOffset

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

[out] Buffer

Um ponteiro para um buffer de destino.

[in] NumBytesToCopyTo

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

WdfMemoryCopyToBuffer 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_BUFFER_TOO_SMALL
O deslocamento de bytes especificado pelo parâmetro SourceOffset era muito grande ou o parâmetro NumBytesToCopyTo era maior que o tamanho do buffer de origem.
 

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 não permite que o driver copie mais bytes do que o buffer de origem especificado pelo parâmetro SourceMemory .

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 WdfMemoryCopyToBuffer 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 aloca um novo buffer e copia o conteúdo do buffer de um objeto de memória para o novo buffer.

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 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

WdfMemoryCopyFromBuffer