Compartir a través de


Directiva AddService inf

Nota

Esta directiva no se usa en archivos INF que instalan dispositivos que no requieren controladores, como módems o monitores de pantalla.

Se usa una directiva AddService dentro de un DDInstall inf. Sección servicios o sección DefaultInstall.Services de INF. Especifica las características de los servicios asociados a los controladores, como cómo y cuándo se cargan los servicios, y las dependencias de otros controladores o servicios heredados subyacentes. Opcionalmente, esta directiva también configura los servicios de registro de eventos para el dispositivo.

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

Entradas

ServiceName
Especifica el nombre del servicio que se va a instalar. El nombre debe ser lo suficientemente único como para que no sea probable que entre en conflicto con un servicio instalado por un archivo INF diferente. Por ejemplo, el nombre del servicio podría incluir una breve abreviatura del nombre de la empresa como prefijo o sufijo. Este nombre no debe localizarse. Debe ser el mismo independientemente del idioma local del sistema.

flags
Especifica una o varias (ORed) de las siguientes marcas definidas por el sistema, definidas en Setupapi.h, expresadas como un valor hexadecimal:

0x00000001 (SPSVCINST_TAGTOFRONT)
Mueva la etiqueta del servicio con nombre a la parte delantera de su lista de pedidos de grupo, lo que garantiza que se cargue primero dentro de ese grupo (a menos que un dispositivo instalado posteriormente con esta especificación INF lo desplace). Los archivos INF que instalan exclusivamente dispositivos PnP y dispositivos con controladores WDM no deben establecer esta marca.

0x00000002 (SPSVCINST_ASSOCSERVICE)
Asigne el servicio con nombre como controlador de función PnP (o controlador heredado) para el dispositivo que instala este archivo INF.

Para indicar que un servicio es el controlador de función de un dispositivo, el servicio debe especificar la marca SPSVCINST_ASSOCSERVICE en la directiva AddService . Para un servicio como un controlador de filtro u otro componente de controlador, no se debe usar la marca .

Cada controlador de dispositivo INF debe tener exactamente un servicio asociado. El INF no requiere un servicio asociado si es un INF de extensión o usa las directivas Include/Needs para heredar el servicio asociado de otro INF. En el caso de los dispositivos que no requieren un controlador de función, el controlador NULL se puede especificar como el servicio asociado como se indica a continuación:

AddService = ,2

0x00000008 (SPSVCINST_NOCLOBBER_DISPLAYNAME)
No sobrescriba el nombre descriptivo del servicio especificado (opcional) si este servicio ya existe en el sistema.

0x00000010 (SPSVCINST_NOCLOBBER_STARTTYPE)
No sobrescriba el tipo de inicio del servicio especificado si este servicio con nombre ya existe en el sistema.

0x00000020 (SPSVCINST_NOCLOBBER_ERRORCONTROL)
No sobrescriba el valor de control de error del servicio dado si este servicio con nombre ya existe en el sistema.

0x00000040 (SPSVCINST_NOCLOBBER_LOADORDERGROUP)
No sobrescriba el valor del grupo de orden de carga del servicio determinado si este servicio con nombre ya existe en el sistema. Los archivos INF que instalan exclusivamente dispositivos PnP y dispositivos con controladores WDM no deben establecer esta marca.

0x00000080 (SPSVCINST_NOCLOBBER_DEPENDENCIES)
No sobrescriba la lista de dependencias del servicio dado si este servicio con nombre ya existe en el sistema. Los archivos INF que instalan exclusivamente dispositivos PnP y dispositivos con controladores WDM no deben establecer esta marca.

0x00000100 (SPSVCINST_NOCLOBBER_DESCRIPTION)
No sobrescriba la descripción del servicio especificado (opcional) si este servicio ya existe en el sistema.

0x00000400 (SPSVCINST_CLOBBER_SECURITY) (Windows XP y versiones posteriores de Windows)
Sobrescriba la configuración de seguridad del servicio si este servicio ya existe en el sistema.

0x00000800 (SPSVCSINST_STARTSERVICE) (Windows Vista y versiones posteriores de Windows)
Inicie el servicio una vez instalado el servicio. Esta marca no se puede usar para iniciar un servicio que implemente un controlador de función de Plug and Play (PnP) o un controlador de filtro para un dispositivo. De lo contrario, esta marca se puede usar para iniciar un servicio en modo de usuario o en modo kernel administrado por Service Control Manager (SCM).

0x00001000 (SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES) (Windows 7 y versiones posteriores de Windows)
No sobrescriba los privilegios para el servicio especificado si este servicio ya existe en el sistema.

0x00002000 (SPSVCINST_NOCLOBBER_TRIGGERS) (Windows 10 versión 2004 y versiones posteriores de Windows)
No sobrescriba los desencadenadores para el servicio especificado si este servicio ya existe en el sistema y tiene desencadenadores existentes. Consulte la directiva AddTrigger siguiente para obtener más información sobre los desencadenadores.

0x00004000 (SPSVCINST_NOCLOBBER_SERVICESIDTYPE) (Windows 10 versión 2004 y versiones posteriores de Windows)
No sobrescriba la información del SID para el servicio especificado si este servicio ya existe en el sistema y tiene información de SID existente. Consulte la directiva ServiceSidType siguiente para obtener más información.

0x00008000 (SPSVCINST_NOCLOBBER_DELAYEDAUTOSTART) (Windows 10 versión 2004 y versiones posteriores de Windows)
No sobrescriba el valor de inicio automático retrasado para el servicio especificado si este servicio ya existe en el sistema y tiene un valor existente. Consulte la directiva DelayedAutoStart siguiente para obtener más información.

0x00020000 (SPSVCINST_NOCLOBBER_FAILUREACTIONS) (Windows 11 versión 22H2 y versiones posteriores de Windows)
No sobrescriba las acciones de error para el servicio especificado si este servicio ya existe en el sistema y tiene acciones de error existentes. Consulte la directiva FailureActions siguiente para obtener más información sobre las acciones de error.

0x00040000 (SPSVCINST_NOCLOBBER_BOOTFLAGS) (Windows 11 compilación 25381 y versiones posteriores de Windows) No sobrescriba el valor de las marcas de arranque para el servicio especificado si este servicio ya existe en el sistema y tiene un valor existente. Consulte la directiva BootFlags siguiente para obtener más información.

service-install-section
Hace referencia a una sección definida por INF-writer que contiene información para instalar el servicio con nombre para este dispositivo (o dispositivos). Para obtener más información, vea la siguiente sección Comentarios .

event-log-install-section
Opcionalmente, hace referencia a una sección definida por el escritor inf en la que se configuran los servicios de registro de eventos para este dispositivo (o dispositivos).

EventLogType
Opcionalmente, especifica uno de sistema, seguridad o aplicación. Si se omite, este valor predeterminado es System, que casi siempre es el valor adecuado para la instalación de controladores de dispositivos.

Por ejemplo, un INF especificaría Seguridad solo si el controlador que se va a instalar proporciona su propia compatibilidad de seguridad.

EventName
Opcionalmente, especifica un nombre que se va a usar para el registro de eventos. Si se omite, este valor predeterminado es serviceName especificado.

Comentarios

Las extensiones sin distinción entre mayúsculas y minúsculas definidas por el sistema se pueden insertar en un DDInstall. Sección servicios que contiene una directiva AddService en archivos INF multiplataforma o del sistema operativo para especificar instalaciones específicas de la plataforma o específicas del sistema operativo.

Cada nombre de sección creado por INF-writer debe ser único dentro del archivo INF y debe seguir las reglas generales para definir nombres de sección. Para obtener más información sobre estas reglas, vea Reglas de sintaxis general para archivos INF.

Una directiva AddService debe hacer referencia a una sección denominada service-install-section en otra parte del archivo INF. Cada sección de este tipo tiene la siguiente forma:

[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 sección service-install-section debe tener al menos las entradas ServiceType, StartType, ErrorControl y ServiceBinary , como se muestra aquí. Sin embargo, las entradas restantes son opcionales.

entradas y valores de sección de Service-Install

Displayname=Nombre
Especifica un nombre descriptivo para el servicio o controlador, normalmente, para facilitar la localización, expresado como un token %strkey% definido en una sección Strings del archivo INF.

Descripción=description-string
Opcionalmente, especifica una cadena que describe el servicio, normalmente expresada como un token %strkey% definido en una sección Strings del archivo INF.

Esta cadena proporciona al usuario más información sobre el servicio que displayName. Por ejemplo, DisplayName podría ser algo parecido a "Cliente DHCP" y la Descripción podría ser algo parecido a "Administra la configuración de red mediante el registro y la actualización de direcciones IP y nombres DNS".

La cadena de descripción debe ser lo suficientemente larga como para ser descriptiva, pero no siempre que sea difícil. Si una cadena de descripción contiene tokens %strkey%, cada token puede representar un máximo de 511 caracteres. La cadena total, después de las sustituciones de tokens de cadena, no debe superar los 1024 caracteres.

ServiceType=type-code
El código de tipo de un controlador de dispositivo en modo kernel debe establecerse en 0x00000001 (SERVICE_KERNEL_DRIVER).

El código de tipo de un servicio De Microsoft Win32 instalado para un dispositivo debe establecerse en 0x00000010 (SERVICE_WIN32_OWN_PROCESS) o 0x00000020 (SERVICE_WIN32_SHARE_PROCESS). Si el servicio Win32 puede interactuar con el escritorio, el valor de código de tipo debe combinarse con 0x00000100 (SERVICE_INTERACTIVE_PROCESS).

El código de tipo para un controlador de red de nivel superior, como un redirector o un controlador del sistema de archivos, debe establecerse en 0x00000002 (SERVICE_FILE_SYSTEM_DRIVER).

Las constantes SERVICE_xxxx se definen en Wdm.h y Ntddk.h.

StartType=código de inicio
Especifica cuándo iniciar el controlador como uno de los siguientes valores numéricos, expresados en decimal o, como se muestra en la siguiente lista, en notación hexadecimal.

0x0 (SERVICE_BOOT_START)
Indica un controlador iniciado por el cargador del sistema operativo.

Este valor debe usarse para los controladores de dispositivos necesarios para cargar el sistema operativo.

0x1 (SERVICE_SYSTEM_START)
Indica que un controlador se inició durante la inicialización del sistema operativo.

Los controladores PnP que realizan la detección de dispositivos durante la inicialización deben usar este valor, pero no son necesarios para cargar el sistema.

Por ejemplo, un controlador PnP que también puede detectar un dispositivo heredado debe especificar este valor en su INF para que se llame a su rutina DriverEntry para buscar el dispositivo heredado, incluso si el administrador de PnP no puede enumerar ese dispositivo.

0x2 (SERVICE_AUTO_START)
Indica un servicio iniciado por el administrador de control de servicios durante el inicio del sistema.

Este valor nunca se debe usar en los archivos INF para los controladores de dispositivo WDM o PnP.

0x3 (SERVICE_DEMAND_START)
Indica un servicio iniciado a petición, ya sea por el administrador de PnP cuando el dispositivo correspondiente se enumera o, posiblemente, por el administrador de control de servicios en respuesta a una petición de usuario explícita para un dispositivo que no sea PnP.

Este valor se debe usar en los archivos INF para todos los controladores WDM de dispositivos que no son necesarios para cargar el sistema y para todos los controladores de dispositivos PnP que no son necesarios para cargar el sistema ni para la detección de dispositivos.

0x4 (SERVICE_DISABLED)
Indica un servicio que no se puede iniciar.

Este valor se puede usar para deshabilitar temporalmente los servicios de controlador para un dispositivo. Sin embargo, no se puede instalar un dispositivo o controlador si este valor se especifica en la sección service-install de su archivo INF.

Para obtener más información sobre StartType, vea Especificar el orden de carga del controlador.

ErrorControl=error-control-level
Especifica el nivel de control de error como uno de los siguientes valores numéricos, expresados en decimal o, como se muestra en la siguiente lista, en notación hexadecimal.

0x0 (SERVICE_ERROR_IGNORE)
Si el controlador no se puede cargar o inicializar, continúe con el inicio del sistema y no muestre una advertencia al usuario.

0x1 (SERVICE_ERROR_NORMAL)
Si el controlador no puede cargar o inicializar su dispositivo, el inicio del sistema debe continuar pero mostrar una advertencia al usuario.

0x2 (SERVICE_ERROR_SEVERE)
Si el controlador no se carga, el inicio del sistema debe cambiar al conjunto de controles LastKnownGood del Registro y continuar el inicio del sistema, incluso si el controlador de nuevo indica un error de inicialización del dispositivo o dispositivo o controlador.

0x3 (SERVICE_ERROR_CRITICAL)
Si el controlador no se carga y el inicio del sistema no usa el conjunto de controles LastKnownGood del Registro, cambie a LastKnownGood e inténtelo de nuevo.

Si el inicio sigue fallando al usar LastKnownGood, ejecute una rutina de comprobación de errores. (Solo los dispositivos o controladores necesarios para que el sistema arranque especifique este valor en sus archivos INF).

ServiceBinary=ruta de acceso al servicio
Especifica la ruta de acceso del archivo binario para el servicio, expresada como %dirid%\filename.

El número dirid es un identificador de directorio personalizado o uno de los identificadores de directorio definidos por el sistema descritos en Uso de Dirids. El nombre de archivo especificado especifica un archivo ya transferido (consulte la directiva INF CopyFiles) desde el medio de distribución de origen a ese directorio en el equipo de destino.

Startname=service-start-name Esta entrada opcional especifica un nombre de inicio que se debe asociar al servicio. Si el código de tipo especifica 1 (SERVICE_KERNEL_DRIVER) o 2 (SERVICE_FILE_SYSTEM_DRIVER), este nombre es el nombre del objeto de controlador que usa el administrador de E/S para cargar el controlador. Si el código de tipo contiene el bit 0x00000010 (SERVICE_WIN32_OWN_PROCESS) o 0x00000020 (SERVICE_WIN32_SHARE_PROCESS), este nombre puede ser uno de los valores válidos para el parámetro lpServiceStartName de la API CreateService .

AddReg=add-registry-section[,add-registry-section]...
Hace referencia a una o varias secciones de add-registry-fined de INF-writer en las que se configura cualquier información del Registro pertinente para los servicios recién instalados. Para obtener más información, vea Inf AddReg Directive.

DelReg=del-registry-section[,del-registry-section]...
Hace referencia a una o varias secciones del registro definidas por INF-writer en las que se quita la información pertinente del Registro para un servicio ya instalado. Para obtener más información, vea INF DelReg Directive.

Esta directiva casi nunca se usa en una sección service-install-section, pero podría usarse en un INF que "actualiza" el registro para una instalación anterior de los mismos servicios de dispositivo o controlador.

BitReg=bit-registry-section[,bit-registry-section]...
Es válido en una sección service-install-pero casi nunca se usa.

LoadOrderGroup=load-order-group-name
Esta entrada opcional identifica el grupo de pedidos de carga del que es miembro este controlador. Puede ser uno de los grupos de pedidos de carga "estándar", como la clase SCSI o NDIS.

En general, esta entrada no es necesaria para dispositivos con controladores WDM o para dispositivos PnP exclusivamente, a menos que haya dependencias heredadas en este grupo. Sin embargo, esta entrada puede ser útil si se admite la detección de dispositivos mediante la carga de un grupo de controladores en un orden determinado.

Para obtener más información sobre LoadOrderGroup, vea Especificar el orden de carga del controlador.

Dependencias=depend-on-item-name[,depend-on-item-name]... Cada elemento depend-on-item-name de una lista de dependencias especifica el nombre de un servicio o un grupo de pedidos de carga en el que depende el dispositivo o controlador.

Si depend-on-item-name especifica un servicio, el servicio que se debe ejecutar antes de iniciar este controlador. Por ejemplo, el INF para los servicios de impresión TCP/IP proporcionados por el sistema depende de la compatibilidad de la pila de transporte TCP/IP subyacente (modo kernel). Por lo tanto, el INF para los servicios de impresión TCP/IP especifica esta entrada como Dependencies=TCPIP.

Un depend-on-item-name puede especificar un grupo de pedidos de carga en el que depende este dispositivo o controlador. Este controlador solo se inicia si se inició al menos un miembro del grupo especificado. Precede al nombre del grupo con un signo más (+). Por ejemplo, el sistema RAS services INF podría tener una entrada como Dependencies = +NetBIOSGroup,RpcSS que enumera un grupo de pedidos de carga y un servicio.

Security="security-descriptor-string"
Especifica un descriptor de seguridad que se va a aplicar al servicio. Este descriptor de seguridad especifica los permisos necesarios para realizar operaciones como iniciar, detener y configurar el servicio. El valor security-descriptor-string es una cadena con tokens para indicar el componente de seguridad DACL (D:).

Para obtener información sobre las cadenas de descriptores de seguridad, vea Security Descriptor Definition Language (Windows) (Lenguaje de definición de descriptores de seguridad [Windows]). Para obtener información sobre el formato de las cadenas de descriptor de seguridad, vea Lenguaje de definición de descriptor de seguridad (Windows).

Para obtener más información sobre cómo especificar descriptores de seguridad, vea Creating Secure Device Installations.

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

Nota

Este valor solo se puede usar para servicios win32 y solo está disponible en Windows 7 y versiones posteriores.

Cada nombre de privilegio de la lista es el nombre de un privilegio que requiere el servicio. Consulte Constantes de privilegios (Windows) para obtener una lista de los nombres de privilegios. Para cada nombre de privilegio, solo se requiere el nombre de texto. Por ejemplo, el nombre de privilegio debe escribirse como "SeAuditPrivilege", pero no SE_AUDIT_NAME.

Para obtener más información sobre los privilegios necesarios para el servicio, consulte SERVICE_REQUIRED_PRIVILEGES_INFO (Windows).

ServiceSidType=Valor

Nota

Este valor solo se puede usar para los servicios win32 y solo está disponible con Windows 10 versión 2004 y posteriores.

Esta entrada puede usar cualquier valor válido como se describe en SERVICE_SID_INFO.

DelayedAutoStart=Valor

Nota

Este valor solo se puede usar para los servicios win32 y solo está disponible con Windows 10 2004 y versiones posteriores.

Contiene la configuración de inicio automático retrasado de un servicio de inicio automático.

Si este miembro es 0x0, el servicio se inicia durante el arranque del sistema. De lo contrario, el servicio se inicia después de que se inicien otros servicios de inicio automático más un breve retraso.

Esta configuración se omite a menos que el servicio sea un servicio de inicio automático.

Para más información, consulte esta página.

AddTrigger=service-trigger-install-section [, service-trigger-install-section, ...]
Especifica los eventos de desencadenador que se van a registrar para el servicio Win32 para que el servicio se pueda iniciar o detener cuando se produzca un evento de desencadenador. Para obtener más información sobre los eventos de desencadenador de servicio, consulte Eventos de desencadenador de servicio.

Cada sección con nombre service-trigger-install-section a la que hace referencia una directiva AddTrigger tiene el siguiente formato:

[service-trigger-install-section]

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

BootFlags=Valor

Nota

Este valor solo se puede usar con los servicios de controladores en modo kernel y solo está disponible con Windows 11 compilación 25381 y posteriores.

Opcionalmente, especifica cuándo el sistema operativo debe promover el valor StartType de un controlador a 0x0 (SERVICE_BOOT_START). Puede especificar uno o varios (ORed) de los valores numéricos siguientes, expresados como valores hexadecimales.

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) Indica que se debe promover el controlador si se inicia desde la red.

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) Indica que se debe promover el controlador si se inicia desde un disco duro virtual.

  • 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD)
    Indica que el controlador debe promoverse a si arranca desde un disco USB.

  • 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD)
    Indica que se debe promover el controlador si se arranca desde el almacenamiento SD.

  • 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD)
    Indica que se debe promover el controlador si se arranca desde un disco en un controlador USB 3.0.

  • 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) Indica que se debe promover el controlador si el arranque mientras el arranque medido está habilitado.

  • 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD)
    Indica que se debe promover el controlador si se inicia con el arranque del comprobador habilitado.

  • 0x80 (CM_SERVICE_WINPE_BOOT_LOAD)
    Indica que se debe promover el controlador si se inicia en WinPE.

Entradas y valores de service-Trigger-Install-Section

TriggerType=tipo de desencadenador
Especifica el tipo de evento de desencadenador de servicio en uno de los siguientes valores numéricos, expresados en decimal o, como se muestra en la siguiente lista, notación hexadecimal:

0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)
Indica que el evento se desencadena cuando llega un dispositivo de la clase de interfaz de dispositivo especificada o está presente cuando se inicia el sistema.

Para obtener más información, vea estructura SERVICE_TRIGGER.

Acción=action-type
Especifica la acción que se va a realizar cuando se produce el evento de desencadenador especificado.

0x1 (SERVICE_TRIGGER_ACTION_SERVICE_START)
Inicie el servicio cuando se produzca el evento de desencadenador especificado.

0x2 (SERVICE_TRIGGER_ACTION_SERVICE_STOP)
Detenga el servicio cuando se produzca el evento de desencadenador especificado.

Para obtener más información, vea estructura SERVICE_TRIGGER.

Subtipo=trigger-subtype
Especifica un GUID que identifica el subtipo de evento del desencadenador. El valor depende del valor de TriggerType.

Cuando TriggerType se 0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL), SubType especifica el GUID que identifica la clase de interfaz de dispositivo.

Para obtener más información, vea estructura SERVICE_TRIGGER.

Dataitem=tipo de datos, datos
Opcionalmente, especifica los datos específicos del desencadenador para un evento de desencadenador de servicio.

Cuando TriggerType es 0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL), se puede especificar un dataItem opcional con un tipo de datos de 0x2 (SERVICE_TRIGGER_DATA_TYPE_STRING) para limitar el ámbito de la clase de interfaz de dispositivo a un identificador de hardware específico o un identificador compatible.

Para obtener más información, consulte estructura de SERVICE_TRIGGER_SPECIFIC_DATA_ITEM

El procedimiento recomendado para usar la directiva AddTrigger es desencadenar el inicio del servicio en la llegada de la interfaz del dispositivo. Para obtener más información, consulte Win32 Services Interacting with Devices (Interacción con dispositivos de Win32 Services).

Nota

La sintaxis addTrigger solo está disponible en Windows 10 versión 2004 y posteriores.

FailureActions=service-failure-actions-install-section
Opcionalmente, especifica la acción que el controlador de servicio debe realizar cuando se produce un error en un servicio.

El administrador de control de servicio cuenta el número de veces que se ha producido un error en cada servicio desde el arranque del sistema. El recuento se restablece a 0 si el servicio no ha fallado durante segundos de restablecimiento. Cuando se produce un error en el servicio por primera vez, el controlador de servicio realiza la acción especificada en el elemento N de la lista De acciones. Si N es mayor que el número de acciones, el controlador de servicio repite la última acción de la lista.

La sección service-failure-actions-install-install-referenced by a FailureActions tiene el formato siguiente:

[service-failure-actions-install-section]

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

Entradas y valores de service-Failure-Actions-Install-Section

ResetPeriod=reset-period
Especifica el tiempo después del cual se restablece el recuento de errores en cero si no hay errores, en segundos. El recuento de errores no se restablece de forma predeterminada cuando no se especifica un período de restablecimiento.

Para obtener más información, vea estructura SERVICE_FAILURE_ACTIONSW.

NonCrashFailures=Valor
Contiene la configuración de la marca de acciones de error de un servicio. La configuración determina cuándo se van a ejecutar las acciones de error. Un valor de 0x0 indica False y un valor de 0x1 indica True.

Para obtener más información, vea estructura SERVICE_FAILURE_ACTIONS_FLAG (winsvc.h).

Acción=failure-action-type,delay
Especifica una acción que el administrador de control de servicio puede realizar. Varias entradas de acción forman una lista ordenada de acciones de error. Para obtener más información, vea estructura SC_ACTION.

Nota

La sintaxis FailureActions solo se puede usar para servicios win32 y está disponible a partir de Windows 11, versión 22H2.

Especificar el orden de carga del controlador

El sistema operativo carga los controladores según el valor StartTypeservice-install-section, como se indica a continuación:

  • Durante la fase de inicio de arranque, el sistema operativo carga todos los controladores de 0x0 (SERVICE_BOOT_START).

  • Durante la fase de inicio del sistema, el sistema operativo carga primero todos los controladores WDM y PnP para los que el administrador de PnP encuentra nodos de dispositivo (nodos de desarrollo) (si sus archivos INF especifican 0x01 para SERVICE_SYSTEM_START o 0x03 para SERVICE_DEMAND_START). A continuación, el sistema operativo carga todos los controladores de SERVICE_SYSTEM_START restantes.

  • Durante la fase de inicio automático, el sistema operativo carga todos los controladores de SERVICE_AUTO_START restantes.

Para obtener más información sobre las dependencias, vea Especificar el orden de carga del controlador.

Promoción de StartType de un controlador en el arranque en función del escenario de arranque

Según el escenario de arranque, puede usar el valor del Registro BootFlags para controlar cuándo el sistema operativo debe promover el valor StartType de un controlador a 0x0 (SERVICE_BOOT_START). Puede especificar uno o varios (ORed) de los valores numéricos siguientes, expresados como un valor hexadecimal:

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) indica que el controlador debe promoverse si arranca desde la red.

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) indica que se debe promover el controlador si se inicia desde un disco duro virtual.

  • 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD) indica que el controlador debe promoverse a si arranca desde un disco USB.

  • 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD) indica que se debe promover el controlador si se arranca desde el almacenamiento SD.

  • 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD) indica que se debe promover el controlador si se arranca desde un disco en un controlador USB 3.0.

  • 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) indica que se debe promover el controlador si el arranque mientras el arranque medido está habilitado.

  • 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD) indica que se debe promover el controlador si se inicia con el arranque del comprobador habilitado.

  • 0x80 (CM_SERVICE_WINPE_BOOT_LOAD) indica que se debe promover el controlador si se arranca en WinPE.

La sección service-install-section tiene la siguiente forma general:

[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

Nota

Esta sintaxis solo debe usarse en versiones de Windows y compilaciones anteriores a Windows 11 compilación 25381; para Windows 11 compilación 25381 y versiones posteriores, use la directiva BootFlags.

Registro para el registro de eventos

Una directiva AddService también puede hacer referencia a una sección event-log-install-section en otro lugar del archivo INF. Cada sección de este tipo tiene la siguiente forma:

[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 un archivo INF de dispositivo o controlador típico, la sección event-log-install-section usa solo la directiva AddReg para configurar un archivo de mensaje de registro de eventos para el controlador. Esta sección de add-registry de registro de eventos tiene la siguiente forma general:

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

En concreto, la sección agrega dos entradas de valor en la subclave del Registro creada para el dispositivo o controlador, como se indica a continuación:

  • La entrada de valor denominada EventMessageFile es de tipo REG_EXPAND_SZ, según lo especificado por el valor de FLG_ADDREG_TYPE_EXPAND_SZ 0x00020000. Su valor, entre comillas dobles ("), asocia el IoLogMsg.dll proporcionado por el sistema (pero podría asociar otro archivo DLL de registro) con el archivo binario del controlador. Normalmente, las rutas de acceso a cada uno de estos archivos se especifican de la siguiente manera:

    %%SystemRoot%%\System32\IoLogMsg.dll

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

  • La entrada de valor denominada TypesSupported es de tipo REG_DWORD, según lo especificado por el valor de FLG_ADDREG_TYPE_DWORD 0x00010001.

    Para los controladores, este valor debe ser 7. Este valor es equivalente al OR bit a bit de EVENTLOG_SUCCESS, EVENTLOG_ERROR_TYPE, EVENTLOG_WARNING_TYPE y EVENTLOG_INFORMATION_TYPE, sin establecer los bits de EVENTLOG_AUDIT__XXX_.

Una sección event-log-install-section también puede usar la directiva DelReg para quitar un archivo de mensaje de registro de eventos instalado anteriormente, eliminando explícitamente las entradas de valor EventMessageFile y TypesSupported existentes, si se reemplaza un archivo binario del controlador por un controlador recién instalado. (Consulte también INF DelService Directive).)

Aunque una directiva BitReg también es válida dentro de unasección inf-writer-defined event-log-install-, casi nunca se usa, porque las entradas de valor estándar para el registro de eventos del controlador de dispositivo no son máscaras de bits.

Ejemplos

En este ejemplo se muestran las secciones service-install y event-log-install a las que hace referencia la directiva AddService , como ya se mostró anteriormente en el ejemplo de DDInstall. Servicios.

[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"

Consulte también