Diretiva INF AddService

Observação

Essa diretiva não é usada em arquivos INF que instalam dispositivos que não exigem drivers, como modems ou monitores de exibição.

Uma diretiva AddService é usada em um INF DDInstall. Seção Serviços ou seção INF DefaultInstall.Services. Ele especifica características dos serviços associados aos drivers, como e quando os serviços são carregados e quaisquer dependências em outros drivers ou serviços herdados subjacentes. Opcionalmente, essa diretiva também configura serviços de log de eventos para o dispositivo.

[DDInstall.Services] 
 
AddService=ServiceName,[flags],service-install-section
                     [,event-log-install-section[,[EventLogType][,EventName]]]
...

Entradas

ServiceName
Especifica o nome do serviço a ser instalado. O nome deve ser exclusivo o suficiente para que seja improvável que entre em conflito com um serviço instalado por um arquivo INF diferente. Por exemplo, o nome do serviço pode incluir uma breve abreviação do nome da sua empresa como um prefixo ou sufixo. Esse nome não deve ser localizado. Ele deve ser o mesmo, independentemente do idioma local do sistema.

sinalizadores
Especifica um ou mais (ORed) dos seguintes sinalizadores definidos pelo sistema, definidos em Setupapi.h, expressos como um valor hexadecimal:

0x00000001 (SPSVCINST_TAGTOFRONT)
Mova a marca do serviço nomeado para a frente de sua lista de pedidos de grupo, garantindo assim que ela seja carregada primeiro dentro desse grupo (a menos que um dispositivo instalado posteriormente com essa especificação INF o desloce). Os arquivos INF que instalam dispositivos e dispositivos PnP exclusivamente com drivers WDM não devem definir esse sinalizador.

0x00000002 (SPSVCINST_ASSOCSERVICE)
Atribua o serviço nomeado como o driver de função PnP (ou driver herdado) para o dispositivo que está sendo instalado por esse arquivo INF.

Para indicar que um serviço é o driver de função de um dispositivo, o serviço deve especificar o sinalizador SPSVCINST_ASSOCSERVICE na diretiva AddService . Para um serviço como um driver de filtro ou outro componente de driver, o sinalizador não deve ser usado.

Cada INF do driver de dispositivo deve ter exatamente um serviço associado. O INF não exigirá um serviço associado se for um INF de extensão ou usar as diretivas Include/Needs para herdar o serviço associado de outro INF. Para dispositivos que não exigem um driver de função, o driver NULL pode ser especificado como o serviço associado da seguinte maneira:

AddService = ,2

0x00000008 (SPSVCINST_NOCLOBBER_DISPLAYNAME)
Não substitua o nome amigável (opcional) do serviço fornecido se esse serviço já existir no sistema.

0x00000010 (SPSVCINST_NOCLOBBER_STARTTYPE)
Não substitua o tipo de início do serviço fornecido se esse serviço nomeado já existir no sistema.

0x00000020 (SPSVCINST_NOCLOBBER_ERRORCONTROL)
Não substitua o valor de controle de erro do serviço fornecido se esse serviço nomeado já existir no sistema.

0x00000040 (SPSVCINST_NOCLOBBER_LOADORDERGROUP)
Não substitua o valor de grupo de ordem de carga do serviço fornecido se esse serviço nomeado já existir no sistema. Os arquivos INF que instalam dispositivos e dispositivos PnP exclusivamente com drivers WDM não devem definir esse sinalizador.

0x00000080 (SPSVCINST_NOCLOBBER_DEPENDENCIES)
Não substitua a lista de dependências do serviço fornecido se esse serviço nomeado já existir no sistema. Os arquivos INF que instalam dispositivos e dispositivos PnP exclusivamente com drivers WDM não devem definir esse sinalizador.

0x00000100 (SPSVCINST_NOCLOBBER_DESCRIPTION)
Não substitua a descrição do serviço fornecido (opcional) se esse serviço já existir no sistema.

0x00000400 (SPSVCINST_CLOBBER_SECURITY) (Windows XP e versões posteriores do Windows)
Substitua as configurações de segurança para o serviço se esse serviço já existir no sistema.

0x00000800 (SPSVCSINST_STARTSERVICE) (Windows Vista e versões posteriores do Windows)
Inicie o serviço depois que o serviço for instalado. Esse sinalizador não pode ser usado para iniciar um serviço que implementa um driver de função de Plug and Play (PnP) ou um driver de filtro para um dispositivo. Caso contrário, esse sinalizador pode ser usado para iniciar um serviço de modo de usuário ou kernel gerenciado pelo SCM (Service Control Manager).

0x00001000 (SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES) (Windows 7 e versões posteriores do Windows)
Não substitua os privilégios para o serviço fornecido se esse serviço já existir no sistema.

0x00002000 (SPSVCINST_NOCLOBBER_TRIGGERS) (Windows 10 versão 2004 e versões posteriores do Windows)
Não substitua os gatilhos para o serviço fornecido se esse serviço já existir no sistema e tiver gatilhos existentes. Consulte a diretiva AddTrigger abaixo para obter mais informações sobre gatilhos.

0x00004000 (SPSVCINST_NOCLOBBER_SERVICESIDTYPE) (Windows 10 versão 2004 e versões posteriores do Windows)
Não substitua as informações de SID para o serviço fornecido se esse serviço já existir no sistema e tiver informações de SID existentes. Consulte a diretiva ServiceSidType abaixo para obter mais informações.

0x00008000 (SPSVCINST_NOCLOBBER_DELAYEDAUTOSTART) (Windows 10 versão 2004 e versões posteriores do Windows)
Não substitua o valor de início automático atrasado para o serviço fornecido se esse serviço já existir no sistema e tiver um valor existente. Consulte a diretiva DelayedAutoStart abaixo para obter mais informações.

0x00020000 (SPSVCINST_NOCLOBBER_FAILUREACTIONS) (Windows 11 versão 22H2 e versões posteriores do Windows)
Não substitua as ações de falha para o serviço fornecido se esse serviço já existir no sistema e tiver ações de falha existentes. Consulte a diretiva FailureActions abaixo para obter mais informações sobre ações de falha.

0x00040000 (SPSVCINST_NOCLOBBER_BOOTFLAGS) (Windows 11 build 25381 e versões posteriores do Windows) Não substitua o valor dos sinalizadores de inicialização para o serviço fornecido se esse serviço já existir no sistema e tiver um valor existente. Consulte a diretiva BootFlags abaixo para obter mais informações.

service-install-section
Faz referência a uma seção definida pelo gravador INF que contém informações para instalar o serviço nomeado para este dispositivo (ou dispositivos). Para obter mais informações, consulte a seção Comentários a seguir.

event-log-install-section
Opcionalmente, faz referência a uma seção definida pelo gravador INF na qual os serviços de registro em log de eventos para este dispositivo (ou dispositivos) são configurados.

EventLogType
Opcionalmente, especifica um sistema,segurança ou aplicativo. Se omitido, o padrão será System, que é quase sempre o valor apropriado para a instalação de drivers de dispositivo.

Por exemplo, um INF especificaria Segurança somente se o driver a ser instalado fornecesse seu próprio suporte de segurança.

EventName
Opcionalmente, especifica um nome a ser usado para o log de eventos. Se omitido, o padrão será ServiceName determinado.

Comentários

As extensões definidas pelo sistema e que não diferenciam maiúsculas de minúsculas podem ser inseridas em uma DDInstall. Seção de serviços que contém uma diretiva AddService em arquivos INF entre sistemas operacionais e/ou multiplataforma para especificar instalações específicas da plataforma ou específicas do sistema operacional.

Cada nome de seção criado pelo inf-writer deve ser exclusivo dentro do arquivo INF e deve seguir as regras gerais para definir nomes de seção. Para obter mais informações sobre essas regras, consulte Regras de sintaxe geral para arquivos INF.

Uma diretiva AddService deve referenciar uma seção de instalação de serviço nomeada em outro lugar no arquivo INF. Cada seção desse tipo tem o seguinte formato:

[service-install-section]
 
[DisplayName=name]
[Description=description-string]
ServiceType=type-code
StartType=start-code
ErrorControl=error-control-level
ServiceBinary=path-to-service
[StartName=service-start-name]
[AddReg=add-registry-section[, add-registry-section] ...]
[DelReg=del-registry-section[, del-registry-section] ...]
[BitReg=bit-registry-section[,bit-registry-section] ...]
[LoadOrderGroup=load-order-group-name]
[Dependencies=depend-on-item-name[,depend-on-item-name]
[Security="security-descriptor-string"]...]
[RequiredPrivileges=privilege-name[,privilege-name]...] (Windows 7 and later versions of Windows)
[ServiceSidType=value] (Windows 10 Version 2004 and later versions of Windows)
[DelayedAutoStart=value] (Windows 10 Version 2004 and later versions of Windows)
[AddTrigger=service-trigger-install-section[, service-trigger-install-section, ...]] (Windows 10 Version 2004 and later versions of Windows)
[FailureActions=service-failure-actions-install-section] (Windows 11 version 22H2 and later versions of Windows)
[BootFlags=value] (Windows 11 build 25381 and later versions of Windows)

Cada seção de instalação de serviço deve ter pelo menos as entradas ServiceType, StartType, ErrorControl e ServiceBinary , conforme mostrado aqui. No entanto, as entradas restantes são opcionais.

Entradas e valores da seção Service-Install

Displayname=Nome
Especifica um nome amigável para o serviço/driver, geralmente, para facilitar a localização, expresso como um token %strkey% definido em uma seção Strings do arquivo INF.

Descrição=description-string
Opcionalmente, especifica uma cadeia de caracteres que descreve o serviço, geralmente expresso como um token %strkey% definido em uma seção Strings do arquivo INF.

Essa cadeia de caracteres fornece ao usuário mais informações sobre o serviço do que o DisplayName. Por exemplo, DisplayName pode ser algo como "Cliente DHCP" e a Descrição pode ser algo como "Gerencia a configuração de rede registrando e atualizando endereços IP e nomes DNS".

A cadeia de caracteres de descrição deve ser longa o suficiente para ser descritiva, mas não tanto tempo para ser constrangedora. Se uma description-string contiver tokens %strkey%, cada token poderá representar um máximo de 511 caracteres. A cadeia de caracteres total, após quaisquer substituições de token de cadeia de caracteres, não deve exceder 1024 caracteres.

Servicetype=type-code
O código de tipo para um driver de dispositivo no modo kernel deve ser definido como 0x00000001 (SERVICE_KERNEL_DRIVER).

O código de tipo para um serviço Do Microsoft Win32 instalado para um dispositivo deve ser definido como 0x00000010 (SERVICE_WIN32_OWN_PROCESS) ou 0x00000020 (SERVICE_WIN32_SHARE_PROCESS). Se o serviço Win32 puder interagir com a área de trabalho, o valor do código de tipo deverá ser combinado com 0x00000100 (SERVICE_INTERACTIVE_PROCESS).

O código de tipo para um driver de rede de nível mais alto, como um redirecionador ou um driver do sistema de arquivos, deve ser definido como 0x00000002 (SERVICE_FILE_SYSTEM_DRIVER).

As constantes SERVICE_xxxx são definidas em Wdm.h e Ntddk.h.

Starttype=start-code
Especifica quando iniciar o driver como um dos seguintes valores numéricos, expressos em decimal ou, conforme mostrado na lista a seguir, em notação hexadecimal.

0x0 (SERVICE_BOOT_START)
Indica um driver iniciado pelo carregador do sistema operacional.

Esse valor deve ser usado para drivers de dispositivos necessários para carregar o sistema operacional.

0x1 (SERVICE_SYSTEM_START)
Indica um driver iniciado durante a inicialização do sistema operacional.

Esse valor deve ser usado por drivers PnP que fazem a detecção de dispositivo durante a inicialização, mas não são necessários para carregar o sistema.

Por exemplo, um driver PnP que também pode detectar um dispositivo herdado deve especificar esse valor em seu INF para que sua rotina DriverEntry seja chamada para localizar o dispositivo herdado, mesmo que esse dispositivo não possa ser enumerado pelo gerenciador PnP.

0x2 (SERVICE_AUTO_START)
Indica um serviço iniciado pelo gerenciador de controle de serviço durante a inicialização do sistema.

Esse valor nunca deve ser usado nos arquivos INF para drivers de dispositivo WDM ou PnP.

0x3 (SERVICE_DEMAND_START)
Indica um serviço iniciado sob demanda, seja pelo gerenciador PnP quando o dispositivo correspondente é enumerado ou possivelmente pelo gerenciador de controle de serviço em resposta a uma demanda explícita do usuário por um dispositivo não PnP.

Esse valor deve ser usado nos arquivos INF para todos os drivers WDM de dispositivos que não são necessários para carregar o sistema e para todos os drivers de dispositivo PnP que não são necessários para carregar o sistema nem envolvidos na detecção de dispositivos.

0x4 (SERVICE_DISABLED)
Indica um serviço que não pode ser iniciado.

Esse valor pode ser usado para desabilitar temporariamente os serviços de driver de um dispositivo. No entanto, um dispositivo/driver não poderá ser instalado se esse valor for especificado na seção service-install de seu arquivo INF.

Para obter mais informações sobre StartType, consulte Especificando a ordem de carregamento do driver.

ErrorControl=error-control-level
Especifica o nível de controle de erro como um dos seguintes valores numéricos, expressos em decimal ou, conforme mostrado na lista a seguir, em notação hexadecimal.

0x0 (SERVICE_ERROR_IGNORE)
Se o driver não carregar ou inicializar, prossiga com a inicialização do sistema e não exiba um aviso para o usuário.

0x1 (SERVICE_ERROR_NORMAL)
Se o driver não carregar ou inicializar seu dispositivo, a inicialização do sistema deverá continuar, mas exibir um aviso para o usuário.

0x2 (SERVICE_ERROR_SEVERE)
Se o driver não carregar, a inicialização do sistema deverá alternar para o conjunto de controle LastKnownGood do registro e continuar a inicialização do sistema, mesmo que o driver indique novamente um erro de inicialização de dispositivo/driver ou carregamento.

0x3 (SERVICE_ERROR_CRITICAL)
Se o driver não carregar e a inicialização do sistema não estiver usando o conjunto de controle LastKnownGood do Registro, alterne para LastKnownGood e tente novamente.

Se a inicialização ainda falhar ao usar LastKnownGood, execute uma rotina de marcar de bugs. (Somente dispositivos/drivers necessários para o sistema inicializar especificam esse valor em seus arquivos INF.)

ServiceBinary=caminho para o serviço
Especifica o caminho do binário para o serviço, expresso como %dirid%\filename.

O número dirid é um identificador de diretório personalizado ou um dos identificadores de diretório definidos pelo sistema descritos em Usando Dirids. O nome de arquivo especificado especifica um arquivo já transferido (consulte a Diretiva CopyFiles do INF) da mídia de distribuição de origem para esse diretório no computador de destino.

Startname=service-start-name Essa entrada opcional especifica um nome inicial que deve ser associado ao serviço. Se o código de tipoespecificar 1 (SERVICE_KERNEL_DRIVER) ou 2 (SERVICE_FILE_SYSTEM_DRIVER), esse nome será o nome do objeto do driver que o gerenciador de E/S usa para carregar o driver. Se type-code contiver o bit 0x00000010 (SERVICE_WIN32_OWN_PROCESS) ou 0x00000020 (SERVICE_WIN32_SHARE_PROCESS), esse nome poderá ser um dos valores válidos para o parâmetro lpServiceStartName da API CreateService .

AddReg=add-registry-section[,add-registry-section]...
Faz referência a uma ou mais seções de add-registry definidas pelo gravador INF nas quais todas as informações do Registro pertinentes aos serviços recém-instalados estão configuradas. Para obter mais informações, consulte Diretiva AddReg do INF.

DelReg=del-registry-section[,del-registry-section]...
Faz referência a uma ou mais seções de del-registry definidas pelo gravador do INF nas quais as informações pertinentes do Registro para serviços já instalados são removidas. Para obter mais informações, consulte Diretiva DElReg do INF.

Essa diretiva quase nunca é usada em uma seção service-install-section, mas pode ser usada em um INF que "atualiza" o registro para uma instalação anterior dos mesmos serviços de dispositivo/driver.

BitReg=bit-registry-section[,bit-registry-section]...
É válido em uma seção de instalação de serviço , mas quase nunca usado.

LoadOrderGroup=load-order-group-name
Essa entrada opcional identifica o grupo de ordem de carga do qual esse driver é membro. Ele pode ser um dos grupos de ordem de carga "padrão", como classe SCSI ou NDIS.

Em geral, essa entrada é desnecessária para dispositivos com drivers WDM ou para dispositivos PnP exclusivamente, a menos que haja dependências herdadas nesse grupo. No entanto, essa entrada poderá ser útil se houver suporte para a detecção de dispositivo carregando um grupo de drivers em uma ordem específica.

Para obter mais informações sobre LoadOrderGroup, consulte Especificando a ordem de carregamento do driver.

Dependências=depend-on-item-name[,depend-on-item-name]... Cada item depend-on-item-name em uma lista de dependências especifica o nome de um serviço ou grupo de ordem de carga do qual o dispositivo/driver depende.

Se o depend-on-item-name especificar um serviço, o serviço que deve estar em execução antes que esse driver seja iniciado. Por exemplo, o INF para os serviços de impressão TCP/IP do Win32 fornecidos pelo sistema depende do suporte da pilha de transporte TCP/IP subjacente (modo kernel). Consequentemente, o INF para os serviços de impressão TCP/IP especifica essa entrada como Dependencies=TCPIP.

Um depend-on-item-name pode especificar um grupo de pedidos de carga do qual este dispositivo/driver depende. Esse driver será iniciado somente se pelo menos um membro do grupo especificado tiver sido iniciado. Preceda o nome do grupo com um sinal de adição (+). Por exemplo, os serviços RAS do sistema INF podem ter uma entrada como Dependencies = +NetBIOSGroup,RpcSS que lista um grupo de ordem de carga e um serviço.

Security="security-descriptor-string"
Especifica um descritor de segurança a ser aplicado ao serviço. Esse descritor de segurança especifica as permissões necessárias para executar operações como iniciar, parar e configurar o serviço. O valor security-descriptor-string é uma cadeia de caracteres com tokens para indicar o componente de segurança DACL (D:).

Para obter informações sobre cadeias de caracteres de descritor de segurança, consulte Linguagem de definição do descritor de segurança (Windows). Para obter informações sobre o formato das cadeias de caracteres do descritor de segurança, consulte Linguagem de definição do descritor de segurança (Windows).

Para obter mais informações sobre como especificar descritores de segurança, consulte Criando instalações de dispositivo seguro.

RequiredPrivileges=privilege-name[,privilege-name]...

Observação

Esse valor só pode ser usado para os Serviços Win32 e só está disponível no Windows 7 e superior.

Cada nome-privilégio na lista é o nome de um privilégio que o serviço requer. Consulte Constantes de privilégio (Windows) para obter uma lista dos nomes de privilégio. Para cada nome de privilégio, somente o nome do texto é necessário. Por exemplo, o nome do privilégio deve ser escrito como "SeAuditPrivilege", mas não SE_AUDIT_NAME.

Para obter mais informações sobre privilégios necessários ao serviço, consulte SERVICE_REQUIRED_PRIVILEGES_INFO (Windows).

ServiceSidType=Valor

Observação

Esse valor só pode ser usado para serviços Win32 e só está disponível com Windows 10 versão 2004 e superior.

Essa entrada pode usar qualquer valor válido, conforme descrito em SERVICE_SID_INFO.

DelayedAutoStart=Valor

Observação

Esse valor só pode ser usado para serviços Win32 e só está disponível com Windows 10 2004 e superior.

Contém a configuração de início automático atrasada de um serviço de início automático.

Se esse membro for 0x0, o serviço será iniciado durante a inicialização do sistema. Caso contrário, o serviço será iniciado depois que outros serviços de início automático forem iniciados, além de um pequeno atraso.

Essa configuração é ignorada, a menos que o serviço seja um serviço de início automático.

Para obter mais informações, consulte esta página.

AddTrigger=service-trigger-install-section [, service-trigger-install-section, ...]
Especifica os eventos de gatilho a serem registrados para o serviço Win32 para que o serviço possa ser iniciado ou interrompido quando ocorrer um evento de gatilho. Para obter mais informações sobre eventos de gatilho de serviço, consulte Eventos de gatilho de serviço.

Cada seção denominada service-trigger-install referenciada por uma diretiva AddTrigger tem o seguinte formato:

[service-trigger-install-section]

TriggerType=trigger-type
Action=action-type
SubType=trigger-subtype
[DataItem=data-type,data]
...

BootFlags=Valor

Observação

Esse valor só pode ser usado com serviços de driver no modo kernel e só está disponível com Windows 11 build 25381 e superior.

Opcionalmente, especifica quando o sistema operacional deve promover o valor StartType de um driver para 0x0 (SERVICE_BOOT_START). Você pode especificar um ou mais (ORed) dos seguintes valores numéricos, expressos como valores hexadecimal.

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) Indica que o driver deve ser promovido se estiver inicializando da rede.

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) Indica que o driver deve ser promovido se a inicialização de um VHD.

  • 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD)
    Indica que o driver deve ser promovido a se estiver inicializando de um disco USB.

  • 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD)
    Indica que o driver deve ser promovido se estiver inicializando do armazenamento SD.

  • 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD)
    Indica que o driver deve ser promovido se estiver inicializando de um disco em um controlador USB 3.0.

  • 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) Indica que o driver deve ser promovido se a inicialização enquanto a inicialização medida estiver habilitada.

  • 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD)
    Indica que o driver deve ser promovido se a inicialização com a inicialização do verificador estiver habilitada.

  • 0x80 (CM_SERVICE_WINPE_BOOT_LOAD)
    Indica que o driver deve ser promovido se estiver inicializando para o WinPE.

Entradas e valores de service-trigger-install-section

TriggerType=tipo de gatilho
Especifica o tipo de evento de gatilho de serviço em um dos seguintes valores numéricos, expressos em decimal ou, como é mostrado na lista a seguir, notação hexadecimal:

0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)
Indica que o evento é disparado quando um dispositivo da classe de interface do dispositivo especificada chega ou está presente quando o sistema é iniciado.

Para obter mais informações, consulte estrutura SERVICE_TRIGGER.

Ação=tipo de ação
Especifica a ação a ser tomada quando o evento de gatilho especificado ocorre.

0x1 (SERVICE_TRIGGER_ACTION_SERVICE_START)
Inicie o serviço quando o evento de gatilho especificado ocorrer.

0x2 (SERVICE_TRIGGER_ACTION_SERVICE_STOP)
Interrompa o serviço quando o evento de gatilho especificado ocorrer.

Para obter mais informações, consulte estrutura SERVICE_TRIGGER.

Subtipo=trigger-subtype
Especifica um GUID que identifica o subtipo de evento de gatilho. O valor depende do valor de TriggerType.

Quando TriggerType é 0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL), SubType especifica o GUID que identifica a classe de interface do dispositivo.

Para obter mais informações, consulte estrutura SERVICE_TRIGGER.

Dataitem=tipo de dados, dados
Opcionalmente, especifica os dados específicos do gatilho para um evento de gatilho de serviço.

Quando TriggerType é 0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL), um DataItem opcional pode ser especificado com um tipo de dados de 0x2 (SERVICE_TRIGGER_DATA_TYPE_STRING) para definir o escopo da classe de interface do dispositivo para uma ID de hardware específica ou ID compatível.

Para obter mais informações, consulte estrutura SERVICE_TRIGGER_SPECIFIC_DATA_ITEM

A melhor prática para usar a diretiva AddTrigger é disparar iniciar o serviço na chegada da interface do dispositivo. Para obter mais informações, consulte Serviços win32 interagindo com dispositivos.

Observação

A sintaxe AddTrigger só está disponível no Windows 10 versão 2004 e posterior.

FailureActions=service-failure-actions-install-section
Opcionalmente, especifica a ação que o controlador de serviço deve executar quando um serviço falha.

O gerenciador de controle de serviço conta o número de vezes que cada serviço falhou desde que o sistema foi inicializado. A contagem será redefinida para 0 se o serviço não tiver falhado por segundos de período de redefinição. Quando o serviço falha pela nona vez, o controlador de serviço executa a ação especificada no elemento N da lista Ação. Se N for maior que o número de Ações, o controlador de serviço repetirá a última ação na lista.

A seção service-failure-actions-install-section referenciada por uma diretiva FailureActions tem o seguinte formato:

[service-failure-actions-install-section]

[ResetPeriod=reset-period]
[NonCrashFailures=value]
Action=failure-action-type,delay
[Action=failure-action-type,delay]
...

Service-Failure-Actions-Install-Section Entries and Values

ResetPeriod=período de redefinição
Especifica o tempo após o qual redefinir a contagem de falhas para zero se não houver falhas, em segundos. A contagem de falhas não é redefinida por padrão quando um período de redefinição não é especificado.

Para obter mais informações, consulte estrutura SERVICE_FAILURE_ACTIONSW.

NonCrashFailures=Valor
Contém a configuração de sinalizador de ações de falha de um serviço. A configuração determina quando as ações de falha devem ser executadas. Um valor de 0x0 indica False e um valor de 0x1 indica True.

Para obter mais informações, consulte estrutura SERVICE_FAILURE_ACTIONS_FLAG (winsvc.h).

Ação=failure-action-type, delay
Especifica uma ação que o gerenciador de controle de serviço pode executar. Várias entradas de Ação formam uma lista ordenada de ações de falha. Para obter mais informações, consulte estrutura SC_ACTION.

Observação

A sintaxe FailureActions só pode ser usada para serviços Win32 e está disponível a partir do Windows 11, versão 22H2.

Especificando a ordem de carregamento do driver

O sistema operacional carrega drivers de acordo com o valor StartTypeservice-install-section, da seguinte maneira:

  • Durante a fase de início da inicialização, o sistema operacional carrega todos os drivers de 0x0 (SERVICE_BOOT_START).

  • Durante a fase de início do sistema, o sistema operacional primeiro carrega todos os drivers WDM e PnP para os quais o gerenciador PnP encontra nós de dispositivo (devnodes) (se seus arquivos INF especificam 0x01 para SERVICE_SYSTEM_START ou 0x03 para SERVICE_DEMAND_START). Em seguida, o sistema operacional carrega todos os drivers de SERVICE_SYSTEM_START restantes.

  • Durante a fase de início automático, o sistema operacional carrega todos os drivers de SERVICE_AUTO_START restantes.

Para obter mais informações sobre dependências, consulte Especificando a ordem de carregamento do driver.

Promovendo o StartType de um driver na inicialização dependendo do cenário de inicialização

Dependendo do cenário de inicialização, você pode usar o valor do Registro BootFlags para controlar quando o sistema operacional deve promover o valor StartType de um driver para 0x0 (SERVICE_BOOT_START). Você pode especificar um ou mais (ORed) dos seguintes valores numéricos, expressos como um valor hexadecimal:

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) indica que o driver deve ser promovido se estiver inicializando da rede.

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) indica que o driver deve ser promovido se estiver inicializando de um VHD.

  • 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD) indica que o driver deve ser promovido para se estiver inicializando de um disco USB.

  • 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD) indica que o driver deve ser promovido se estiver inicializando do armazenamento SD.

  • 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD) indica que o driver deve ser promovido se estiver inicializando de um disco em um controlador USB 3.0.

  • 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) indica que o driver deve ser promovido se a inicialização enquanto a inicialização medida estiver habilitada.

  • 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD) indica que o driver deve ser promovido se a inicialização com a inicialização do verificador estiver habilitada.

  • 0x80 (CM_SERVICE_WINPE_BOOT_LOAD) indica que o driver deve ser promovido se estiver inicializando no WinPE.

A seção service-install tem o seguinte formulário geral:

[service-install-section]
AddReg=add-registry-section
...

[add-registry-section]
HKR,,BootFlags,0x00010003,0x14 ; CM_SERVICE_USB3_DISK_BOOT_LOAD|CM_SERVICE_USB_DISK_BOOT_LOAD

Observação

Essa sintaxe deve ser usada apenas em versões do Windows e compilações anteriores a Windows 11 build 25381; para Windows 11 build 25381 e posterior, use a diretiva BootFlags.

Registrando-se para registro em log de eventos

Uma diretiva AddService também pode referenciar uma seção event-log-install-section em outro lugar no arquivo INF. Cada seção desse tipo tem o seguinte formato:

[event-log-install-section]
 
AddReg=add-registry-section[, add-registry-section]...
[DelReg=del-registry-section[, del-registry-section]...] 
[BitReg=bit-registry-section[,bit-registry-section]...]
 ...

Para um arquivo INF típico de dispositivo/driver, a seção event-log-install-usa apenas a diretiva AddReg para configurar um arquivo de mensagem de registro em log de eventos para o driver. Esta seção add-registry-section de log de eventos tem o seguinte formulário geral:

[drivername_EventLog_AddReg]
HKR,,EventMessageFile,0x00020000,"path\IoLogMsg.dll;path\driver.sys"
HKR,,TypesSupported,0x00010001,7 

Em particular, a seção adiciona duas entradas de valor na subchave do Registro criada para o dispositivo/driver, da seguinte maneira:

  • A entrada de valor denominada EventMessageFile é do tipo REG_EXPAND_SZ, conforme especificado pelo valor FLG_ADDREG_TYPE_EXPAND_SZ 0x00020000. Seu valor, entre aspas duplas ("), associa o IoLogMsg.dll fornecido pelo sistema (mas pode associar outra DLL de registro em log) ao arquivo binário do driver. Normalmente, os caminhos para cada um desses arquivos são especificados da seguinte maneira:

    %%SystemRoot%%\System32\IoLogMsg.dll

    %%SystemRoot%%\System32\drivers\driver.sys

  • A entrada de valor denominada TypesSupported é do tipo REG_DWORD, conforme especificado pelo valor FLG_ADDREG_TYPE_DWORD 0x00010001.

    Para drivers, esse valor deve ser 7. Esse valor é equivalente ao OR bit a bit de EVENTLOG_SUCCESS, EVENTLOG_ERROR_TYPE, EVENTLOG_WARNING_TYPE e EVENTLOG_INFORMATION_TYPE, sem definir os bits EVENTLOG_AUDIT__XXX_.

Um event-log-install-section também pode usar a diretiva DelReg para remover um arquivo de mensagem de log de eventos instalado anteriormente, excluindo explicitamente as entradas de valor EventMessageFile e TypesSupported existentes, se um binário de driver estiver sendo substituído por um driver recém-instalado. (Consulte também Diretiva INF DelService.)

Embora uma diretiva BitReg também seja válida em umaseção INF-writer-defined event-log-install-, ela quase nunca é usada, pois as entradas de valor padrão para o log de eventos do driver de dispositivo não são máscaras de bits.

Exemplos

Este exemplo mostra as seções service-install e event-log-install referenciadas pela diretiva AddService , conforme já mostrado anteriormente no exemplo de DDInstall. Serviços.

[Example_DDInstall.Services]
AddService=ExampleFunctionDriver,0x00000002,function_ServiceInstallSection
AddService=ExampleUpperFilter,,filter_ServiceInstallSection

[function_ServiceInstallSection]
DisplayName    = %function_ServiceDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %13%\ExampleFunctionDriver.sys

[function_EventLogInstallSection]
AddReg = function_EventLog_AddReg

[function_EventLog_AddReg]
;
; Following entry on single line in INF file. Enclosing quotation marks 
; prevent the semicolon from being interpreted as a comment.
;
HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll;
       %13%\ExampleFunctionDriver.sys"
HKR,,TypesSupported,0x00010001,7

[filter_ServiceInstallSection]
DisplayName    = %filter_ServiceDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %13%\ExampleUpperFilter.sys

[Strings] ; only immediately preceding %strkey% tokens shown here
%function_ServiceDesc%="Example function driver service"
%filter_ServiceDesc%="Example filter driver service"

Confira também