Partilhar via


Configurando uma extensão de dispositivo do driver de classe de armazenamento

Nas Extensões de Dispositivo de cada objeto de dispositivo criado por um driver de classe de armazenamento, esse driver fornece armazenamento para quaisquer dados determinados pelo driver que ele usa para gerenciar solicitações de E/S para o dispositivo, como o ponteiro para o PDO passado para AddDevice, o ponteiro para o objeto de dispositivo retornado por IoAttachDeviceToDeviceStack, um ponteiro de retorno para seu próprio objeto de dispositivo, e assim por diante.

A maioria dos drivers de classe de armazenamento também fornece armazenamento para as seguintes informações:

  • Um valor de tempo limite específico do tipo de dispositivo

    O driver de classe pode passar o valor de tempo limite em SRBs que ele envia para o driver de porta, que vezes SRB_FUNCTION_EXECUTE_SCSI solicitações (consulte SCSI_REQUEST_BLOCK) em nome de cada driver de classe. O driver de porta retornará um SRB com seu membro SrbStatus definido como SRB_STATUS_TIMEOUT se o intervalo entre quando o driver de porta enviar a solicitação para o driver subjacente e quando a solicitação for concluída exceder o valor de tempo limite especificado.

  • Um ponteiro para a rotina de tratamento de erros do driver de classe

    Consulte Rotinas de IoCompletion do Driver de Classe de Armazenamento para obter mais informações sobre o tratamento de erros em drivers de classe de armazenamento.

  • Uma contagem que o driver mantém de erros de protocolo de barramento no dispositivo

  • Um ponteiro para um buffer alocado por driver para dados de sensor

    Um driver de classe deve alocar memória para dados de sensor retornados do pool nãopagado alinhado ao cache. Para obter mais informações sobre como alocar memória para buffers de driver, consulte Alocando System-Space memória.

  • Um valor padrão determinado pelo driver para SrbFlags que o driver de classe define em SRBs

  • Um ponteiro para um cabeçalho de lista lookaside se o driver configurar uma lista lookaside para as SRBs alocadas

    Consulte Usando listas lookaside para obter mais informações.

  • Ponteiros para um IRP e um SRB alocados e mantidos em reserva para solicitações que devem ter êxito mesmo em condições de memória baixa, para operações de paginação, bem como operações de recuperação de erro (como aquelas executadas pela Rotina ReleaseQueue de um Driver de Classe de Armazenamento)

  • Um ponteiro para os dados STORAGE_ADAPTER_DESCRIPTOR e STORAGE_DEVICE_DESCRIPTOR que o driver de porta coletou do HBA

    Para obter informações sobre como os drivers de classe obtêm e usam esses dados, consulte Rotina GetDescriptor do Driver de Classe de Armazenamento.

  • Sinalizadores que indicam o estado PnP anterior e atual, para gerenciar transições entre estados no dispositivo

  • Um sinalizador que indica o estado de energia do dispositivo atual, para evitar trabalho extra no tratamento de solicitações de energia redundantes

  • Uma contagem de arquivos de paginação do sistema, se houver, no dispositivo, com base em solicitações de notificação de paginação recebidas pelo driver (IRP_MJ_PNP com IRP_MN_DEVICE_USAGE_NOTIFICATION)

Um driver de classe de armazenamento não pode enviar solicitações para seu dispositivo por meio do driver de porta de armazenamento sem usar o ponteiro de objeto do dispositivo que foi retornado por IoAttachDeviceToDeviceStack e armazenado na extensão do dispositivo pela rotina AddDevice do driver.