EVT_WDF_REQUEST_COMPLETION_ROUTINE função de retorno de chamada (wdfrequest.h)
[Aplica-se a KMDF e UMDF]
A função de retorno de chamada de evento CompletionRoutine de um driver é executada quando outro driver conclui uma solicitação de E/S especificada.
Sintaxe
EVT_WDF_REQUEST_COMPLETION_ROUTINE EvtWdfRequestCompletionRoutine;
void EvtWdfRequestCompletionRoutine(
[in] WDFREQUEST Request,
[in] WDFIOTARGET Target,
[in] PWDF_REQUEST_COMPLETION_PARAMS Params,
[in] WDFCONTEXT Context
)
{...}
Parâmetros
[in] Request
Um identificador para um objeto de solicitação de estrutura que representa a solicitação de E/S concluída.
[in] Target
Um identificador para um objeto de destino de E/S que representa o destino de E/S que concluiu a solicitação.
[in] Params
Um ponteiro para uma estrutura WDF_REQUEST_COMPLETION_PARAMS que contém informações sobre a solicitação concluída. Veja a observação abaixo sobre a validade dos parâmetros de conclusão.
[in] Context
Informações de contexto fornecidas pelo driver, que o driver especificou em uma chamada anterior para WdfRequestSetCompletionRoutine.
Retornar valor
Nenhum
Comentários
Para registrar uma função de retorno de chamada CompletionRoutine para uma solicitação de E/S, um driver deve chamar WdfRequestSetCompletionRoutine. Para obter mais informações sobre essa função de retorno de chamada, consulte Concluindo solicitações de E/S.
A estrutura de parâmetros de conclusão será totalmente preenchida com informações válidas somente se o driver tiver formatado a solicitação chamando um dos seguintes:
- Métodos WdfIoTargetFormatXxx, por exemplo, WdfIoTargetFormatRequestForRead
- Métodos WdfUsbTargetDeviceFormatRequestForXxx , por exemplo, WdfUsbTargetDeviceFormatRequestForString
- Métodos WdfUsbTargetPipeFormatRequestForXxx , por exemplo, WdfUsbTargetPipeFormatRequestForWrite
Se o driver formatou a solicitação usando WdfRequestFormatRequestUsingCurrentType ou WdfRequestWdmFormatUsingStackLocation, somente o campo IoStatus na estrutura de parâmetros de conclusão será válido.
CompletionRoutine de um driver KMDF pode ser executado em IRQL <= DISPATCH_LEVEL independentemente do ExecutionLevel especificado na estrutura WDF_OBJECT_ATTRIBUTES para o objeto de solicitação de E/S.
Exemplos
O tipo de função é declarado em Wdfrequest.h, da seguinte maneira.
typedef VOID
(EVT_WDF_REQUEST_COMPLETION_ROUTINE)(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
);
Para definir uma função de retorno de chamada CompletionRoutine chamada MyCompletionRoutine, primeiro você deve fornecer uma declaração de função que o SDV e outras ferramentas de verificação exigem, da seguinte maneira:
EVT_WDF_REQUEST_COMPLETION_ROUTINE MyCompletionRoutine;
Em seguida, implemente a função de retorno de chamada da seguinte maneira:
VOID
MyCompletionRoutine (
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
)
{...}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.0 |
Versão mínima do UMDF | 2,0 |
Cabeçalho | wdfrequest.h (inclua Wdf.h) |
IRQL | <=DISPATCH_LEVEL |