Compartilhar via


Criando um arquivo INF para um driver de minifiltro

Introdução

Observação

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

Os drivers de filtro precisam de um arquivo INF para serem instalados no sistema operacional Windows. Você encontrará arquivos INF de exemplo nos exemplos de minifiltro.

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 Opcional, mas recomendado
Defaultinstall Obrigatório
DefaultInstall.Services Obrigatório
ServiceInstall Obrigatório
AddRegistry Obrigatório
Cadeias de caracteres Obrigatório

Observação

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 em execução em versões de 64 bits de sistemas Windows devem ser assinados antes que o Windows os carregue. Consulte Assinando um driver para obter mais informações.

Seção Versão (obrigatório)

A seção Versão especifica uma classe e UM GUID 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 .

Entrada 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 a diretiva DriverVer do INF.
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 do INF

A seção DestinationDirs especifica os diretórios em que o driver de minifiltro e os arquivos de aplicativo serão 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 Seção DestinationDirs do INF. No exemplo de código a seguir, o valor 12 refere-se ao diretório Drivers (%windir%\system32\drivers) e o valor 10 refere-se ao diretório do Windows (%windir%).

[DestinationDirs]
DefaultDestDir = 12
Minispy.DriverFiles = 12
Minispy.UserFiles   = 10,FltMgr

Seção DefaultInstall (obrigatório)

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

Observação

A diretiva CopyFiles não deve se referir ao arquivo de catálogo nem ao próprio arquivo INF. SetupAPI copia esses arquivos 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 outras 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, esta 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  = %12%\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 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 do driver" em O que determina quando um driver é carregado.

A entrada LoadOrderGroup fornece ao gerenciador de filtros informações necessárias para garantir a interoperabilidade entre drivers de minifiltro e 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 pedidos de carga, consulte Grupos de Pedidos de Carga e Altitudes para Drivers de Minifiltro.

Observe que você deve especificar um valor LoadOrderGroup , mesmo que o tipo inicial 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 herdados.

Observação

O valor StartType do gerenciador de filtros é SERVICE_BOOT_START e seu valor LoadOrderGroup é Infraestrutura FSFilter. Esses valores garantem que o gerenciador de filtros seja sempre carregado antes que os drivers de minifiltro sejam carregados.

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.

Para drivers de minifiltro, ao contrário dos drivers de filtro do sistema de arquivos herdados, os valores StartType e LoadOrderGroup não determinam onde o driver de minifiltro é anexado na pilha de instâncias de minifiltro. Esse local é determinado pela altitude especificada para a instância de minifiltro.

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 Diretiva AddService do INF.

A diretiva AddReg refere-se a uma ou mais seções AddRegistry definidas pelo gravador do INF que contêm informações a serem armazenadas no registro do 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 Dependências especifica os nomes de quaisquer serviços ou grupos de ordem de carga dos quais o driver depende. Todos os drivers de minifiltro devem especificar FltMgr, que é o nome de 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, juntamente com as definições de token %strkey% na seção Cadeias de Caracteres , define três instâncias, uma das quais é nomeada como a instância padrão do driver de exemplo MiniSpy.

[Minispy.AddRegistry]
HKR,%RegInstancesSubkeyName%,%RegDefaultInstanceValueName%,0x00000000,%DefaultInstance%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegAltitudeValueName%,0x00000000,%Instance1.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegFlagsValueName%,0x00010001,%Instance1.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegAltitudeValueName%,0x00000000,%Instance2.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegFlagsValueName%,0x00010001,%Instance2.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegAltitudeValueName%,0x00000000,%Instance3.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegFlagsValueName%,0x00010001,%Instance3.Flags%

Seção Strings (obrigatório)

A seção Cadeias de Caracteres define cada token %strkey% usado no arquivo INF.

Você pode criar um único arquivo INF internacional criando cadeias de caracteres específicas de localidade adicionais. Seções 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"
RegInstancesSubkeyName = "Instances"
RegDefaultInstanceValueName  = "DefaultInstance"
RegAltitudeValueName    = "Altitude"
RegFlagsValueName  = "Flags"

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) começando com Windows 10 versão 1903.

No Windows 10 anterior à 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 de DelService para remover os serviços do driver de minifiltro. A diretiva DelService sempre especificou o sinalizador de SPSVCINST_STOPSERVICE (0x00000200) para interromper o serviço antes de ser excluído.

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

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

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