Visão geral da espera/ativação da conclusão do IRP
Um IRP de espera/ativação é concluído quando um sinal de ativação chega. O sinal de ativação é específico do dispositivo, mas geralmente é um evento de serviço normal para o dispositivo. Por exemplo, um anel de entrada pode fazer com que um modem de suspensão desperte.
A figura a seguir mostra as etapas para concluir um IRP de espera/ativação.
Quando o sinal ocorre, o controle entra novamente no motorista do ônibus no ponto em que o ônibus detecta que o dispositivo despertou. O motorista do barramento atende o evento conforme necessário e chama IoCompleteRequest para concluir a IRP_MN_WAIT_WAKE IRP para seu PDO.
Em seguida, o gerente de E/S chama a rotina IoCompletion definida pelo driver mais próximo na pilha do dispositivo. Na rotina IoCompletion , esse driver atende ao sinal de ativação conforme necessário e chama IoCompleteRequest para concluir o IRP. O gerente de E/S continua a chamar rotinas de IoCompletion trabalhando de volta na pilha do dispositivo até que todos os drivers tenham concluído o IRP.
Em sua rotina de IoCompletion , qualquer driver que enumera mais de um dispositivo filho (cria mais de um PDO) e recebeu solicitações de espera/ativação de mais de um desses dispositivos deve enviar a si mesmo um IRP de espera/ativação para se armar novamente para espera/ativação em outro filho. Para obter detalhes, consulte Noções básicas sobre o caminho dos IRPs de espera/ativação por meio de uma árvore de dispositivos.
Depois de chamar rotinas de IoCompletion definidas por drivers quando eles passaram o IRP para baixo na pilha, o gerenciador de E/S invoca a rotina de retorno de chamada definida pelo proprietário da política de energia quando solicita o IRP de espera/ativação. Na rotina de retorno de chamada, o proprietário da política deve retornar seu dispositivo ao estado de trabalho e concluir um IRP de espera/ativação pendente para o PDO de seu filho, se houver.
Concluir o IRP da criança faz com que o gerente de E/S chame rotinas de IoCompletion definidas por drivers na pilha de dispositivos da criança e assim por diante. Eventualmente, o proprietário da política que iniciou o IRP de espera/ativação original no devnode determina que seu dispositivo afirmou o sinal de ativação, e todos os IRPs de espera/ativação pendentes serão concluídos.