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 |
---|---|
|
Um parâmetro de entrada é inválido. |
|
O parâmetro Length é zero. |
|
A solicitação já foi concluída ou é inválida. |
|
O thread atual não é o criador da solicitação de E/S. |
|
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) |