Diretrizes para escrever rotinas de retorno de chamada de notificação PnP
O gerenciador PnP chama rotinas de retorno de chamada de notificação em IRQL = PASSIVE_LEVEL.
Para garantir uma operação suave do subsistema PnP, uma rotina de retorno de chamada de notificação PnP deve seguir estas diretrizes:
Uma rotina de retorno de chamada de notificação não deve ser bloqueada.
Uma rotina de retorno de chamada de notificação não deve chamar ou fazer uma chamada para rotinas síncronas que geram eventos PnP ou qualquer rotina que bloqueie a espera pela instalação ou remoção do dispositivo.
Chamar essas rotinas durante um retorno de chamada de notificação pode causar um deadlock do sistema.
Por exemplo, um driver não deve chamar IoReportTargetDeviceChange em uma rotina de retorno de chamada de notificação. Chame IoReportTargetDeviceChangeAsynchronous .
Uma rotina de retorno de chamada de notificação deve retornar êxito para qualquer evento que não falhe explicitamente.
Quando um driver se registra para notificação em uma categoria de evento, o gerenciador PnP notifica o driver de todos os eventos nessa categoria, presentes e futuros. Se um driver retornar um erro status para eventos que não manipula, o driver corre o risco de falhar em um novo evento de consulta por engano.
Um driver retorna corretamente um erro status quando, por exemplo, o driver falha em uma notificação de consulta para vetar o evento que está sendo proposto.
Uma rotina de retorno de chamada de notificação deve ser paginada.