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.
Exceto para controladores de sistema de arquivos, um controlador de nível superior geralmente não tem filas internas para IRPs. A rotina DispatchReadWrite deste driver pode passar IRPs com parâmetros válidos para drivers inferiores, possivelmente depois de configurar a sua própria rotina IoCompletion, conforme descrito em Encaminhar IRPs na Pilha de Drivers.
No entanto, a rotina DispatchReadWrite de um driver de classe SCSI é responsável por dividir grandes solicitações de transferência, se necessário, antes de enviar um IRP com o código de função principal IRP_MJ_READ ou IRP_MJ_WRITE para o par de driver de porta SCSI/miniporta. Para obter mais informações, consulte Rotina SplitTransferRequest do driver de classe de armazenamento.
Se um driver de nível superior aloca um ou mais IRPs, que ele configura para o próximo driver inferior em sua rotina DispatchReadWrite , para solicitar algum número de transferências parciais, a rotina DispatchReadWrite deve chamar IoSetCompletionRoutine com cada IRP alocado pelo driver. O driver deve registrar sua rotina IoCompletion para rastrear quantos dados são transferidos em cada operação de transferência parcial para que a rotina IoCompletion possa liberar todos os IRPs alocados pelo driver e, eventualmente, concluir a solicitação original.
Se o driver subjacente controla um dispositivo de mídia removível, todos os IRPs alocados pelo driver de nível mais elevado devem ter um contexto de thread. Para configurar um contexto de thread, o driver que aloca deve definir o campo Irp-Tail.Overlay>.Thread em cada novo IRP alocado, utilizando o mesmo valor do IRP de transferência recebido. Para obter mais informações, consulte Suporte de suportes amovíveis.
Se o driver de dispositivo subjacente retornar um IRP para uma transferência parcial com um erro, a rotina IoCompletion poderá repetir a solicitação de transferência parcial ou concluir o IRP original com seu bloco de status de E/S definido com o erro retornado, depois de liberar quaisquer IRPs e memória que o driver de nível superior alocou.
Se a rotina DispatchReadWrite de um driver de nível superior aloca memória para operações de transferência parcial e sua alocação será acessada pela rotina IoCompletion do driver (ou pelo driver de dispositivo subjacente), a rotina DispatchReadWrite deverá alocar essa memória do pool não paginado.