Função WdfRequestProbeAndLockUserBufferForWrite (wdfrequest.h)

[Aplica-se somente ao KMDF]

O método WdfRequestProbeAndLockUserBufferForWrite verifica se o buffer de modo de usuário de uma solicitação de E/S é gravável e bloqueia as páginas de memória física do buffer para que os drivers na pilha de driver possam gravar no buffer.

Sintaxe

NTSTATUS WdfRequestProbeAndLockUserBufferForWrite(
  [in]  WDFREQUEST Request,
  [in]  PVOID      Buffer,
  [in]  size_t     Length,
  [out] WDFMEMORY  *MemoryObject
);

Parâmetros

[in] Request

Um identificador para um objeto de solicitação de estrutura.

[in] Buffer

Um ponteiro para o buffer de saída da solicitação. Para obter mais informações, consulte a seção Comentários a seguir.

[in] Length

O comprimento, em bytes, do buffer de saída da solicitação.

[out] MemoryObject

Um ponteiro para um local que recebe um identificador para um objeto de memória de estrutura que representa o buffer de saída do usuário.

Retornar valor

WdfRequestProbeAndLockUserBufferForWrite 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 de entrada é inválido.
STATUS_INVALID_USER_BUFFER
O parâmetro Length é zero.
STATUS_INVALID_DEVICE_REQUEST
A solicitação já foi concluída ou é inválida.
STATUS_ACCESS_VIOLATION
O thread atual não é o criador da solicitação de E/S.
STATUS_INSUFFICIENT_RESOURCES
Não há memória suficiente para concluir a operação.
 

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 buffer de saída do usuário normalmente recebe informações que o driver leu do dispositivo.

Somente um driver de nível superior pode chamar o método WdfRequestProbeAndLockUserBufferForWrite , pois o método requer o contexto de processo do processo que criou a solicitação de E/S.

O buffer de modo de usuário especificado pelo parâmetro Buffer pode ser o buffer que WdfRequestRetrieveUnsafeUserOutputBuffer recupera ou pode ser um buffer de saída de modo de usuário diferente. Por exemplo, um código de controle de E/S que usa o método de acesso em buffer pode passar uma estrutura que contém um ponteiro inserido para um buffer de modo de usuário. Nesse caso, o driver pode usarWdfRequestProbeAndLockUserBufferForWrite para obter um objeto de memória para o buffer.

O comprimento do buffer especificado pelo parâmetro Length não deve ser maior que o tamanho real do buffer. Caso contrário, os drivers poderão acessar a memória fora do buffer, o que é um risco à segurança.

Se WdfRequestProbeAndLockUserBufferForWrite retornar STATUS_SUCCESS, o driver receberá um identificador para um objeto de memória de estrutura que representa o buffer do modo de usuário. Para acessar o buffer, o driver deve chamar WdfMemoryGetBuffer.

O objeto de memória da estrutura é liberado automaticamente quando o driver chama WdfRequestComplete.

Para obter mais informações sobre WdfRequestProbeAndLockUserBufferForWrite, consulte Acessando buffers de dados em drivers de Framework-Based.

Exemplos

Para obter um exemplo de código que usa WdfRequestProbeAndLockUserBufferForWrite, consulte WdfRequestProbeAndLockUserBufferForRead.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1.0
Cabeçalho wdfrequest.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.)
IRQL PASSIVE_LEVEL
Regras de conformidade da DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Confira também

WdfMemoryGetBuffer

WdfRequestProbeAndLockUserBufferForRead

WdfRequestRetrieveUnsafeUserOutputBuffer