次の方法で共有


INF AddService ディレクティブ

Note

このディレクティブは、モデムやディスプレイ モニターなどのドライバーを必要としないデバイスをインストールする INF ファイルでは使用されません。

AddService ディレクティブは、 INF DDInstall.Services セクション または INF DefaultInstall.Services セクション内で使用されます。 ドライバーに関連付けられているサービスの特性 (サービスの読み込み方法とタイミング、他の基になるレガシ ドライバーまたはサービスへの依存関係など) を指定します。 必要に応じて、このディレクティブは、デバイスのイベント ログ サービスも設定します。

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

エントリ

ServiceName
インストールするサービスの名前を指定します。 この名前は、別の INF ファイルによってインストールされたサービスと競合する可能性が低いほど一意である必要があります。 たとえば、サービス名には、プレフィックスまたはサフィックスとして会社名の短い省略形を含めることができます。 この名前はローカライズしないでください。 システムのローカル言語に関係なく、同じである必要があります。

flags
Setupapi.hで定義されている、次のシステム定義フラグの 1 つ以上 (ORed) を 16 進数の値として指定します。

0x00000001 (SPSVCINST_TAGTOFRONT)
名前付きサービスのタグをグループ注文一覧の先頭に移動して、そのグループ内で最初に読み込まれることを確認します (この INF 仕様で後でインストールされたデバイスが置き換えがない限り)。 WDM ドライバーを備えた PnP デバイスとデバイスのみをインストールする INF ファイルでは、このフラグを設定しないでください。

0x00000002 (SPSVCINST_ASSOCSERVICE)
この INF ファイルによってインストールされるデバイスの PnP 関数ドライバー (またはレガシ ドライバー) として名前付きサービスを割り当てます。

サービスがデバイスのファンクション ドライバーであることを示すために、サービスは AddService ディレクティブで SPSVCINST_ASSOC SERVICE フラグを指定する必要があります。 フィルター ドライバーやその他のドライバー コンポーネントなどのサービスでは、フラグを使用しないでください。

すべてのデバイス ドライバー INF には、関連付けられたサービスが 1 つだけ必要です。 INF が 拡張 INF の場合、または Include/Needs ディレクティブを使用して、関連付けられたサービスを 別の INF から継承する場合、INF は関連付けられたサービスを必要としません。 ファンクション ドライバーを必要としないデバイスの場合、NULL ドライバーは、関連付けられているサービスとして次のように指定できます。

AddService = ,2

0x00000008 (SPSVCINST_NOCLOBBER_DISPLAYNAME)
このサービスがシステムに既に存在する場合は、指定されたサービスの (省略可能な) フレンドリ名を上書きしないでください。

0x00000010 (SPSVCINST_NOCLOBBER_STARTTYPE)
この名前付きサービスがシステムに既に存在する場合は、指定されたサービスの開始の種類を上書きしないでください。

0x00000020 (SPSVCINST_NOCLOBBER_ERRORCONTROL)
この名前付きサービスがシステムに既に存在する場合は、指定されたサービスのエラー制御値を上書きしないでください。

0x00000040 (SPSVCINST_NOCLOBBER_LOADORDERGROUP)
この名前付きサービスがシステムに既に存在する場合は、指定されたサービスの負荷オーダーグループを上書きしないでください。 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) 関数ドライバーまたはフィルター ドライバーを実装するサービスを開始することはできません。 それ以外の場合は、このフラグを使用して、Service Control Manager (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になります。

解説

システム定義の大文字と小文字を区別しない拡張子は、クロスオペレーティングシステムおよび/またはクロスプラットフォームINFファイルの AddService ディレクティブを含む DDInstall.Services セクションに挿入して、プラットフォーム固有またはOS固有のインストールを指定することができます。

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 には、次に示すように、少なくとも ServiceTypeStartTypeErrorControl、および ServiceBinary エントリが必要です。 ただし、残りのエントリはオプションです。

Service-Install セクションのエントリと値

DisplayName=
サービス/ドライバーのフレンドリ名を指定します。通常は、ローカライズを容易にするために、INF ファイルの Strings セクションで定義された %strkey% トークンとして表されます。

Description=description-string
必要に応じて、サービスを記述する文字列を指定します。通常は、INF ファイルの Strings セクションで定義された %strkey% トークンとして表されます。

この文字列は、 DisplayNameよりもサービスに関する詳細情報をユーザーに 提供します。 たとえば、 DisplayName は "DHCP クライアント" のようなもので、説明は "IP アドレスと DNS 名を登録および更新してネットワーク構成を管理する" のような場合があります。

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.h および Ntddk.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 で 表される、サービスのバイナリのパスを指定します。

ディリド 番号は、「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]...
新しくインストールされたサービスに関連するレジストリ情報が設定されている 1 つ以上の INF ライター定義 の 追加レジストリ セクション を参照します。 詳しくは、「INF AddReg ディレクティブ」をご覧ください。

DelReg=del-registry-section[,del-registry-section]...
既にインストールされているサービスの関連するレジストリ情報が削除される、1 つ以上の 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など、"標準" の読み込み順序グループの 1 つを指定できます。

一般に、このエントリは、WDM ドライバーを持つデバイスまたは排他的に PnP デバイスの場合は、このようなグループにレガシ依存関係がない限り不要です。 ただし、このエントリは、特定の順序でドライバーのグループを読み込むことでデバイスの検出がサポートされている場合に役立ちます。

LoadOrderGroupの詳細については、「ドライバーの読み込み順序の指定」を参照してください。

Dependencies=depend-on-item-name[,depend-on-item-name]...依存関係リスト内の各 依存項目名 項目は、デバイス/ドライバーが依存するサービスまたは読み込み順序グループの名前を指定します。

項目に依存する名前 でサービスが指定されている場合、このドライバーを開始する前に実行する必要があるサービス。 たとえば、システム提供の Win32 TCP/IP 印刷サービスの INF は、基になる (カーネル モード) TCP/IP トランスポート スタックのサポートに依存します。 したがって、TCP/IP 印刷サービスの INF は、このエントリを Dependencies=TCPIPとして指定します。

項目依存名 は、このデバイス/ドライバーが依存する読み込み順序グループを指定できます。 このようなドライバーは、指定されたグループの少なくとも 1 つのメンバーが開始された場合にのみ起動されます。 グループ名の前にプラス記号 (+) を付けます。 たとえば、システム RAS サービス INF には、 依存関係 = +NetBIOSGroup、RpcSS などのエントリがあり、読み込み順序グループとサービスの両方が一覧表示されます。

Security="security-descriptor-string"
サービスに適用するセキュリティ記述子を指定します。 このセキュリティ記述子は、サービスの開始、停止、構成などの操作を実行するために必要なアクセス許可を指定します。 security-descriptor-string 値は、DACL (D:) セキュリティ コンポーネントを示すトークンを含む文字列です。

セキュリティ記述子文字列の詳細については、「セキュリティ記述子定義言語 (Windows)」を参照してください。 セキュリティ記述子文字列の形式については、「セキュリティ記述子定義言語 (Windows)」を参照してください。

セキュリティ記述子を指定する方法の詳細については、 「セキュリティで保護されたデバイスのインストールの作成」を参照してください。

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

Note

この値は Win32 サービス でのみ使用でき、Windows 7 以降でのみ使用できます。

一覧の各 特権名 は、サービスに必要な特権の名前です。 特権名の一覧については、「特権定数 (Windows)」を参照してください。 各特権名には、テキスト名のみが必要です。 たとえば、特権名は "SeAuditPrivilege" として書き込む必要がありますが、Standard Edition_AUDIT_NAMEは記述しないでください。

サービスに必要な特権の詳細については、「SERVICE_REQUIRED_PRIVILEGES_INFO (Windows)」を参照してください。

ServiceSidType=

Note

この値は Win32 サービス でのみ使用でき、Windows 10 バージョン 2004 以降でのみ使用できます。

このエントリは、 SERVICE_SID_INFOで説明されている任意の有効な値を使用できます。

DelayedAutoStart=

Note

この値は 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=

Note

この値はカーネル モード ドライバー サービスでのみ使用でき、Windows 11 ビルド 25381 以降でのみ使用できます。

必要に応じて、オペレーティング システムがドライバーの StartType 値を0x0 (SERVICE_BOOT_START) に昇格させるタイミングを指定します。 次の数値の 1 つ以上 (ORed) を 16 進数で表して指定できます。

  • 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
次の一覧に示すように、サービス トリガー イベントの種類を、10 進数または 16 進表記で表される次のいずれかの数値で指定します。

0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)
指定したデバイス インターフェイス クラスのデバイスが到着したとき、またはシステムの起動時にイベントがトリガーされることを示します。

詳細については、 SERVICE_TRIGGER構造を参照してください。

Action=action-type
指定したトリガー イベントが発生したときに実行するアクションを指定します。

0x1 (SERVICE_TRIGGER_ACTION_SERVICE_START)
指定したトリガー イベントが発生したときにサービスを開始します。

0x2 (SERVICE_TRIGGER_ACTION_SERVICE_STOP)
指定したトリガー イベントが発生したときにサービスを停止します。

詳細については、 SERVICE_TRIGGER構造を参照してください。

SubType=trigger-subtype
トリガー イベント サブタイプを識別する GUID を指定します。 値は TriggerType の値によって異なります。

TriggerType0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL) の場合、 SubType はデバイス インターフェイス クラスを識別する GUID を指定します。

詳細については、 SERVICE_TRIGGER構造を参照してください。

DataItem=データ型、データ
必要に応じて、サービス トリガー イベントのトリガー固有のデータを指定します。

TriggerType0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL) の場合、オプションの DataItem をデータ型の 0x2 (SERVICE_TRIGGER_DATA_TYPE_STRING) で指定して、デバイス インターフェイス クラスのスコープを特定のハードウェア ID または互換性のある ID にすることができます。

詳細については、「SERVICE_TRIGGER_SPECIFIC_DATA_ITEM構造体」を参照してください。

AddTrigger ディレクティブを使用する場合のベスト プラクティスは、デバイス インターフェイスの到着時にサービスの開始をトリガーすることです。 詳細については、「Win32 Services のデバイスとの対話」を参照してください。

Note

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=reset-period
失敗がない場合にエラー数を 0 にリセットする時間を秒単位で指定します。 リセット期間が指定されていない場合、エラー数は既定ではリセットされません。

詳細については、 SERVICE_FAILURE_ACTIONSW構造を参照してください。

NonCrashFailures=
サービスの失敗アクション フラグ設定が含まれています。 この設定は、エラー アクションを実行するタイミングを決定します。 0x0の値は False を示し、0x1の値は True を示します。

詳細については、 SERVICE_FAILURE_ACTIONS_FLAG構造体 (winsvc.h)を参照してください。

アクション=failure-action-type遅延
サービス コントロール マネージャーが実行できるアクションを指定します。 複数のアクション エントリが、エラー アクションの順序付きリストを形成します。 詳細については、 SC_ACTION 構造に関するページを参照してください。

Note

FailureActions 構文は Win32 サービス でのみ使用でき、Windows 11 バージョン 22H2 以降で使用できます。

ドライバーの読み込み順序の指定

オペレーティング システムは、次のように、 service-install-sectionStartType 値に従ってドライバーを読み込みます。

  • 起動の開始フェーズ中に、オペレーティング システムはすべての 0x0 (SERVICE_BOOT_START) ドライバーを読み込みます。

  • システムの開始フェーズ中に、オペレーティング システムはまず、PnP マネージャーがデバイス ノード (開発ノード) を検索するすべての WDM ドライバーと PnP ドライバーを読み込みます (INF ファイルでSERVICE_SYSTEM_STARTの 0x01 を指定するか、SERVICE_DEMAND_STARTに 0x03 を指定するか)。 その後、オペレーティング システムは、残ったSERVICE_SYSTEM_STARTドライバーをすべて読み込みます。

  • 自動開始フェーズ中に、オペレーティング システムによって、すべての残存SERVICE_AUTO_START ドライバーが読み込まれます。

Dependenciesの詳細については、「ドライバーの読み込み順序の指定」を参照してください。

ブート シナリオに応じて起動時にドライバーの StartType を昇格する

ブート シナリオに応じて、 BootFlags レジストリ値を使用して、オペレーティング システムがドライバーの StartType 値を0x0 (SERVICE_BOOT_START) に昇格させるタイミングを制御できます。 次の数値の 1 つ以上 (ORed) を 16 進数で表して指定できます。

  • 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-section には、次の一般的な形式があります。

[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

Note

この構文は、Windows 11 ビルド 25381 よりも古い Windows バージョンおよびビルドでのみ使用してください。 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-section では AddReg ディレクティブのみを使用して、ドライバーのイベント ログ メッセージ ファイルを設定します。 このイベント ログ の add-registry-section には、次の一般的な形式があります。

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

特に、このセクションでは、次のように、デバイス/ドライバー用に作成されたレジストリ サブキーに 2 つの値エントリを追加します。

  • 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-section では、 DelReg ディレクティブを使用して、ドライバー バイナリが新しくインストールされたドライバーに置き換えられる場合は、既存の EventMessageFileTypesSupported 値のエントリを明示的に削除することで、以前にインストールされたイベント ログ メッセージ ファイルを削除することもできます。 (「INF DelService ディレクティブ」も参照してください。)

BitReg ディレクティブは、INF ライターで定義された event-log-install-セクション内でも有効ですが、ほとんど使用されません。 これは、デバイス ドライバー イベント ログの標準値エントリがビットマスクではないためです。

この例は、前述の DDInstall.Servicesの例で示したように、 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"

関連項目