Rotina GetDescriptor do Driver de Classe de Armazenamento
Para operações de transferência de dados, os drivers de classe de armazenamento precisam de informações de configuração sobre cada HBA que conduz um ônibus ao qual seus dispositivos estão anexados. Para obter essas informações, um driver de classe chama uma rotina GetDescriptor interna ou implementa a mesma funcionalidade em sua rotina StartDevice . (Para obter informações sobre StartDevice, consulte Handling PnP Start in a Storage Class Driver.)
Uma rotina GetDescriptor compila e configura solicitações de propriedade de consulta (IRP_MJ_DEVICE_CONTROL com IOCTL_STORAGE_QUERY_PROPERTY) para que o driver de porta recupere descritores de dispositivo e adaptador que o driver de classe armazena em sua extensão de dispositivo. O driver de classe também pode definir sinalizadores determinados pelo driver/gravador na extensão do dispositivo de acordo com os dados do descritor retornados.
O driver de classe inspeciona os dados retornados STORAGE_DEVICE_DESCRIPTOR para determinar as funcionalidades do dispositivo (dados de consulta SCSI ou o equivalente não SCSI), como o tipo de dispositivo SCSI, se a mídia do dispositivo (se houver) é removível (RemovableMedia), se o dispositivo dá suporte a vários comandos pendentes (CommandQueueing) e várias cadeias de caracteres de ID. O driver de classe inspeciona os dados de STORAGE_ADAPTER_DESCRIPTOR retornados para determinar as funcionalidades do adaptador, incluindo:
O número máximo de bytes que um determinado HBA pode transferir em uma única operação (MaximumTransferLength).
Se o HBA puder transferir dados armazenados em buffer apoiados por páginas físicas não contíguas (em outras palavras, se ele oferecer suporte a dispersão/coleta), quantas páginas físicas não contíguas por buffer ele pode gerenciar, por operação de transferência (MaximumPhysicalPages).
Os requisitos de alinhamento do HBA para transferências para que o driver de classe possa definir corretamente o campo AlignmentRequirement em seus objetos de dispositivo (AlignmentMask).
Os aplicativos que enviam solicitações IOCTL_SCSI_PASS_THROUGH também podem usar esse campo.
Para obter mais informações sobre como configurar AlignmentRequirement em objetos de dispositivo, consulte Inicializando um objeto device.
Se o HBA dá suporte ao enfileiramento marcado por SCSI e/ou a filas internas por unidade lógica (CommandQueueing).
Se o HBA dá suporte a transferências síncronas (AcceleratedTransfer).
Se o HBA armazena dados em cache internamente (CachesData).
O driver de classe deve armazenar essas informações na extensão de dispositivo do FDO para que suas rotinas de expedição possam garantir que todas as solicitações enviadas ao driver da porta de armazenamento estejam em conformidade com o tamanho, o número de quebras físicas e os requisitos de alinhamento do HBA subjacente. Para obter mais informações sobre rotinas de expedição de driver de classe, consulte Rotinas de expedição do driver de classe de armazenamento. Para obter mais informações sobre como configurar extensões de dispositivo, consulte Configurando uma extensão de dispositivo do driver de classe de armazenamento.