Compartilhar via


Criando um arquivo INF para um driver de minifiltro

Os drivers de minifiltro do sistema de arquivos precisam que um arquivo INF seja instalado no sistema operacional Windows. Você pode encontrar vários arquivos INF de exemplo nos exemplos de minifiltro que você pode usar como ponto de partida.

A partir do Windows 10 versão 1903, os requisitos de INF foram alterados para drivers primitivos, que incluem minifiltros do sistema de arquivos. Consulte Criando um novo driver primitivo para obter detalhes.

Seções INF para um driver de filtro do sistema de arquivos

Um arquivo INF para um driver de filtro do sistema de arquivos geralmente contém as seguintes seções:

Seção Observações
Versão Obrigatório
DestinationDirs Obrigatório
DefaultInstall Obrigatório
DefaultInstall.Services Obrigatório
ServiceInstall Obrigatório
AddRegistry Obrigatório
Cadeias de caracteres Obrigatório

A partir do Windows 10 versão 1903, as seções DefaultUninstall e DefaultUninstall.Services são proibidas (com exceção). Essas seções eram opcionais em versões anteriores do sistema operacional.

Todos os drivers executados em versões de 64 bits de sistemas Windows devem ser assinados para que o Windows os carregue. Para obter mais informações, consulte Assinando um driver.

Seção de versão (obrigatório)

A seção Versão especifica uma classe e um GUID que são determinados pelo tipo de driver de minifiltro, conforme mostrado no exemplo de código a seguir.

[Version]
Signature   = "$WINDOWS NT$"
Class       = "ActivityMonitor"
ClassGuid   = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider    = %Msft%
DriverVer   = 10/09/2001,1.0.0.0
CatalogFile =
PnpLockdown = 1

A tabela a seguir mostra os valores que os drivers de minifiltro do sistema de arquivos devem especificar na seção Versão.

Entry Valor
Signature "$WINDOWS NT$"
Classe Consulte Classes de driver de filtro do sistema de arquivos e GUIDs de classe.
ClassGuid Consulte Classes de driver de filtro do sistema de arquivos e GUIDs de classe.
Provedor Em seu próprio arquivo INF, você deve especificar um provedor diferente da Microsoft.
DriverVer Consulte Diretiva INF DriverVer.
CatalogFile Para drivers de minifiltro antivírus assinados, essa entrada contém o nome de um arquivo de catálogo fornecido pelo WHQL. Todos os outros drivers de minifiltro devem deixar essa entrada em branco. Para obter mais informações, consulte a descrição da entrada CatalogFile na seção Versão de INF

Seção DestinationDirs (obrigatório)

A seção DestinationDirs especifica os diretórios em que os arquivos de driver e aplicativo de minifiltro devem ser copiados.

Nesta seção e na seção ServiceInstall, você pode especificar diretórios de sistema conhecidos por valores numéricos definidos pelo sistema. Para obter uma lista desses valores, consulte a seção INF DestinationDirs. No exemplo de código a seguir, o valor 13 refere-se a um local de repositório de drivers definido pelo sistema operacional no sistema.

[DestinationDirs]
Minispy.DriverFiles = 13
Minispy.UserFiles   = 13

Seção DefaultInstall (obrigatório)

Na seção DefaultInstall, uma diretiva CopyFiles copia os arquivos do driver do minifiltro e os arquivos do aplicativo do usuário para os destinos especificados na seção DestinationDirs.

Observação

A diretiva CopyFiles não deve se referir ao arquivo de catálogo ou ao próprio arquivo INF, já que esses arquivos são copiados automaticamente.

Você pode criar um único arquivo INF para instalar o driver em várias versões dos sistemas operacionais Windows. Você pode criar esse tipo de arquivo INF criando as seções DefaultInstall e DefaultInstall.Services para cada versão do sistema operacional. Cada seção é rotulada com uma decoração (por exemplo, .ntx86, .ntia64 ou .nt) que especifica a versão do sistema operacional à qual ela se aplica. Para obter mais informações sobre como criar esse tipo de arquivo INF, consulte Criando arquivos INF para várias plataformas e sistemas operacionais.

O exemplo de código a seguir mostra uma seção DefaultInstall típica.

[DefaultInstall.NTamd64]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles

Seção DefaultInstall.Services (obrigatório)

A seção DefaultInstall.Services contém uma diretiva AddService que controla como e quando os serviços de um driver específico são carregados, conforme mostrado no exemplo de código a seguir.

[DefaultInstall.NTamd64.Services]
AddService = %MinispyServiceName%,,Minispy.Service

Seção ServiceInstall (obrigatório)

A seção ServiceInstall contém informações usadas para carregar o serviço de driver. No driver de exemplo do MiniSpy, essa seção é chamada de "Minispy.Service", conforme mostrado no exemplo de código a seguir. O nome da seção ServiceInstall deve aparecer em uma diretiva AddService na seção DefaultInstall.Services.

[Minispy.Service]
DisplayName    = %MinispyServiceName%
Description    = %MinispyServiceDesc%
ServiceBinary  = %13%\minispy.sys
ServiceType    = 2 ;    SERVICE_FILE_SYSTEM_DRIVER
StartType      = 3 ;    SERVICE_DEMAND_START
ErrorControl   = 1 ;    SERVICE_ERROR_NORMAL%
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg         = Minispy.AddRegistry
Dependencies   = FltMgr

A entrada ServiceType especifica o tipo de serviço. Os drivers de minifiltro devem especificar um valor de 2 (SERVICE_FILE_SYSTEM_DRIVER). Para obter mais informações sobre a entrada ServiceType, consulte a Diretiva AddService do INF.

A entrada StartType especifica quando iniciar o serviço. A tabela a seguir lista os valores possíveis para StartType e seus tipos de início correspondentes.

Valor Descrição
0x00000000 SERVICE_BOOT_START
0x00000001 SERVICE_SYSTEM_START
0x00000002 SERVICE_AUTO_START
0x00000003 SERVICE_DEMAND_START
0x00000004 SERVICE_DISABLED

Para obter mais informações sobre esses tipos de início, consulte "Tipos de início de driver" em O que determina quando um driver é carregado.

A entrada LoadOrderGroup fornece ao gerenciador de filtros as informações necessárias para garantir a interoperabilidade entre os drivers de minifiltro e os drivers de filtro do sistema de arquivos herdados. Você deve especificar um valor LoadOrderGroup apropriado para o tipo de driver de minifiltro que você está desenvolvendo. Para escolher um grupo de ordem de carregamento, consulte Grupos de ordem de carregamento e altitudes para drivers de minifiltro.

Você deve especificar um valor LoadOrderGroup, mesmo que o tipo de início do driver de minifiltro não seja SERVICE_BOOT_START. Dessa forma, os drivers de minifiltro são diferentes dos drivers de filtro do sistema de arquivos herdado.

Observação

O valor StartType do gerenciador de filtros é SERVICE_BOOT_START e seu valor LoadOrderGroup é FSFilter Infrastructure. Esses valores garantem que o gerenciador de filtros seja sempre carregado antes que qualquer driver de minifiltro seja carregado.

Para obter mais informações sobre como as entradas StartType e LoadOrderGroup determinam quando o driver é carregado, consulte O que determina quando um driver é carregado.

Ao contrário dos drivers de filtro herdados, os valores StartType e LoadOrderGroup não determinam onde o driver de minifiltro é anexado na pilha de instâncias do minifiltro. Em vez disso, a altitude especificada para a instância do minifiltro determina o local.

A entrada ErrorControl especifica a ação a ser executada se o serviço não for iniciado durante a inicialização do sistema. Os drivers de minifiltro devem especificar um valor de 1 (SERVICE_ERROR_NORMAL). Para obter mais informações sobre a entrada ErrorControl, consulte a Diretiva AddService do INF.

A diretiva AddReg refere-se a uma ou mais seções AddRegistry definidas pelo gravador INF que contêm informações a serem armazenadas no registro para o serviço recém-instalado. Os drivers de minifiltro usam seções AddRegistry para definir instâncias de driver de minifiltro e especificar uma instância padrão.

A entrada Dependencies especifica os nomes de todos os serviços ou grupos de ordem de carregamento dos quais o driver depende. Todos os drivers de minifiltro devem especificar FltMgr, que é o nome do serviço do gerenciador de filtros.

Seção AddRegistry (obrigatório)

A seção AddRegistry adiciona chaves e valores ao Registro. Os drivers de minifiltro usam uma seção AddRegistry para definir instâncias de minifiltro e especificar uma instância padrão. Essas informações são usadas sempre que o gerenciador de filtros cria uma nova instância para o driver de minifiltro.

No driver de exemplo do MiniSpy, a seção AddRegistry a seguir define três instâncias, uma das quais é nomeada como a instância padrão do driver de exemplo do MiniSpy.

Observação

Os valores a seguir devem estar na subchave Parâmetros a partir do Windows 11 versão 24H2.

[Minispy.AddRegistry]
HKR,"Parameters","SupportedFeatures",0x00010001,0x3
HKR,"Parameters\Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Parameters\Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Parameters\Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%
HKR,"Parameters\Instances\"%Instance2.Name%,"Altitude",0x00000000,%Instance2.Altitude%
HKR,"Parameters\Instances\"%Instance2.Name%,"Flags",0x00010001,%Instance2.Flags%
HKR,"Parameters\Instances\"%Instance3.Name%,"Altitude",0x00000000,%Instance3.Altitude%
HKR,"Parameters\Instances\"%Instance3.Name%,"Flags",0x00010001,%Instance3.Flags%

Seção Strings (obrigatório)

A seção Strings define cada token %strkey% usado no arquivo INF.

Você pode criar um único arquivo INF internacional criando seções Strings adicionais específicas da localidade.LanguageID no arquivo INF. Para obter mais informações sobre arquivos INF internacionais, consulte Criando arquivos INF internacionais.

O exemplo de código a seguir mostra uma seção Strings típica.

[Strings]
Msft               = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"

DefaultInstance    = "Minispy - Top Instance"
Instance1.Name     = "Minispy - Middle Instance"
Instance1.Altitude = "370000"
Instance1.Flags    = 0x1 ; Suppress automatic attachments
Instance2.Name     = "Minispy - Bottom Instance"
Instance2.Altitude = "365000"
Instance2.Flags    = 0x1 ; Suppress automatic attachments
Instance3.Name     = "Minispy - Top Instance"
Instance3.Altitude = "385000"
Instance3.Flags    = 0x1 ; Suppress automatic attachments

Seções DefaultUninstall e DefaultUninstall.Services

Observação

As seções DefaultUninstall e DefaultUninstall.Services são proibidas (com exceção) a partir do Windows 10 versão 1903.

No Windows 10 antes da versão 1903, as seções DefaultUninstall e DefaultUninstall.Services eram opcionais, mas recomendadas se o driver pudesse ser desinstalado:

  • DefaultUninstall continha diretivas DelFiles e DelReg para remover arquivos e entradas do Registro.
  • DefaultUninstall.Services continha diretivas DelService para remover os serviços do driver de minifiltro. A diretiva DelService sempre especificou o sinalizador SPSVCINST_STOPSERVICE (0x00000200) para interromper o serviço antes de ser excluído.

O exemplo a seguir mostra as seções típicas DefaultUninstall e DefaultUninstall.Services antes do Windows 10, versão 1903.

[DefaultUninstall.NTamd64]
DelFiles   = Minispy.DriverFiles, Minispy.UserFiles
DelReg     = Minispy.DelRegistry

[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200