Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para a maioria dos sistemas, a hierarquia física dos dispositivos em um computador determina a ordem na qual o Windows e o gerenciador PnP carregam os drivers. Windows e o gerenciador PnP configuram dispositivos começando com o dispositivo raiz do sistema e configuram os dispositivos filho do dispositivo raiz (por exemplo, um adaptador PCI), os filhos desses dispositivos e assim por diante. O gerenciador PnP carrega os drivers para cada dispositivo conforme o dispositivo é configurado, se os drivers não tiverem sido carregados anteriormente para outro dispositivo.
As configurações no arquivo INF podem influenciar a ordem de carregamento do driver. Este tópico descreve os valores relevantes que os fornecedores devem especificar na service-install-section referenciada pela diretiva INF AddService de um driver. Especificamente, este tópico discute as entradas StartType, BootFlags, LoadOrderGroup e Dependencies .
Os drivers devem seguir estas regras para especificar StartType:
Driver PnP não é necessário no início da inicialização
Um driver PnP deve ter um tipo inicial de SERVICE_DEMAND_START (0x3), especificando que o gerenciador PnP pode carregar o driver quando o gerenciador PnP encontrar um dispositivo ao qual o driver atende.
Driver necessário para um dispositivo para iniciar o computador
Se um dispositivo for necessário para iniciar o computador, os drivers do dispositivo deverão ter um tipo de inicialização SERVICE_BOOT_START (0x0).
Driver não de inicialização que detecta dispositivos que não são enumeráveis por PnP
Para um dispositivo que não é PnP-enumerável, um driver relata o dispositivo ao gerenciador PnP chamando IoReportRootDevice ou IoReportDetectedDevice. Esse driver deve ter o tipo de inicialização SERVICE_SYSTEM_START (0x01) para que Windows carregue o driver durante a inicialização do sistema.
Somente os drivers que relatam hardware não PnP devem definir esse tipo de inicialização. Se um driver dá suporte a dispositivos PnP e não PnP, ele deve definir esse tipo de inicialização.
Driver não PnP que deve ser iniciado pelo gerenciador de controle de serviço
Esse driver deve ter o tipo inicial SERVICE_AUTO_START (0x02). Os drivers PnP não devem definir esse tipo de inicialização.
Um driver PnP deve ser escrito para que possa ser carregado quando Windows configurar um dispositivo que o driver atende. Por outro lado, um driver deve ser capaz de ser descarregado sempre que o gerenciador PnP determinar que não há mais dispositivos presentes que o driver atende. As únicas ordens de carregamento de drivers das quais os drivers PnP devem depender são as seguintes:
Os drivers de um dispositivo filho podem depender do fato de que os drivers do dispositivo pai são carregados.
Um driver na pilha de dispositivos pode depender do fato de que todos os drivers abaixo dele são carregados.
Por exemplo, o driver de função pode ter certeza de que todos os drivers de filtro inferior são carregados.
No entanto, lembre-se de que um driver na pilha do dispositivo não pode depender de ser carregado sequencialmente após os drivers inferiores de um dispositivo, pois o driver pode ter sido carregado anteriormente quando outro dispositivo foi configurado.
Os drivers de filtro em um grupo de filtros não podem prever sua ordenação de carga. Por exemplo, se um dispositivo tiver três drivers de filtro superior registrados, todos esses três drivers serão carregados após o driver de função, mas poderão ser carregados em qualquer ordem dentro de seu grupo de filtro superior.
Se um driver tiver uma dependência de ordem de carga explícita em outro driver, essa dependência deverá ser implementada por meio de uma relação pai/filho. Um driver para um dispositivo filho pode depender dos drivers do dispositivo pai serem carregados antes que os drivers filho sejam carregados.
Para reforçar a importância de definir o valor de StartType correto, a lista a seguir descreve como Windows e o gerenciador PnP usam as entradas StartType em arquivos INF:
Na inicialização do sistema, o carregador do sistema operacional carrega drivers do tipo SERVICE_BOOT_START antes de transferir o controle para o kernel. Esses drivers estão na memória quando o kernel obtém o controle.
Os drivers de inicialização são carregados antes que a maioria dos dispositivos seja configurada, portanto, sua ordem de carga não pode ser determinada pela hierarquia do dispositivo. Os drivers de inicialização do boot podem usar entradas INF LoadOrderGroup para ordenar o carregamento. O sistema operacional ignora entradas INF Dependencies para drivers de inicialização.
O gerenciador PnP chama as rotinas de DriverEntry dos drivers de SERVICE_BOOT_START para que os drivers possam dar suporte aos dispositivos de inicialização.
Se um dispositivo de inicialização tiver dispositivos filho, esses dispositivos serão enumerados. Os dispositivos filho são configurados e iniciados se os drivers deles também forem drivers de inicialização. Se os drivers de um dispositivo não forem todos drivers de inicialização, o gerenciador PnP criará um nó de dispositivo (devnode) para o dispositivo, mas ainda não iniciará o dispositivo.
Depois que todos os drivers de inicialização tiverem sido carregados e os dispositivos de inicialização forem iniciados, o gerenciador PnP configurará o restante dos dispositivos PnP e carregará seus drivers.
O gerenciador PnP percorre a árvore de dispositivos e carrega os drivers para os devnodes que ainda não foram iniciados (ou seja, quaisquer devnodes não iniciados da etapa anterior). À medida que cada dispositivo é iniciado, o gerenciador PnP enumera os filhos do dispositivo, se houver.
À medida que configura esses dispositivos, o gerenciador PnP carrega os drivers para os dispositivos, independentemente dos valores StartType dos drivers (exceto quando StartType é SERVICE_DISABLED) antes de continuar a iniciar os dispositivos. Muitos desses motoristas são SERVICE_DEMAND_START motoristas.
O gerenciador PnP ignora as entradas do registro que foram criadas como resultado de entradas INF Dependencies e entradas LoadOrderGroup para drivers que ele carrega nesta etapa. A ordem de carregamento é baseada na hierarquia do dispositivo físico.
No final desta etapa, todos os dispositivos são configurados, exceto os dispositivos que não são pnP-enumeráveis e os descendentes desses dispositivos. (Os descendentes podem ou não ser PnP-enumeráveis.)
O gerenciador PnP carrega drivers do StartType SERVICE_SYSTEM_START que ainda não foram carregados.
Esses drivers detectam e relatam seus dispositivos não PnP. O gerenciador PnP processa entradas de registro que são o resultado de entradas INF LoadOrderGroup para esses drivers. Ele ignora as entradas do Registro que foram criadas devido a entradas INF de Dependencies para esses drivers.
O gerenciador de controle de serviço carrega drivers do StartType SERVICE_AUTO_START que ainda não foram carregados.
O gerenciador de controle de serviço processa as informações do banco de dados de serviço em relação a DependOnGroup e DependOnServices dos serviços. Essas informações são de entradas Dependencies em entradas INF AddService. Lembre-se de que as informações de Dependências só são processadas para drivers não PnP porque todos os drivers PnP necessários foram carregados em uma etapa anterior da inicialização do sistema. O gerenciador de controle de serviço ignora as informações INF LoadOrderGroup.
Consulte a documentação do SDK do Microsoft Windows para obter mais informações sobre o gerenciador de controle de serviço.
Usando BootFlags para promover um StartType de driver na inicialização, dependendo do cenário de inicialização
O sistema operacional pode promover o StartType de um driver para ser um driver de inicialização, dependendo do valor bootFlags especificado no INF do driver. Você pode especificar um ou mais (ORed) dos seguintes valores numéricos no arquivo INF, expressos como um valor hexadecimal:
- Se um driver deve ser promovido para ser um driver de inicialização de boot na inicialização de rede, especifique 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD).
- Se um driver deve ser promovido ao inicializar a partir de um VHD, especifique 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD)
- Se um driver deve ser promovido ao inicializar a partir de um disco USB, especifique 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD).
- Se um driver deve ser promovido ao inicializar a partir do armazenamento SD, especifique 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD)
- Se um driver deve ser promovido ao inicializar a partir de um disco em um controlador USB 3.0, especifique 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD).
- Se um driver deve ser promovido durante a inicialização com a inicialização medida habilitada, especifique 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD).
- Se um driver deve ser promovido durante a inicialização com a inicialização do verificador habilitada, especifique 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD).
- Se um driver deve ser carregado na inicialização do WinPE, especifique 0x80 (CM_SERVICE_WINPE_BOOT_LOAD).
Para obter mais informações sobre como promover o StartType de um driver na inicialização, dependendo do cenário de inicialização, consulte a diretiva INF AddService.