Uso de buffers de mapeamento no modelo de E/S do Storport
No modelo de E/S da Porta SCSI, os drivers de miniporto podem exigir que o driver de porta aloque e mapeie a memória virtual do sistema para buffers de E/S de SRB. Os drivers de miniporta configuram o driver de porta para mapear buffers de E/S definindo o membro MapBuffers da estrutura de PORT_CONFIGURATION_INFORMATION (SCSI) como TRUE.
Se o driver de porta estiver configurado com MapBuffers definido como TRUE, o membro DataBuffer de cada SRB recebido pelo driver de miniporto conterá um endereço virtual do sistema de um buffer de E/S. Esse endereço é válido no espaço de endereço de todos os processos no sistema. Além disso, o driver de miniporta será livre para acessar diretamente o buffer de E/S.
Por outro lado, se o driver de miniporto definir MapBuffers como FALSE, o DataBuffer conterá um endereço virtual que pertence a um processo específico que não é necessariamente válido no contexto em que o driver de miniporto é executado. Portanto, o driver de miniporto não poderá acessar a área de memória à qual o DataBuffer aponta.
No modelo de E/S do Storport, os drivers de miniporto são necessários para dar suporte à E/S baseada em DMA. Quando o DMA é usado, não deve haver necessidade de drivers de miniporta acessarem os buffers de E/S de um SRB indiretamente por meio de um endereço virtual em todo o sistema. Com isso em exibição, o modelo de E/S do Storport define um conjunto diferente de valores para o membro mapBuffers de PORT_CONFIGURATION_INFORMATION (STORPORT).
Valor | Significado |
---|---|
STOR_MAP_NO_BUFFERS |
O driver storport não mapeia buffers de dados para nenhum tipo de SRB. Portanto, seus drivers de miniporto não devem acessar diretamente os dados apontados pelo membro DataBuffer em qualquer uma das SRBs recebidas. |
STOR_MAP_ALL_BUFFERS |
Este recurso não está implementado no momento. Se o membro MapBuffers receber esse valor, o driver storport o interpretará como se estivesse STOR_MAP_NON_READ_WRITE_BUFFERS. |
STOR_MAP_NON_READ_WRITE_BUFFERS |
O driver do Storport mapeia os buffers de dados para a solicitação, desde que não seja uma solicitação de transferência de dados (leitura e gravação). Da mesma forma, os drivers de miniporto podem acessar dados no SRB, desde que o SRB não pertença a uma solicitação de leitura ou gravação. |