Compartir a través de


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