Control de un IRP de System Set-Power en un controlador de filtro
Todos los controladores de filtro y cualquier controlador de función que no posee la directiva de alimentación de su pila de dispositivos simplemente deben pasar el IRP de configuración del sistema al controlador siguiente inferior, en los pasos siguientes:
Llame a IoAcquireRemoveLock, pasando el IRP actual, para asegurarse de que el controlador no recibe una solicitud de IRP_MN_REMOVE_DEVICE PnP mientras controla el IRP de energía.
Si IoAcquireRemoveLock devuelve un estado de error, el controlador no debe seguir procesando el IRP. En su lugar, a partir de Windows Vista, el controlador debe llamar a IoCompleteRequest para completar el IRP y devolver el estado de error. En Windows Server 2003, Windows XP y Windows 2000, el controlador debe llamar primero a PoStartNextPowerIrp, llamar a IoCompleteRequest para completar el IRP y, a continuación, devolver el estado de error.
Llame a PoStartNextPowerIrp para iniciar el siguiente IRP de energía. (Solo Windows Server 2003, Windows XP y Windows 2000).
Establezca la ubicación de la pila IRP (IoSkipCurrentIrpStackLocation o IoCopyCurrentIrpStackLocationToNext). El controlador puede establecer una rutina de IoCompletion en el IRP, pero hacerlo rara vez es necesario.
Llame a IoCallDriver (en Windows 7 y Windows Vista) o PoCallDriver (en Windows Server 2003, Windows XP y Windows 2000) para pasar el IRP al controlador inferior siguiente.
Llame a IoReleaseRemoveLock. Sin embargo, si el controlador establece una rutina de IoCompletion para irP, realice esta llamada desde la rutina ioCompletion en su lugar.
Devuelve STATUS_PENDING de su rutina DispatchPower .