Introdução aos drivers de classe de armazenamento
Um driver de classe de armazenamento usa a interface de classe/porta SCSI bem estabelecida para controlar um dispositivo de armazenamento em massa de seu tipo em qualquer barramento para o qual o sistema fornece um driver de porta de armazenamento (atualmente SCSI, IDE, USB e IEEE 1394). O barramento específico ao qual um dispositivo de armazenamento está conectado é transparente para o driver de classe de armazenamento.
Qualquer driver de classe de armazenamento lida com solicitações de E/S de aplicativos de usuário ou drivers de nível superior criando SRBs ( blocos de solicitação) scsi contendo blocos de descritor de comando (CDBs) e enviando-os, por meio de quaisquer drivers de filtro intermediários, para o driver de porta de armazenamento subjacente.
Um driver de classe de armazenamento não fornece informações de endereçamento no SRB. Em vez disso, o driver de porta (ou um driver ainda inferior) é responsável por qualquer endereçamento necessário. O driver da porta de armazenamento converte as SRBs no formato exigido pelo HBA (adaptador de barramento de host) subjacente, que pode ser um adaptador de barramento de host SCSI ou 1394, controlador IDE ou outro hardware e emite comandos para o dispositivo. No WDK (Windows Driver Kit), o termo "HBA" significa qualquer adaptador ou controlador subjacente.
Para o gerenciador de E/S e quaisquer drivers de nível superior em camadas acima de um driver de classe de armazenamento, a maioria dos drivers de classe de armazenamento são drivers intermediários no modo kernel padrão. Portanto, cada driver de classe deve ter uma rotina DriverEntry, uma rotina AddDevice, uma rotina Unload, uma ou mais rotinas IoCompletion, além de rotinas DispatchPnP e DispatchPower para lidar com Plug and Play e ligar IRPs.
Um driver de classe de armazenamento também deve ter uma rotina DispatchSystemControl para lidar com IRPs de controle do sistema e pode ter qualquer outra rotina de driver de nível superior padrão, como uma rotina StartIo , conforme determinado pelo designer de driver. Para obter mais informações sobre o controle do sistema e as rotinas de driver padrão do modo kernel, consulte Rotinas de driver padrão.
Para o gerenciador PnP, um driver de classe de armazenamento é um Drivers de Função, ou seja, um que conduz um dispositivo individual. Um driver de classe de armazenamento também pode atuar como um Motorista de Barramento, enumerando dispositivos filho de seus dispositivos. Por exemplo, o driver de classe para um dispositivo de mídia particionado, como um disco, retorna uma lista de PDOs que representam suas partições. Cada PDO pode ser tratado como um dispositivo de destino e ser atendido por seu próprio driver de classe.
Observação
Um driver para um dispositivo SCSI, como uma impressora ou um scanner, deve ser implementado conforme descrito nesta seção. Um driver para esse dispositivo SCSI utiliza a mesma interface de classe/porta SCSI para controlar seu dispositivo e tem as mesmas responsabilidades de lidar com IRPs, criar SRBs e enviá-los para o driver de porta subjacente, assim como um driver para um dispositivo de armazenamento.