Partilhar via


Manipulando a inicialização de PnP em um driver de classe de armazenamento

Um driver de classe de armazenamento executa a inicialização específica do dispositivo quando o gerenciador PnP chama a rotina DispatchPnP do driver de classe com uma solicitação inicial (IRP_MJ_PNP com IRP_MN_START_DEVICE). A rotina DispatchPnP do driver de classe de armazenamento chama uma rotina interna StartDevice ou implementa a mesma funcionalidade embutida. Como as solicitações de início enviadas a um FDO devem ser manipuladas primeiro pelo driver mais baixo da pilha, a rotina DispatchPnPp do driver de classe de armazenamento encaminha a solicitação para o driver mais baixo com IoCallDriver antes de chamar StartDevice. Se a solicitação foi enviada para um PDO, o driver não precisa encaminhar a solicitação antes de lidar com ela.

A rotina interna startDevice de um driver de classe de armazenamento configura a extensão do dispositivo de seu FDO com dados determinados pelo driver para gerenciar solicitações de E/S para o dispositivo. Para obter mais informações, consulte Configurando uma extensão de dispositivo do driver de classe de armazenamento.

Uma rotina StartDevice deve habilitar todas as interfaces de dispositivo que o driver registrou em sua rotina AddDevice . (Consulte Classes de interface do dispositivo.) Ele também pode criar um link simbólico para seu objeto de dispositivo.

Após a conclusão do início do dispositivo inferior, o driver pode assumir que o dispositivo está no estado de energia D0 (totalmente ativado e operacional) para a maioria das finalidades. Se o dispositivo não estiver completamente ligado, o driver de porta fará fila de solicitações até que o dispositivo esteja pronto. No entanto, se a rotina StartDevice do driver precisar executar quaisquer operações que exijam inrush atual , por exemplo, para criar uma unidade de disco , o driver deverá enviar uma solicitação de energia D0 para o driver mais baixo antes de executar a operação.

Um driver de um dispositivo do tipo FILE_DEVICE_DISK ou FILE_DEVICE_MASS_STORAGE pode se registrar para detecção ociosa e usar os tempos limite de política de energia padrão para a classe de dispositivo especificando valores de tempo limite de conservação e desempenho de -1 em sua chamada PoRegisterDeviceforIdleDetection .

Para obter mais informações sobre a rotina DispatchPnP de um driver de classe de armazenamento, consulte Manipulando solicitações PnP para periféricos de armazenamento. Para obter mais informações sobre como lidar com solicitações de início PnP, consulte Iniciando um dispositivo.