Función IoSkipCurrentIrpStackLocation (wdm.h)
La macro IoSkipCurrentIrpStackLocation modifica el puntero de matriz IO_STACK_LOCATION del sistema, de modo que cuando el controlador actual llame al controlador siguiente inferior, ese controlador recibe la misma estructura de IO_STACK_LOCATION que recibió el controlador actual.
Sintaxis
void IoSkipCurrentIrpStackLocation(
[in, out] PIRP Irp
);
Parámetros
[in, out] Irp
Puntero al IRP.
Valor devuelto
None
Observaciones
Cuando el controlador envía un IRP al controlador inferior siguiente, el controlador puede llamar a IoSkipCurrentIrpStackLocation si no pretende proporcionar una rutina de IoCompletion (la dirección de la que se almacena en la estructura de IO_STACK_LOCATION del controlador). Si llama a IoSkipCurrentIrpStackLocation antes de llamar a IoCallDriver, el controlador siguiente inferior recibe el mismo IO_STACK_LOCATION que recibió el controlador.
Si tiene previsto proporcionar una rutina de IoCompletion para irP, el controlador debe llamar a IoCopyCurrentIrpStackLocationToNext en lugar de IoSkipCurrentIrpStackLocation. Si un controlador mal escrito comete el error de llamar a IoSkipCurrentIrpStackLocation y, a continuación, establecer una rutina de finalización, este controlador podría sobrescribir una rutina de finalización establecida por el controlador anterior.
Si el controlador ha activado un IRP, el controlador no debe llamar a IoSkipCurrentIrpStackLocation antes de pasar el IRP al siguiente controlador inferior. Si el controlador llama a IoSkipCurrentIrpStackLocation en un IRP en lápiz antes de pasarlo al siguiente controlador inferior, la marca de SL_PENDING_RETURNED todavía se establece en el miembro Control de la ubicación de pila de E/S para el siguiente controlador. Dado que el siguiente controlador posee esa ubicación de pila y podría modificarla, podría borrar la marca pendiente. Esta situación puede hacer que el sistema operativo emita una comprobación de errores o el procesamiento del IRP nunca se complete.
En su lugar, un controlador que haya activado un IRP debe llamar a IoCopyCurrentIrpStackLocationToNext para configurar una nueva ubicación de pila para el siguiente controlador inferior antes de llamar a IoCallDriver.
Si el controlador llama a IoSkipCurrentIrpStackLocation, tenga cuidado de no modificar la estructura de IO_STACK_LOCATION de una manera que pueda afectar involuntariamente al controlador inferior o al comportamiento del sistema con respecto a ese controlador. Algunos ejemplos incluyen la modificación de la unión de parámetros de la estructura de IO_STACK_LOCATION o la llamada a IoMarkIrpPending.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 2000 |
Encabezado | wdm.h |
IRQL | Cualquier nivel |