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 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
Ninguno
Observaciones
Cuando el controlador envía un IRP al controlador inferior siguiente, el controlador puede llamar a IoSkipCurrentIrpStackLocation si no tiene intención de proporcionar una rutina de IoCompletion (la dirección de la que se almacena en la estructura IO_STACK_LOCATION del controlador). Si llama a ioSkipCurrentIrpStackLocation antes de llamar a IoCallDriver, el controlador siguiente inferior recibe la misma 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 encima de él.
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 pended antes de pasarlo al siguiente controlador inferior, la marca SL_PENDING_RETURNED todavía se establece en el Control miembro 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 IO_STACK_LOCATION estructura o llamada a IoMarkIrpPending.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 2000 |
encabezado de | wdm.h |
irQL | Cualquier nivel |