Partilhar via


Manipulando transferências de forma assíncrona

Exceto para drivers de nível mais alto, todos os drivers lidam com IRP_MJ_READ e IRP_MJ_WRITE solicitações de forma assíncrona. As rotinas DispatchRead e DispatchWrite em um driver de nível mais alto não podem esperar que drivers de nível inferior terminem de processar uma solicitação de leitura ou gravação assíncrona; eles devem passar essa solicitação para drivers inferiores e retornar STATUS_PENDING.

Da mesma forma, a rotina DispatchReadWrite de um driver de dispositivo de nível mais baixo deve passar a solicitação de transferência para outras rotinas de driver que processam solicitações de E/S do dispositivo e retornam STATUS_PENDING.

Às vezes, um driver de nível mais alto deve configurar IRPs de transferência parcial e passá-los para drivers inferiores. O driver de nível superior pode concluir o IRP de leitura/gravação original somente quando suas solicitações de transferência parcial tiverem sido concluídas pelos drivers inferiores.

Por exemplo, a rotina DispatchReadWrite de um driver de classe SCSI é necessária para dividir grandes solicitações de transferência que excedem os recursos de transferência do HBA subjacente em um conjunto de solicitações de transferência parcial. O driver de classe deve configurar os parâmetros em seus IRPs de transferência parcial para que os drivers de porta/miniport scsi possam atender a cada solicitação de transferência parcial em uma única operação de DMA.

Outros drivers de dispositivo que usam DMA ou PIO também podem precisar dividir grandes solicitações de transferência para si mesmos.

Para obter mais informações sobre como usar DMA e PIO, consulte Técnicas de entrada/saída.