Ordem de carregamento do filtro do sistema de arquivos
O sistema operacional Windows carrega drivers de filtro do sistema de arquivos com base em:
- O tipo de inicialização do driver, em que cada tipo de inicialização representa as fases de inicialização de um sistema.
- Os grupos de ordem de carregamento para drivers de filtro do sistema de arquivos que são carregados na inicialização do sistema. Os drivers de minifiltro precisam do conceito de grupos de ordem de carregamento para interoperabilidade com drivers de filtro do sistema de arquivos herdado. Um driver de minifiltro pode ser carregado a qualquer momento.
É necessário entender os tipos de inicialização de driver e os grupos de ordem de carregamento antes de explorar quando e como os drivers de filtro do sistema de arquivos são carregados durante a sequência de inicialização do sistema.
Tipos de inicialização do driver
O tipo de inicialização de um driver no modo kernel especifica se o driver deve ser carregado durante ou após a inicialização do sistema. Existem cinco tipos de inicialização possíveis:
Tipo de Inicialização | Descrição |
---|---|
SERVICE_BOOT_START (0x00000000) | Indica um driver do dispositivo iniciado pelo carregador do sistema operacional (SO). Os drivers de filtro do sistema de arquivos geralmente usam esse tipo de inicialização ou SERVICE_DEMAND_START. Os filtros do sistema de arquivos herdado devem usar esse tipo de inicialização. Para obter mais informações, consulte grupos de ordem de carregamento de filtro do sistema de arquivos. |
SERVICE_SYSTEM_START (0x00000001) | Indica que um driver foi inicializado durante a inicialização do SO. Esse tipo de inicialização é usado pelo reconhecedor do sistema de arquivos. Exceto para os sistemas de arquivos listados em "SERVICE_DISABLED", os sistemas de arquivos (incluindo componentes do sistema de arquivos de rede) geralmente usam esse tipo de inicialização ou SERVICE_DEMAND_START. Esse tipo de inicialização também é usado por drivers de dispositivo para dispositivos PnP que são enumerados durante a inicialização do sistema, mas não são necessários para carregar o sistema. |
SERVICE_AUTO_START (0x00000002) | Indica um driver inicializado pelo Gerenciador de Controle de Serviços durante a inicialização do sistema. Raramente usado. |
SERVICE_DEMAND_START (0x00000003) | Indica um driver inicializado sob demanda, pelo Gerenciador PnP (para drivers de dispositivo) ou pelo Gerenciador de Controle de Serviços (para sistemas de arquivos e drivers de filtro do sistema de arquivos). |
SERVICE_DISABLED (0x00000004) | Indica um driver que não é inicializado pelo carregador do SO, pelo Gerenciador de Controle de Serviços ou pelo Gerenciador PnP. Usado por sistemas de arquivos carregados por um reconhecedor do sistema de arquivos (exceto quando eles são o sistema de arquivos de inicialização) ou por outro sistema de arquivos para EFS. Esses sistemas de arquivos incluem CDFS, EFS, FastFat, NTFS e UDFS. Também usado para desabilitar temporariamente um driver durante a depuração. |
Todos os drivers que especificam um tipo de inicialização de SERVICE_BOOT_START são carregados antes dos drivers com um tipo inicial de SERVICE_SYSTEM_START ou SERVICE_AUTO_START. Dentro de cada categoria de tipo inicial, o grupo de ordem de carregamento determina quando os drivers de filtro do sistema de arquivos (e drivers de filtro herdados) serão carregados.
Especificar o tipo de inicialização
Um gravador de driver pode especificar o tipo de inicialização de um driver no momento da instalação de uma das seguintes maneiras:
Especificando o tipo de inicialização desejado para a entrada StartType na seção service-install-section referenciada por uma diretiva AddService no arquivo INF do driver. Esse método é descrito na seção ServiceInstall de Criar um arquivo INF para um driver de filtro.
Enviando o tipo de inicialização desejado para o parâmetro dwStartType ao chamar CreateService ou ChangeServiceConfig de um programa de instalação no modo de usuário. Esse método é descrito nas entradas de referência para CreateService e ChangeServiceConfig na documentação do SDK do Microsoft Windows.
Grupos de ordem de carregamento do driver
Nos tipos de inicialização SERVICE_BOOT_START e SERVICE_SYSTEM_START, o grupo de ordem de carregamento de cada driver especifica a ordem relativa aos drivers.
Os drivers cujo tipo de inicialização é SERVICE_BOOT_START são chamados de drivers de inicialização. Os filtros que são drivers de inicialização geralmente pertencem a um dos grupos de ordem de carregamento do FSFilter. Esses grupos de ordem de carregamento são descritos em detalhes em Grupos de ordem de carregamento para drivers de filtro do sistema de arquivos.
O driver cujo tipo de inicialização é SERVICE_SYSTEM_START também são carregados na ordem dos grupos de ordem de carregamento aos quais pertencem. No entanto, nenhum driver de inicialização do sistema é carregado até que todos os drivers de inicialização sejam carregados.
Os grupos de ordem de carregamento são ignorados para drivers cujo tipo de inicialização é SERVICE_AUTO_START, SERVICE_DEMAND_START ou SERVICE_DISABLED.
Uma lista completa e ordenada de grupos de ordens de carregamento pode ser encontrada na subchave ServiceGroupOrder da chave do registro HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control.
A mesma ordenação de grupo de carregamento é usada para drivers SERVICE_BOOT_START e SERVICE_SYSTEM_START. No entanto, todos os drivers SERVICE_BOOT_START são carregados e iniciados antes que qualquer driver SERVICE_SYSTEM_START seja carregado.
Especificar o grupo de ordens de carregamento
Um gravador de driver pode especificar o grupo de ordem de carregamento de um driver no momento da instalação de uma das seguintes maneiras:
Especificando o grupo de ordem de carregamento desejado para a entrada LoadOrderGroup em service-install-section referenciada por uma diretiva AddService no arquivo INF do driver. Esse método é descrito na seção ServiceInstall de Criar um arquivo INF para um driver de filtro.
Enviando o tipo de inicialização desejado para o parâmetro lpLoadOrderGroup ao chamar CreateService ou ChangeServiceConfig de um programa de instalação no modo de usuário. Esse método é descrito nas entradas de referência para CreateService e ChangeServiceConfig na documentação do SDK do Microsoft Windows.
Para obter mais informações gerais sobre a ordem de carga do driver e os grupos de ordens de carga, consulte Especificar a ordem de carregamento do driver.
Regras para carregar um driver de filtro
As seguintes regras sobre o tipo de inicialização e os grupos de ordem de carregamento determinam quando um driver de filtro será carregado:
Um driver de filtro que especifica um tipo de inicialização e um grupo de ordem de carregamento específicos é carregado ao mesmo tempo que todos os outros drivers de filtro nesse tipo de inicialização e grupo de ordem de carregamento.
Dentro de cada grupo de ordem de carregamento, os drivers de minifiltro e filtro herdado geralmente são carregados em ordem aleatória. Esse caso normalmente resulta em drivers sendo carregados com base na ordem em que o driver foi instalado.
Se um minifiltro ou driver de filtro herdado não especificar um grupo de ordem de carregamento, ele será carregado depois de todos os outros drivers do mesmo tipo de inicialização que especificam um grupo de ordem de carregamento.