Controlar un IRP que el marco no admite
[Solo se aplica a KMDF]
El marco de trabajo no admite solicitudes de E/S que tengan los siguientes códigos IRP principales:
- IRP_MJ_CREATE_MAILSLOT
- IRP_MJ_CREATE_NAMED_PIPE
- IRP_MJ_DEVICE_CHANGE
- IRP_MJ_DIRECTORY_CONTROL
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_LOCK_CONTROL
- IRP_MJ_QUERY_EA
- IRP_MJ_QUERY_INFORMATION
- IRP_MJ_QUERY_QUOTA
- IRP_MJ_QUERY_SECURITY
- IRP_MJ_QUERY_VOLUME_INFORMATION
- IRP_MJ_SET_EA
- IRP_MJ_SET_INFORMATION
- IRP_MJ_SET_QUOTA
- IRP_MJ_SET_SECURITY
- IRP_MJ_SET_VOLUME_INFORMATION
Si el marco recibe un IRP que contiene uno de estos códigos de función de E/S, el marco no procesa el IRP. Si el controlador es un controlador de filtro, el marco pasa el IRP al controlador inferior siguiente en la pila de controladores. Si el controlador no es un controlador de filtro, el marco llama a IoCompleteRequest para completar el IRP con un valor de estado de STATUS_INVALID_DEVICE_REQUEST.
Si el controlador debe controlar irPs que contienen cualquiera de estos códigos de función de E/S, el controlador debe llamar a WdfDeviceInitAssignWdmIrpPreprocessCallback para registrar una función de devolución de llamada de eventos EvtDeviceWdmIrpPreprocess para un código de función de E/S.
Cuando el controlador recibe un IRP que contiene un código de función de E/S para el que el controlador ha registrado una función de devolución de llamada EvtDeviceWdmIrpPreprocess para, el marco pasa el IRP a la función de devolución de llamada. Después, la función de devolución de llamada debe procesar el IRP siguiendo las reglas de WDM para controlar los IRP. El controlador debe llamar a IoCompleteRequest para completar el IRP, o bien debe llamar a IoCallDriver para pasar el IRP al controlador inferior siguiente.
Para obtener un ejemplo de una función de devolución de llamada EvtDeviceWdmIrpPreprocess que controla un IRP que el marco no admite, consulte el controlador de ejemplo serie .