EVT_WDFDEVICE_WDM_IRP_DISPATCH função de retorno de chamada (wdfdevice.h)
[Aplica-se a KMDF e UMDF]
A função de retorno de chamada de evento EvtDeviceWdmIrpDispatch de um driver recebe um IRP antes que a estrutura processe o IRP.
Sintaxe
EVT_WDFDEVICE_WDM_IRP_DISPATCH EvtWdfdeviceWdmIrpDispatch;
NTSTATUS EvtWdfdeviceWdmIrpDispatch(
[in] WDFDEVICE Device,
[in] UCHAR MajorFunction,
[in] UCHAR MinorFunction,
[in] ULONG Code,
[in] WDFCONTEXT DriverContext,
[in, out] PIRP Irp,
[in] WDFCONTEXT DispatchContext
)
{...}
Parâmetros
[in] Device
Um identificador para um objeto de dispositivo de estrutura.
[in] MajorFunction
Um dos principais códigos de função IRP definidos em wdm.h.
[in] MinorFunction
Um dos códigos de função secundária de IRP de E/S definidos em wdm.h para o código MajorFunction .
[in] Code
Especifica um valor de código de controle de E/S. Esse parâmetro será válido somente se MajorFunction estiver definido como IRP_MJ_DEVICE_CONTROL.
[in] DriverContext
Um ponteiro não tipado para informações de contexto definidas pelo driver que o driver forneceu quando chamou WdfDeviceConfigureWdmIrpDispatchCallback.
[in, out] Irp
Um ponteiro para uma estrutura IRP.
[in] DispatchContext
Um ponteiro não tipado para as informações de contexto de expedição da estrutura. O driver deve fornecer esse parâmetro quando chama WdfDeviceWdmDispatchIrp.
Retornar valor
A função de retorno de chamada EvtDeviceWdmIrpDispatch deve:
- Retornará o valor retornado pelo método WdfDeviceWdmDispatchIrp se a função de retorno de chamada chamar esse método.
- Retornará o valor retornado pelo método WdfDeviceWdmDispatchIrpToIoQueue se a função de retorno de chamada chamar esse método.
- Somente KMDF Defina o membro IoStatus.Status do IRP como STATUS_SUCCESS ou outro valor status para o qual NT_SUCCESS(status) é igual a TRUE e retorne o mesmo valor (depois de chamar IoCompleteRequest) se a função de retorno de chamada concluir com êxito o IRP recebido.
- Somente KMDFDefina o membro IoStatus.Status do IRP como um valor status para o qual NT_SUCCESS(status) é igual a FALSE e retorne o mesmo valor (depois de chamar IoCompleteRequest) se a função de retorno de chamada detectar um erro.
- Somente KMDFRetornar STATUS_PENDING se a função de retorno de chamada chamar IoMarkIrpPending.
Comentários
A função de retorno de chamada EvtDeviceWdmIrpDispatch só deve ser usada para selecionar uma fila específica para um IRP. Para fazer isso, o driver chama o método WdfDeviceWdmDispatchIrpToIoQueue de dentro da função de retorno de chamada.
Se, depois de examinar um IRP nessa função de retorno de chamada, o driver não souber como expedir o IRP, o driver poderá chamar WdfDeviceWdmDispatchIrp para retornar o IRP para a estrutura para tratamento padrão.
Um driver UMDF deve chamar WdfDeviceWdmDispatchIrp ou WdfDeviceWdmDispatchIrpToIoQueue dessa função de retorno de chamada. Um driver KMDF tem a opção adicional de chamar nenhum deles e, em vez disso, concluir o IRP ou marcá-lo pendente.
Para registrar uma função de retorno de chamada EvtDeviceWdmIrpDispatch , seu driver deve chamar WdfDeviceConfigureWdmIrpDispatchCallback.
Em sua função de retorno de chamada EvtDeviceWdmIrpDispatch , um driver não deve definir uma rotina de conclusão. Se uma rotina de conclusão for necessária, um driver KMDF poderá fornecer uma função de retorno de chamada EvtDeviceWdmIrpPreprocess em vez de EvtDeviceWdmIrpDispatch.
Para obter mais informações sobre como especificar filas para IRPs à medida que elas chegam, consulte Expedindo IRPs para filas de E/S.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.11 |
Versão mínima do UMDF | 2.17 |
Cabeçalho | wdfdevice.h (inclua Wdf.h) |
IRQL | <=DISPATCH_LEVEL |