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.

Valor retornado

WdfRequestProbeAndLockUserBufferForWrite retorna 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 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.

Ocorre uma verificação de bug se o driver fornece 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 do modo de usuário especificado pelo parâmetro Buffer pode ser o buffer que o WdfRequestRetrieveUnsafeUserOutputBuffer recupera ou pode ser um buffer de saída diferente do modo de usuário. 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 no 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 de 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

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

Confira também

WdfMemoryGetBuffer

WdfRequestProbeAndLockUserBufferForRead

WdfRequestRetrieveUnsafeUserOutputBuffer