EVT_WDFDEVICE_WDM_IRP_DISPATCH função de retorno de chamada (wdfdevice.h)
[Aplica-se a KMDF e UMDF]
Um driver EvtDeviceWdmIrpDispatch função de retorno de chamada de evento 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 E/S IRP 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.
Valor de retorno
A função de retorno de chamada EvtDeviceWdmIrpDispatch deve:
- Retorne o valor que o método WdfDeviceWdmDispatchIrp retorna, se a função de retorno de chamada chamar esse método.
- Retorne o valor que o método WdfDeviceWdmDispatchIrpToIoQueue retornar, se a função de retorno de chamada chamar esse método.
- KMDF somente Defina o IoStatus.Status membro do IRP como STATUS_SUCCESS ou outro valor de 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.
- KMDF somenteDefina o IoStatus.Status membro do IRP como um valor de 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.
- KMDF somenteRetorne STATUS_PENDING se a função de retorno de chamada chamar IoMarkIrpPending .
Observações
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 à 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 dos dois e, em vez disso, concluir o IRP ou marcá-lo pendente.
Para registrar uma função de retorno de chamada EvtDeviceWdmIrpDispatch, o 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 chegam, consulte Expedição de IRPs para Filas de E/S.
Requisitos
Requisito | Valor |
---|---|
da 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 |