Função WdfRequestComplete (wdfrequest.h)
[Aplica-se a KMDF e UMDF]
O método WdfRequestComplete conclui uma solicitação de E/S especificada e fornece uma status de conclusão.
Sintaxe
void WdfRequestComplete(
[in] WDFREQUEST Request,
[in] NTSTATUS Status
);
Parâmetros
[in] Request
Um identificador para o objeto de solicitação de estrutura que representa a solicitação de E/S que está sendo concluída.
[in] Status
Um valor NTSTATUS que representa o status de conclusão da solicitação. Os valores de status válidos incluem, mas não se limitam a:
STATUS_SUCCESS
O driver está concluindo a solicitação com êxito.
STATUS_CANCELLED
O driver está cancelando a solicitação.
STATUS_UNSUCCESSFUL
O driver encontrou um erro ao processar a solicitação.
Retornar valor
Nenhum
Comentários
Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.
Depois que um driver chama WdfRequestComplete, drivers de nível superior na pilha de driver podem chamar WdfRequestGetStatus para obter a conclusão status valor especificado para o parâmetro Status. Normalmente, os drivers chamam WdfRequestGetStatus de dentro de uma função de retorno de chamada CompletionRoutine .
Depois que uma chamada para WdfRequestComplete retorna, o identificador de solicitação não é mais válido, a menos que o driver tenha chamado WdfObjectReference para adicionar uma ou mais contagens de referência adicionais ao objeto de solicitação. Observe que, depois que WdfRequestComplete retorna, o driver não deve tentar acessar a estrutura WDM IRP associada, mesmo que tenha chamado WdfObjectReference. Esse requisito se estende ao acesso à estrutura WDM IRP associada chamando métodos no WDFREQUEST, como WdfRequestRetrieveOutputBuffer ou WdfRequestRetrieveInputBuffer.
Depois que um driver chama WdfRequestComplete, a estrutura chama a função EvtCleanupCallback do driver para a solicitação, se o driver tiver fornecido uma.
Em vez de chamar WdfRequestComplete, o driver pode chamar WdfRequestCompleteWithInformation ou WdfRequestCompleteWithPriorityBoost. Consulte os Comentários de WdfRequestCompleteWithInformation para obter mais informações.
Quando o driver chama WdfRequestComplete, a estrutura fornece um valor padrão que o sistema usa para aumentar a prioridade de tempo de execução do thread que solicitou a operação de E/S. Para obter informações sobre valores de aumento de prioridade padrão, consulte Especificando aumentos de prioridade ao concluir solicitações de E/S. Seu driver pode chamar WdfRequestCompleteWithPriorityBoost para substituir o valor de aumento de prioridade padrão.
Para obter mais informações sobre como chamar WdfRequestComplete, consulte Concluindo solicitações de E/S.
Exemplos
O exemplo de código a seguir é uma seção de um manipulador de solicitação. O manipulador de solicitação aceita apenas solicitações de leitura e gravação e conclui cada solicitação com um erro status se o tipo de solicitação não for lido ou gravado.
VOID
MyEvtIoDefault(
IN WDFQUEUE Queue,
IN WDFREQUEST Request
)
{
WDF_REQUEST_PARAMETERS params;
WDF_DMA_DIRECTION direction;
...
WDF_REQUEST_PARAMETERS_INIT(¶ms);
WdfRequestGetParameters(
Request,
¶ms
);
//
// Validate and gather parameters.
//
switch (params.Type) {
case WdfRequestTypeRead:
length = params.Parameters.Read.Length;
direction = WdfDmaDirectionReadFromDevice;
break;
case WdfRequestTypeWrite:
length = params.Parameters.Write.Length;
direction = WdfDmaDirectionWriteToDevice;
break;
default:
WdfRequestComplete(
Request,
STATUS_INVALID_DEVICE_REQUEST
);
return;
}
...
}
Requisitos
Confira também
WdfRequestCompleteWithInformation