Directrices para escribir rutinas de devolución de llamada de notificación PnP
El administrador de PnP llama a rutinas de devolución de llamada de notificación en IRQL = PASSIVE_LEVEL.
Para garantizar un funcionamiento sin problemas del subsistema PnP, una rutina de devolución de llamada de notificación PnP debe seguir estas directrices:
Una rutina de devolución de llamada de notificación no debe bloquearse.
Una rutina de devolución de llamada de notificación no debe llamar a ni provocar una llamada a rutinas sincrónicas que generen eventos PnP o cualquier rutina que bloquee la espera de la instalación o eliminación del dispositivo.
Llamar a estas rutinas durante una devolución de llamada de notificación puede provocar un interbloqueo del sistema.
Por ejemplo, un controlador no debe llamar a IoReportTargetDeviceChange en una rutina de devolución de llamada de notificación. Llame a IoReportTargetDeviceChangeAsynchronous en su lugar.
Una rutina de devolución de llamada de notificación debe devolver el éxito de los eventos que no produce un error explícito.
Cuando un controlador se registra para recibir notificaciones en una categoría de eventos, el administrador de PnP notifica al controlador de todos los eventos de esa categoría, presentes y futuros. Si un controlador devuelve un estado de error para los eventos que no controla, el controlador corre el riesgo de que se produzca un error en un nuevo evento de consulta.
Un controlador devuelve correctamente un estado de error cuando, por ejemplo, el controlador produce un error en una notificación de consulta para vetar el evento que se está proponiendo.
Una rutina de devolución de llamada de notificación debe tener código paginado.