Compartilhar via


Função WdfMemoryAssignBuffer (wdfmemory.h)

[Aplica-se a KMDF e UMDF]

O método WdfMemoryAssignBuffer atribui um buffer especificado a um objeto de memória que um driver criou chamando WdfMemoryCreatePreallocated.

Sintaxe

NTSTATUS WdfMemoryAssignBuffer(
  [in] WDFMEMORY Memory,
  [in] PVOID     Buffer,
  [in] size_t    BufferSize
);

Parâmetros

[in] Memory

Um identificador para um objeto de memória de estrutura que foi obtido chamando WdfMemoryCreatePreallocated.

[in] Buffer

Um ponteiro para um buffer fornecido pelo driver.

[in] BufferSize

O tamanho diferente de zero, em bytes, do buffer para o qual o Buffer aponta.

Retornar valor

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

Código de retorno Descrição
STATUS_INVALID_PARAMETER
Um parâmetro inválido foi detectado.
 

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

O método pode atribuir um buffer a um objeto de memória que WdfMemoryCreatePreallocated criou, mas não a um objeto de memória que WdfMemoryCreate criou.

O buffer para o qual o parâmetro Buffer aponta pode ser alocado do pool de memória paginável ou não paginável. Se o driver alocar o buffer do pool paginável ou se o buffer for do pool paginável porque ele veio de um aplicativo no modo de usuário, o driver deverá acessar o buffer somente no IRQL < DISPATCH_LEVEL. (Observe que as funções de retorno de chamada EvtCleanupCallback e EvtDestroyCallback do driver, se fornecidas, podem ser chamadas em IRQL <= DISPATCH_LEVEL.)

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

Exemplos

O exemplo de código a seguir aloca um buffer e atribui o buffer a um objeto de memória de estrutura.

PVOID  pNewBuffer = NULL;

pNewBuffer = ExAllocatePoolWithTag(
                                   NonPagedPool,
                                   NEW_BUFFER_SIZE,
                                   MY_DRIVER_TAG
                                   );
if (pNewBuffer == NULL){
    goto Error;
}

status = WdfMemoryAssignBuffer(
                               memHandle,
                               pNewBuffer,
                               NEW_BUFFER_SIZE
                               );

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
Regras de conformidade de DDI BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

Confira também

ExAllocatePoolWithTag

WdfMemoryCreatePreallocated