Share via


INF AddService 지시문

참고

이 지시문은 모뎀 또는 디스플레이 모니터와 같은 드라이버가 필요하지 않은 디바이스를 설치하는 INF 파일에서 사용되지 않습니다.

AddService 지시문은 INF DDInstall 내에서 사용됩니다. 서비스 섹션 또는 INF DefaultInstall.Services 섹션. 서비스가 로드되는 방법과 시기, 다른 기본 레거시 드라이버 또는 서비스에 대한 종속성 등 드라이버와 연결된 서비스의 특성을 지정합니다. 필요에 따라 이 지시문은 디바이스에 대한 이벤트 로깅 서비스도 설정합니다.

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

항목

ServiceName
설치할 서비스의 이름을 지정합니다. 이름은 다른 INF 파일에 의해 설치된 서비스와 충돌하지 않을 정도로 고유해야 합니다. 예를 들어 서비스 이름에는 회사 이름의 간단한 약어가 접두사 또는 접미사로 포함될 수 있습니다. 이 이름은 지역화해서는 안 됩니다. 시스템의 로컬 언어에 관계없이 동일해야 합니다.

flags
Setupapi.h에 정의된 다음 시스템 정의 플래그 중 하나 이상(ORed)을 16진수 값으로 표시합니다.

0x00000001 (SPSVCINST_TAGTOFRONT)
명명된 서비스의 태그를 해당 그룹 순서 목록의 맨 앞으로 이동하여 해당 그룹 내에서 먼저 로드되도록 합니다(이 INF 사양이 있는 이후에 설치된 디바이스가 해당 태그를 대체하지 않는 한). WDM 드라이버가 있는 전용 PnP 디바이스 및 디바이스를 설치하는 INF 파일은 이 플래그를 설정해서는 안 됩니다.

0x00000002 (SPSVCINST_ASSOCSERVICE)
이 INF 파일에 의해 설치되는 디바이스에 대해 명명된 서비스를 PnP 함수 드라이버(또는 레거시 드라이버)로 할당합니다.

서비스가 디바이스의 함수 드라이버임을 나타내려면 서비스는 AddService 지시문에서 SPSVCINST_ASSOCSERVICE 플래그를 지정해야 합니다. 필터 드라이버 또는 다른 드라이버 구성 요소와 같은 서비스의 경우 플래그를 사용하면 안 됩니다.

모든 디바이스 드라이버 INF에는 정확히 하나의 연결된 서비스가 있어야 합니다. INF는 확장 INF 이거나 Include/Needs 지시문을 사용하여 다른 INF에서 연결된 서비스를 상속하는 경우 연결된 서비스가 필요하지 않습니다. 함수 드라이버가 필요하지 않은 디바이스의 경우 다음과 같이 NULL 드라이버를 연결된 서비스로 지정할 수 있습니다.

AddService = ,2

0x00000008 (SPSVCINST_NOCLOBBER_DISPLAYNAME)
이 서비스가 시스템에 이미 있는 경우 지정된 서비스의 이름(선택 사항)을 덮어쓰지 마세요.

0x00000010 (SPSVCINST_NOCLOBBER_STARTTYPE)
이 명명된 서비스가 시스템에 이미 있는 경우 지정된 서비스의 시작 유형을 덮어쓰지 마세요.

0x00000020 (SPSVCINST_NOCLOBBER_ERRORCONTROL)
이 명명된 서비스가 시스템에 이미 있는 경우 지정된 서비스의 오류 제어 값을 덮어쓰지 마세요.

0x00000040 (SPSVCINST_NOCLOBBER_LOADORDERGROUP)
이 명명된 서비스가 시스템에 이미 있는 경우 지정된 서비스의 load-order-group 값을 덮어쓰지 마세요. WDM 드라이버가 있는 전용 PnP 디바이스 및 디바이스를 설치하는 INF 파일은 이 플래그를 설정해서는 안 됩니다.

0x00000080 (SPSVCINST_NOCLOBBER_DEPENDENCIES)
이 명명된 서비스가 시스템에 이미 있는 경우 지정된 서비스의 종속성 목록을 덮어쓰지 마세요. WDM 드라이버가 있는 전용 PnP 디바이스 및 디바이스를 설치하는 INF 파일은 이 플래그를 설정해서는 안 됩니다.

0x00000100 (SPSVCINST_NOCLOBBER_DESCRIPTION)
이 서비스가 시스템에 이미 있는 경우 지정된 서비스의 (선택 사항) 설명을 덮어쓰지 마세요.

0x00000400 (SPSVCINST_CLOBBER_SECURITY)(Windows XP 이상 버전의 Windows)
이 서비스가 시스템에 이미 있는 경우 서비스에 대한 보안 설정을 덮어씁니다.

0x00000800 (SPSVCSINST_STARTSERVICE)(Windows Vista 이상 버전의 Windows)
서비스가 설치된 후 서비스를 시작합니다. 이 플래그는 디바이스에 대한 플러그 앤 플레이(PnP) 함수 드라이버 또는 필터 드라이버를 구현하는 서비스를 시작하는 데 사용할 수 없습니다. 그렇지 않으면 이 플래그를 사용하여 SCM(서비스 제어 관리자)에서 관리하는 사용자 모드 또는 커널 모드 서비스를 시작할 수 있습니다.

0x00001000 (SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES)(Windows 7 이상 버전의 Windows)
이 서비스가 시스템에 이미 있는 경우 지정된 서비스에 대한 권한을 덮어쓰지 마세요.

0x00002000(SPSVCINST_NOCLOBBER_TRIGGERS)(Windows 10 버전 2004 이상 Windows)
이 서비스가 시스템에 이미 있고 기존 트리거가 있는 경우 지정된 서비스에 대한 트리거를 덮어쓰지 마세요. 트리거에 대한 자세한 내용은 아래 AddTrigger 지시문을 참조하세요.

0x00004000(SPSVCINST_NOCLOBBER_SERVICESIDTYPE)(Windows 10 버전 2004 이상 버전의 Windows)
이 서비스가 시스템에 이미 있고 기존 SID 정보가 있는 경우 지정된 서비스에 대한 SID 정보를 덮어쓰지 마세요. 자세한 내용은 아래 ServiceSidType 지시문을 참조하세요.

0x00008000(SPSVCINST_NOCLOBBER_DELAYEDAUTOSTART)(Windows 10 버전 2004 이상 버전의 Windows)
이 서비스가 시스템에 이미 있고 기존 값이 있는 경우 지정된 서비스에 대해 지연된 자동 시작 값을 덮어쓰지 마세요. 자세한 내용은 아래 DelayedAutoStart 지시문을 참조하세요.

0x00020000(SPSVCINST_NOCLOBBER_FAILUREACTIONS)(Windows 11 버전 22H2 이상 버전의 Windows)
이 서비스가 시스템에 이미 있고 기존 오류 작업이 있는 경우 지정된 서비스에 대한 오류 작업을 덮어쓰지 마세요. 오류 작업에 대한 자세한 내용은 아래 FailureActions 지시문을 참조하세요.

0x00040000(SPSVCINST_NOCLOBBER_BOOTFLAGS) (Windows 11 빌드 25381 이상 버전의 Windows) 이 서비스가 시스템에 이미 있고 기존 값이 있는 경우 지정된 서비스의 부팅 플래그 값을 덮어쓰지 마세요. 자세한 내용은 아래 BootFlags 지시문을 참조하세요.

service-install-section
이 디바이스(또는 디바이스)에 대해 명명된 서비스를 설치하기 위한 정보가 포함된 INF 기록기 정의 섹션을 참조합니다. 자세한 내용은 다음 설명 섹션을 참조 하세요 .

event-log-install-section
필요에 따라 이 디바이스(또는 디바이스)에 대한 이벤트 로깅 서비스가 설정된 INF-기록기 정의 섹션을 참조합니다.

EventLogType
필요에 따라 시스템, 보안 또는 애플리케이션 중 하나를 지정 합니다. 생략하면 이 기본값은 거의 항상 디바이스 드라이버 설치에 적합한 값인 System으로 설정됩니다.

예를 들어 INF는 설치할 드라이버가 자체 보안 지원을 제공하는 경우에만 보안을 지정합니다.

EventName
필요에 따라 이벤트 로그에 사용할 이름을 지정합니다. 생략하면 기본값은 지정된 ServiceName입니다.

설명

시스템 정의 및 대/소문자를 구분하지 않는 확장을 DDInstall에 삽입할 수 있습니다. 플랫폼별 또는 OS별 설치를 지정하기 위해 운영 체제 간 및/또는 플랫폼 간 INF 파일의 AddService 지시문을 포함하는 서비스 섹션입니다.

INF 작성기에서 만든 각 섹션 이름은 INF 파일 내에서 고유해야 하며 섹션 이름을 정의하기 위한 일반적인 규칙을 따라야 합니다. 이러한 규칙에 대한 자세한 내용은 INF 파일에 대한 일반 구문 규칙을 참조하세요.

AddService 지시문은 INF 파일의 다른 곳에서 명명된 service-install-section을 참조해야 합니다. 이러한 각 섹션의 형식은 다음과 같습니다.

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

service-install-section 에는 여기에 표시된 것처럼 ServiceType, StartType, ErrorControlServiceBinary 항목 이상이 있어야 합니다. 그러나 나머지 항목은 선택 사항입니다.

섹션 항목 및 값 Service-Install

Displayname=이름
일반적으로 지역화가 용이하도록 INF 파일의 Strings 섹션에 정의된 %strkey% 토큰으로 표현되는 서비스/드라이버의 이름을 지정합니다.

설명=description-string
필요에 따라 서비스를 설명하는 문자열을 지정합니다. 일반적으로 INF 파일의 Strings 섹션에 정의된 %strkey% 토큰으로 표현됩니다.

이 문자열은 사용자에게 DisplayName보다 서비스에 대한 자세한 정보를 제공합니다. 예를 들어 DisplayName 은 "DHCP 클라이언트"와 같을 수 있으며 설명은 "IP 주소 및 DNS 이름을 등록하고 업데이트하여 네트워크 구성 관리"와 같을 수 있습니다.

description-string은 설명이 가능할 만큼 길어야 하지만 어색하지는 않아야 합니다. description-string에 %strkey% 토큰이 포함된 경우 각 토큰은 최대 511자를 나타낼 수 있습니다. 문자열 토큰 대체 후의 총 문자열은 1024자를 초과하면 안 됩니다.

ServiceType=type-code
커널 모드 디바이스 드라이버의 형식 코드는 0x00000001(SERVICE_KERNEL_DRIVER)로 설정해야 합니다.

디바이스에 설치된 Microsoft Win32 서비스의 형식 코드0x00000010(SERVICE_WIN32_OWN_PROCESS ) 또는 0x00000020( SERVICE_WIN32_SHARE_PROCESS )으로 설정해야 합니다. Win32 서비스가 데스크톱과 상호 작용할 수 있는 경우 형식 코드 값을 0x00000100(SERVICE_INTERACTIVE_PROCESS )과 결합해야 합니다.

리다이렉터 또는 파일 시스템 드라이버와 같은 최고 수준의 네트워크 드라이버에 대한 형식 코드를0x00000002(SERVICE_FILE_SYSTEM_DRIVER )로 설정해야 합니다.

SERVICE_xxxx 상수는 Wdm.hNtddk.h에 정의됩니다.

Starttype=start-code
드라이버를 10진수 또는 다음 목록에 표시된 대로 16진수 표기법으로 표현된 다음 숫자 값 중 하나로 시작할 시기를 지정합니다.

0x0 (SERVICE_BOOT_START)
운영 체제 로더에서 시작한 드라이버를 나타냅니다.

이 값은 운영 체제를 로드하는 데 필요한 디바이스 드라이버에 사용해야 합니다.

0x1 (SERVICE_SYSTEM_START)
운영 체제를 초기화하는 동안 드라이버가 시작되었음을 나타냅니다.

이 값은 초기화 중에 디바이스 검색을 수행하지만 시스템을 로드할 필요는 없는 PnP 드라이버에서 사용해야 합니다.

예를 들어 레거시 디바이스를 검색할 수도 있는 PnP 드라이버는 해당 디바이스를 PnP 관리자가 열거할 수 없는 경우에도 레거시 디바이스를 찾기 위해 DriverEntry 루틴이 호출되도록 INF에서 이 값을 지정해야 합니다.

0x2 (SERVICE_AUTO_START)
시스템 시작 중에 서비스 제어 관리자가 시작한 서비스를 나타냅니다.

이 값은 WDM 또는 PnP 디바이스 드라이버의 INF 파일에서 사용하면 안 됩니다.

0x3 (SERVICE_DEMAND_START)
PnP가 아닌 디바이스에 대한 명시적 사용자 요구에 대한 응답으로 해당 디바이스가 열거될 때 PnP 관리자 또는 서비스 제어 관리자가 요청 시 서비스를 시작했음을 나타냅니다.

이 값은 시스템을 로드할 필요가 없는 디바이스의 모든 WDM 드라이버 및 시스템을 로드하거나 디바이스 검색에 참여하지 않는 모든 PnP 디바이스 드라이버에 대해 INF 파일에서 사용해야 합니다.

0x4 (SERVICE_DISABLED)
시작할 수 없는 서비스를 나타냅니다.

이 값을 사용하여 디바이스에 대한 드라이버 서비스를 일시적으로 사용하지 않도록 설정할 수 있습니다. 그러나 이 값이 INF 파일의 서비스 설치 섹션에 지정된 경우 디바이스/드라이버를 설치할 수 없습니다.

StartType에 대한 자세한 내용은 드라이버 로드 순서 지정을 참조하세요.

ErrorControl=error-control-level
오류 컨트롤의 수준을 10진수로 표현된 다음 숫자 값 중 하나로 지정하거나 다음 목록에 표시된 대로 16진수 표기법으로 지정합니다.

0x0 (SERVICE_ERROR_IGNORE)
드라이버가 로드 또는 초기화에 실패하면 시스템 시작을 진행하고 사용자에게 경고를 표시하지 않습니다.

0x1 (SERVICE_ERROR_NORMAL)
드라이버가 디바이스를 로드하거나 초기화하지 못하는 경우 시스템 시작은 계속 진행되지만 사용자에게 경고를 표시해야 합니다.

0x2 (SERVICE_ERROR_SEVERE)
드라이버가 로드에 실패하면 드라이버가 다시 로드 또는 디바이스/드라이버 초기화 오류를 나타내는 경우에도 시스템 시작은 레지스트리의 LastKnownGood 컨트롤 집합으로 전환하고 시스템 시작을 계속해야 합니다.

0x3 (SERVICE_ERROR_CRITICAL)
드라이버가 로드에 실패하고 시스템 시작이 레지스트리의 LastKnownGood 컨트롤 집합을 사용하지 않는 경우 LastKnownGood 로 전환하고 다시 시도합니다.

LastKnownGood를 사용할 때 여전히 시작이 실패하는 경우 버그 검사 루틴을 실행합니다. (시스템이 부팅하는 데 필요한 디바이스/드라이버 INF 파일에서 이 값을 지정합니다.)

ServiceBinary=path-to-service
%dirid%\filename으로 표현되는 서비스에 대한 이진 파일의 경로를 지정합니다.

dirid 번호는 사용자 지정 디렉터리 식별자 또는 Dirids 사용에 설명된 시스템 정의 디렉터리 식별자 중 하나입니다. 지정된 파일 이름은 원본 배포 미디어에서 대상 컴퓨터의 해당 디렉터리로 이미 전송된 파일( INF CopyFiles 지시문 참조)을 지정합니다.

StartName=service-start-name 이 선택적 항목은 서비스와 연결되어야 하는 시작 이름을 지정합니다. 형식 코드1(SERVICE_KERNEL_DRIVER) 또는 2(SERVICE_FILE_SYSTEM_DRIVER)를 지정하는 경우 이 이름은 I/O 관리자가 드라이버를 로드하는 데 사용하는 드라이버 개체 이름입니다. 형식 코드에 비트 0x00000010(SERVICE_WIN32_OWN_PROCESS) 또는 0x00000020(SERVICE_WIN32_SHARE_PROCESS)가 포함된 경우 이 이름은 CreateService API의 lpServiceStartName 매개 변수에 유효한 값 중 하나일 수 있습니다.

AddReg=add-registry-section[,add-registry-section]...
새로 설치된 서비스와 관련된 레지스트리 정보가 설정된 하나 이상의 INF-기록기 정의 추가 레지스트리 섹션 을 참조합니다. 자세한 내용은 INF AddReg 지시문을 참조하세요.

DelReg=del-registry-section[,del-registry-section]...
이미 설치된 서비스에 대한 관련 레지스트리 정보가 제거되는 하나 이상의 INF-기록기 정의 del-registry-섹션 을 참조합니다. 자세한 내용은 INF DelReg 지시문을 참조하세요.

이 지시문은 service-install-section에서 거의 사용되지 않지만 동일한 디바이스/드라이버 서비스의 이전 설치를 위해 레지스트리를 "업데이트"하는 INF에서 사용될 수 있습니다.

BitReg=bit-registry-section[,bit-registry-section]...
service-install-section에서 유효하지만 거의 사용되지 않습니다.

LoadOrderGroup=load-order-group-name
이 선택적 항목은 이 드라이버가 멤버인 부하 순서 그룹을 식별합니다. SCSI 클래스 또는 NDIS와 같은 "표준" 부하 순서 그룹 중 하나일 수 있습니다.

일반적으로 이 항목은 WDM 드라이버가 있는 디바이스 또는 해당 그룹에 레거시 종속성이 없는 한 독점적으로 PnP 디바이스에 필요하지 않습니다. 그러나 이 항목은 특정 순서로 드라이버 그룹을 로드하여 디바이스 검색이 지원되는 경우에 유용할 수 있습니다.

LoadOrderGroup에 대한 자세한 내용은 드라이버 로드 순서 지정을 참조하세요.

종속성=depend-on-item-name[,depend-on-item-name]... 종속성 목록의 각 종 속 항목 이름 항목은 디바이스/드라이버가 종속되는 서비스 또는 부하 순서 그룹의 이름을 지정합니다.

depend-on-item-name이 서비스를 지정하는 경우 이 드라이버가 시작되기 전에 실행되어야 하는 서비스입니다. 예를 들어 시스템 제공 Win32 TCP/IP 인쇄 서비스에 대한 INF는 기본(커널 모드) TCP/IP 전송 스택의 지원에 따라 달라집니다. 따라서 TCP/IP 인쇄 서비스에 대한 INF는 이 항목을 Dependencies=TCPIP로 지정합니다.

depend-on-item-name은 이 디바이스/드라이버가 의존하는 부하 순서 그룹을 지정할 수 있습니다. 이러한 드라이버는 지정된 그룹의 하나 이상의 멤버가 시작된 경우에만 시작됩니다. 더하기 기호(+)를 사용하여 그룹 이름 앞에 옵니다. 예를 들어 시스템 RAS 서비스 INF에는 부하 순서 그룹과 서비스를 모두 나열하는 종속성 = +NetBIOSGroup,RpcSS 와 같은 항목이 있을 수 있습니다.

Security="security-descriptor-string"
서비스에 적용할 보안 설명자를 지정합니다. 이 보안 설명자는 서비스 시작, 중지 및 구성과 같은 작업을 수행하는 데 필요한 권한을 지정합니다. security-descriptor-string 값은 DACL(D:) 보안 구성 요소를 나타내는 토큰이 있는 문자열입니다.

보안 설명자 문자열에 대한 자세한 내용은 보안 설명자 정의 언어(Windows)를 참조하세요. 보안 설명자 문자열 형식에 대한 자세한 내용은 보안 설명자 정의 언어(Windows)를 참조하세요.

보안 설명자를 지정하는 방법에 대한 자세한 내용은 보안 디바이스 설치 만들기를 참조하세요.

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

참고

이 값은 Win32 서비스에 만 사용할 수 있으며 Windows 7 이상에서만 사용할 수 있습니다.

목록의 각 권한 이름은 서비스에 필요한 권한의 이름입니다. 권한 이름 목록은 권한 상수(Windows) 를 참조하세요. 각 권한 이름에 대해 텍스트 이름만 필요합니다. 예를 들어 권한 이름은 "SeAuditPrivilege"로 작성되어야 하지만 SE_AUDIT_NAME.

서비스 필수 권한에 대한 자세한 내용은 SERVICE_REQUIRED_PRIVILEGES_INFO(Windows)를 참조하세요.

ServiceSidType=

참고

이 값은 Win32 서비스에만 사용할 수 있으며 Windows 10 버전 2004 이상에서만 사용할 수 있습니다.

이 항목은 SERVICE_SID_INFO 설명된 대로 유효한 값을 사용할 수 있습니다.

DelayedAutoStart=

참고

이 값은 Win32 서비스에만 사용할 수 있으며 Windows 10 2004 이상에서만 사용할 수 있습니다.

자동 시작 서비스의 지연된 자동 시작 설정을 포함합니다.

이 멤버가 0x0 경우 시스템 부팅 중에 서비스가 시작됩니다. 그렇지 않으면 다른 자동 시작 서비스가 시작된 후 짧은 지연이 더해지면 서비스가 시작됩니다.

서비스가 자동 시작 서비스가 아닌 한 이 설정은 무시됩니다.

자세한 내용은 이 페이지를 참조하세요.

AddTrigger=service-trigger-install-section [, service-trigger-install-section, ...]
트리거 이벤트가 발생할 때 서비스를 시작하거나 중지할 수 있도록 Win32 서비스에 등록할 트리거 이벤트를 지정합니다. 서비스 트리거 이벤트에 대한 자세한 내용은 서비스 트리거 이벤트를 참조하세요.

AddTrigger 지시문에서 참조하는 명명된 각 service-trigger-install-section 의 형식은 다음과 같습니다.

[service-trigger-install-section]

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

BootFlags=

참고

이 값은 커널 모드 드라이버 서비스에서만 사용할 수 있으며 Windows 11 빌드 25381 이상에서만 사용할 수 있습니다.

필요에 따라 운영 체제가 드라이버의 StartType 값을 0x0(SERVICE_BOOT_START)로 승격해야 하는 시기를 지정합니다. 16진수 값으로 표현된 다음 숫자 값 중 하나 이상(ORed)을 지정할 수 있습니다.

  • 0x1(CM_SERVICE_NETWORK_BOOT_LOAD) 네트워크에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x2(CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) VHD에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x4(CM_SERVICE_USB_DISK_BOOT_LOAD)
    USB 디스크에서 부팅하는 경우 드라이버가 로 승격되어야 했음을 나타냅니다.

  • 0x8(CM_SERVICE_SD_DISK_BOOT_LOAD)
    SD 스토리지에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x10(CM_SERVICE_USB3_DISK_BOOT_LOAD)
    USB 3.0 컨트롤러의 디스크에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x20(CM_SERVICE_MEASURED_BOOT_LOAD) 측정된 부팅을 사용하는 동안 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x40(CM_SERVICE_VERIFIER_BOOT_LOAD)
    검증 도구 부팅을 사용하도록 설정한 상태에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x80(CM_SERVICE_WINPE_BOOT_LOAD)
    WinPE로 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

Service-Trigger-Install-Section 항목 및 값

TriggerType=trigger-type
다음 목록의 16진수 표기법과 같이 10진수로 표현된 다음 숫자 값 중 하나에서 서비스 트리거 이벤트 형식을 지정합니다.

0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)
지정된 디바이스 인터페이스 클래스의 디바이스가 도착하거나 시스템이 시작될 때 이벤트가 트리거됨을 나타냅니다.

자세한 내용은 SERVICE_TRIGGER 구조를 참조하세요.

작업=action-type
지정된 트리거 이벤트가 발생할 때 수행할 작업을 지정합니다.

0x1 (SERVICE_TRIGGER_ACTION_SERVICE_START)
지정된 트리거 이벤트가 발생할 때 서비스를 시작합니다.

0x2 (SERVICE_TRIGGER_ACTION_SERVICE_STOP)
지정된 트리거 이벤트가 발생할 때 서비스를 중지합니다.

자세한 내용은 SERVICE_TRIGGER 구조를 참조하세요.

하위=trigger-subtype
트리거 이벤트 하위 형식을 식별하는 GUID를 지정합니다. 값은 TriggerType의 값에 따라 달라집니다.

TriggerType0x1(SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)이면 SubType은 디바이스 인터페이스 클래스를 식별하는 GUID를 지정합니다.

자세한 내용은 SERVICE_TRIGGER 구조를 참조하세요.

Dataitem=데이터 형식, 데이터
필요에 따라 서비스 트리거 이벤트에 대한 트리거 관련 데이터를 지정합니다.

TriggerType0x1(SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)이면 디바이스 인터페이스 클래스를 특정 하드웨어 ID 또는 호환 ID로 scope 위해 선택적 DataItem을 0x2(SERVICE_TRIGGER_DATA_TYPE_STRING) 데이터 형식으로 지정할 수 있습니다.

자세한 내용은 SERVICE_TRIGGER_SPECIFIC_DATA_ITEM 구조를 참조하세요.

AddTrigger 지시문을 사용하는 모범 사례는 디바이스 인터페이스 도착 시 서비스 시작을 트리거하는 것입니다. 자세한 내용은 Win32 서비스 디바이스와 상호 작용을 참조하세요.

참고

AddTrigger 구문은 Windows 10 버전 2004 및 전달에서만 사용할 수 있습니다.

FailureActions=service-failure-actions-install-section
필요에 따라 서비스가 실패할 때 서비스 컨트롤러가 수행해야 하는 작업을 지정합니다.

서비스 제어 관리자는 시스템이 부팅된 후 각 서비스가 실패한 횟수를 계산합니다. 초기화 기간 초 동안 서비스가 실패하지 않은 경우 개수가 0으로 다시 설정됩니다. 서비스가 N번째 시간 동안 실패하면 서비스 컨트롤러는 작업 목록의 요소 N에 지정된 작업을 수행합니다. N이 작업 수보다 큰 경우 서비스 컨트롤러는 목록의 마지막 작업을 반복합니다.

FailureActions 지시문에서 참조하는 service-failure-actions-install-section 의 형식은 다음과 같습니다.

[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 항목 및 값

ResetPeriod=초기화 기간
오류가 없는 경우 실패 횟수를 0으로 다시 설정하는 시간을 초 단위로 지정합니다. 초기화 기간을 지정하지 않으면 실패 횟수가 기본적으로 다시 설정되지 않습니다.

자세한 내용은 SERVICE_FAILURE_ACTIONSW 구조를 참조하세요.

NonCrashFailures=
서비스의 오류 작업 플래그 설정을 포함합니다. 설정은 실패 작업을 실행할 시기를 결정합니다. 0x0 값은 False를 나타내고 0x1 값은 True를 나타냅니다.

자세한 내용은 SERVICE_FAILURE_ACTIONS_FLAG 구조체(winsvc.h)를 참조하세요.

작업=failure-action-type,delay
서비스 제어 관리자가 수행할 수 있는 작업을 지정합니다. 여러 작업 항목이 정렬된 오류 작업 목록을 형성합니다. 자세한 내용은 SC_ACTION 구조를 참조하세요.

참고

FailureActions 구문은 Win32 서비스에만 사용할 수 있으며 Windows 11 버전 22H2부터 사용할 수 있습니다.

드라이버 로드 순서 지정

운영 체제는 다음과 같이 service-install-sectionStartType 값에 따라 드라이버를 로드합니다.

  • 부팅 시작 단계에서 운영 체제는 모든 0x0(SERVICE_BOOT_START ) 드라이버를 로드합니다.

  • 시스템 시작 단계에서 운영 체제는 먼저 PnP 관리자가 디바이스 노드(devnodes)를 찾는 모든 WDM 및 PnP 드라이버를 로드합니다(INF 파일에서 SERVICE_SYSTEM_START 0x01 지정하든 SERVICE_DEMAND_START 0x03 지정하는지 여부). 그런 다음 운영 체제는 나머지 모든 SERVICE_SYSTEM_START 드라이버를 로드합니다.

  • 자동 시작 단계에서 운영 체제는 나머지 SERVICE_AUTO_START 드라이버를 모두 로드합니다.

종속성에 대한 자세한 내용은 드라이버 로드 순서 지정을 참조하세요.

부팅 시나리오에 따라 부팅 시 드라이버의 StartType 승격

부팅 시나리오에 따라 BootFlags 레지스트리 값을 사용하여 운영 체제가 드라이버의 StartType 값을 0x0(SERVICE_BOOT_START)로 승격해야 하는 시기를 제어할 수 있습니다. 16진수 값으로 표현된 다음 숫자 값 중 하나 이상(ORed)을 지정할 수 있습니다.

  • 0x1(CM_SERVICE_NETWORK_BOOT_LOAD)은 네트워크에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x2(CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD)은 VHD에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x4(CM_SERVICE_USB_DISK_BOOT_LOAD)은 USB 디스크에서 부팅하는 경우 드라이버를 로 승격해야 했음을 나타냅니다.

  • 0x8(CM_SERVICE_SD_DISK_BOOT_LOAD)은 SD 스토리지에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x10(CM_SERVICE_USB3_DISK_BOOT_LOAD)은 USB 3.0 컨트롤러의 디스크에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x20(CM_SERVICE_MEASURED_BOOT_LOAD)은 측정된 부팅을 사용하는 동안 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x40(CM_SERVICE_VERIFIER_BOOT_LOAD)은 검증 도구 부팅을 사용하도록 설정한 상태에서 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

  • 0x80(CM_SERVICE_WINPE_BOOT_LOAD)은 WinPE로 부팅하는 경우 드라이버를 승격해야 했음을 나타냅니다.

service-install-섹션에는 다음과 같은 일반적인 형식이 있습니다.

[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

참고

이 구문은 Windows 버전에서만 사용해야 하며 Windows 11 빌드 25381보다 오래된 빌드에서만 사용해야 합니다. Windows 11 빌드 25381 이상에서는 BootFlags 지시문을 사용합니다.

이벤트 로깅 등록

AddService 지시문은 INF 파일의 다른 곳에서 event-log-install-section을 참조할 수도 있습니다. 이러한 각 섹션의 형식은 다음과 같습니다.

[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]...]
 ...

일반적인 디바이스/드라이버 INF 파일의 경우 event-log-install-sectionAddReg 지시문만 사용하여 드라이버에 대한 이벤트 로깅 메시지 파일을 설정합니다. 이 이벤트 로깅 add-registry-섹션 에는 다음과 같은 일반적인 형식이 있습니다.

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

특히 섹션에서는 다음과 같이 디바이스/드라이버에 대해 만든 레지스트리 하위 키에 두 개의 값 항목을 추가합니다.

  • EventMessageFile이라는 값 항목은 FLG_ADDREG_TYPE_EXPAND_SZ 0x00020000 지정된 대로 REG_EXPAND_SZ 형식입니다. 큰따옴표(")로 묶인 해당 값은 시스템에서 제공하는 IoLogMsg.dll (그러나 다른 로깅 DLL을 드라이버 이진 파일과 연결할 수 있음)를 연결합니다. 일반적으로 이러한 각 파일의 경로는 다음과 같이 지정됩니다.

    %%SystemRoot%%\System32\IoLogMsg.dll

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

  • TypesSupported라는 값 항목은 FLG_ADDREG_TYPE_DWORD 0x00010001 지정된 대로 REG_DWORD 형식입니다.

    드라이버의 경우 이 값은 7이어야 합니다. 이 값은 EVENTLOG_AUDIT__XXX_ 비트를 설정하지 않고 EVENTLOG_SUCCESS, EVENTLOG_ERROR_TYPE, EVENTLOG_WARNING_TYPE 및 EVENTLOG_INFORMATION_TYPE 비트 OR과 동일합니다.

또한 event-log-install-sectionDelReg 지시문을 사용하여 드라이버 이진 파일이 새로 설치된 드라이버로 대체되는 경우 기존 EventMessageFileTypesSupported 값 항목을 명시적으로 삭제하여 이전에 설치된 이벤트 로그 메시지 파일을 제거할 수도 있습니다. ( INF DelService 지시문도 참조하세요.)

BitReg 지시문은 INF-기록기 정의 이벤트 로그 설치-섹션 내에서도 유효하지만 디바이스 드라이버 이벤트 로깅에 대한 표준 값 항목은 비트 마스크가 아니므로 거의 사용되지 않습니다.

예제

이 예제에서는 DDInstall 예제의 앞부분에서 이미 설명한 대로 AddService 지시문에서 참조하는 service-install 및 event-log-install 섹션을 보여 있습니다. 서비스.

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

추가 정보