Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Qualquer driver de nível superior pode ter uma rotina StartIo . No entanto, é improvável que esse driver seja interoperável com drivers de nível inferior existentes e provavelmente apresentará características de desempenho ruins.
Uma rotina StartIo em um driver de nível superior tem os seguintes efeitos:
Os IRPs de entrada podem ser enfileirados chamando IoStartPacket nas rotinas de DespachoXxx do driver e IoStartNextPacket nas suas rotinas IoCompletion, fazendo com que os IRPs sejam processados um de cada vez por meio da rotina StartIo.
A taxa de transferência de E/S do driver pode se tornar visivelmente mais lenta durante períodos de alta demanda de E/S, porque a rotina StartIo pode representar um gargalo.
A rotina StartIo do driver chama IoCallDriver com cada IRP em IRQL = DISPATCH_LEVEL, fazendo com que todas as rotinas de despacho dos drivers de nível inferior também sejam executadas em IRQL = DISPATCH_LEVEL. Isso restringe o conjunto de rotinas de suporte que os drivers inferiores podem chamar em suas rotinas de despacho. Como a maioria dos desenvolvedores de drivers pressupõe que as rotinas de despacho de seus drivers sejam executadas no IRQL < DISPATCH_LEVEL, é improvável que um 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 expedição 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 em que 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 , pois pode reduzir o processamento de 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 apenas envia IRPs para drivers de nível inferior a partir de suas rotinas de expedição e realiza o processamento necessário em suas rotinas IoCompletion.
No entanto, 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 os IRPs associados 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.