Compartir a través de


Controlar un IRP de System Query-Power en un controlador de filtro o función

Un controlador de filtro o función (que no es el propietario de la directiva de energía para un dispositivo) debe pasar un IRP de consulta del sistema al controlador inferior siguiente, en los pasos siguientes:

  1. 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 a PoStartNextPowerIrp, llamar a IoCompleteRequest para completar el IRP y devolver el estado de error.

  2. Determine si debe producir un error en la consulta. Para obtener instrucciones, consulte Error de un irP del sistema Query-Power en un controlador de filtro o función y procesamiento completo, como se describe en esa sección.

  3. Llame a PoStartNextPowerIrp. (Solo Windows Server 2003, Windows XP y Windows 2000)

  4. 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.

  5. 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.

  6. 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.

  7. Devuelve STATUS_PENDING de su rutina DispatchPower .