Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Qualquer motorista de nível superior pode ter uma rotina StartIo . No entanto, é pouco provável que esse condutor seja interoperável com os condutores de nível inferior existentes e é provável que apresente características de desempenho deficientes.
Uma rotina StartIo em um driver de nível superior tem os seguintes efeitos:
Os IRPs de entrada podem ser enfileirados chamando IoStartPacket da(s) rotina(s) DispatchXxx do driver e IoStartNextPacket de suas rotinas IoCompletion, fazendo com que os IRPs sejam processados um de cada vez através da rotina StartIo.
A taxa de transferência de E/S do controlador pode tornar-se visivelmente mais lenta durante períodos de grande demanda de E/S, porque a sua rotina StartIo pode tornar-se um gargalo.
A rotina StartIo do motorista chama IoCallDriver com cada IRP em IRQL = DISPATCH_LEVEL, fazendo com que todas as rotinas de despacho de drivers de nível inferior também sejam executadas em IRQL = DISPATCH_LEVEL. Isso restringe o conjunto de rotinas de suporte que os motoristas mais baixos podem chamar em suas rotinas de despacho. Como a maioria dos desenvolvedores de drivers assume que as rotinas de despacho dos drivers são executadas no IRQL < DISPATCH_LEVEL, é improvável que o driver de nível superior seja interoperável com muitos drivers de nível inferior existentes.
A rotina StartIo reduz a taxa de transferência geral do sistema porque ela e as rotinas de despacho de todos os drivers de nível inferior em sua cadeia são executadas em IRQL = DISPATCH_LEVEL.
Para obter mais informações sobre os IRQLs nos quais as rotinas de driver padrão são executadas, consulte Gerenciando prioridades de hardware.
Nenhum dos drivers de nível superior fornecidos pelo sistema tem uma rotina StartIo , porque pode retardar o processamento IRP para o próprio driver, para todos os drivers acima e abaixo dele, e para o sistema em geral.
A maioria dos drivers de nível superior simplesmente envia IRPs para drivers de nível inferior a partir das suas rotinas de despacho e realiza todo o processamento de limpeza necessário nas suas rotinas IoCompletion.
No entanto, os drivers de nível superior podem configurar filas internas para IRPs que solicitam tipos específicos de operações ou configurar filas internas para manter IRPs vinculados a um conjunto de dispositivos subjacentes heterogêneos, como o driver de porta SCSI. Para obter mais informações, consulte Enfileiramento e Desenfileiramento de IRPs.