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 |
---|---|
|
Um parâmetro inválido foi detectado. |
|
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) |