Função WdfRequestCompleteWithInformation (wdfrequest.h)
[Aplica-se a KMDF e UMDF]
O método WdfRequestCompleteWithInformation armazena informações de conclusão e, em seguida, conclui uma solicitação de E/S especificada com uma status de conclusão fornecida.
Sintaxe
void WdfRequestCompleteWithInformation(
[in] WDFREQUEST Request,
[in] NTSTATUS Status,
[in] ULONG_PTR Information
);
Parâmetros
[in] Request
Um identificador para o objeto de solicitação.
[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 concluiu a solicitação com êxito.
STATUS_CANCELLED
O driver cancelou a solicitação.
STATUS_UNSUCCESSFUL
O driver encontrou um erro ao processar a solicitação.
[in] Information
Um ULONG_PTR definido como um valor dependente de solicitação. Por exemplo, após a conclusão bem-sucedida de uma solicitação de transferência, isso é definido como o número de bytes transferidos. Esse campo não é extensível pelo driver.
Retornar valor
Nenhum
Comentários
Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.
Para solicitações de leitura, gravação e IOCTL, é necessário que o driver chame WdfRequestCompleteWithInformation
Para uma solicitação de transferência não de dados, chamar WdfRequestComplete é uma opção.
Chamar WdfRequestCompleteWithInformation é equivalente a chamar WdfRequestSetInformation e, em seguida, chamar WdfRequestComplete.
Depois que uma chamada para WdfRequestCompleteWithInformation é retornada, 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 WdfRequestCompleteWithInformation retornar, o driver não deve tentar acessar a estrutura WDM IRP associada, mesmo que tenha chamado WdfObjectReference.
Quando o driver chama WdfRequestCompleteWithInformation, 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 WdfRequestCompleteWithInformation, consulte Concluindo solicitações de E/S.
Para obter um exemplo de código que mostra como usar WdfRequestCompleteWithInformation para recuperar o número de bytes copiados, consulte o exemplo de driver VirtualSerial2.
Exemplos
O exemplo de código a seguir mostra como um driver para um dispositivo USB pode chamar WdfRequestCompleteWithInformation em uma função de retorno de chamada CompletionRoutine .
VOID
EvtRequestReadCompletionRoutine(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
PWDF_REQUEST_COMPLETION_PARAMS CompletionParams,
IN WDFCONTEXT Context
)
{
NTSTATUS status;
size_t bytesRead = 0;
PWDF_USB_REQUEST_COMPLETION_PARAMS usbCompletionParams;
UNREFERENCED_PARAMETER(Target);
UNREFERENCED_PARAMETER(Context);
status = CompletionParams->IoStatus.Status;
usbCompletionParams = CompletionParams->Parameters.Usb.Completion;
bytesRead = usbCompletionParams->Parameters.PipeRead.Length;
if (NT_SUCCESS(status)){
TraceEvents(
TRACE_LEVEL_INFORMATION,
DBG_READ,
"Number of bytes read: %I64d\n",
(INT64)bytesRead
);
} else {
TraceEvents(
TRACE_LEVEL_ERROR,
DBG_READ,
"Read failed - request status 0x%x UsbdStatus 0x%x\n",
status,
usbCompletionParams->UsbdStatus
);
}
WdfRequestCompleteWithInformation(
Request,
status,
bytesRead
);
return;
}
Requisitos
Confira também
WDF_USB_REQUEST_COMPLETION_PARAMS