INF AddReg ディレクティブ
AddReg ディレクティブは、レジストリ情報の変更または作成に使用される 1 つ以上の INF ライター定義の add-registry セクションを参照します。
[DDInstall] |
[DDInstall.HW] |
[DDInstall.CoInstallers] |
[ClassInstall32] |
[ClassInstall32.ntx86] |
[ClassInstall32.ntia64] | (Windows XP and later versions of Windows)
[ClassInstall32.ntamd64] | (Windows XP and later versions of Windows)
[ClassInstall32.ntarm] | (Windows 8 and later versions of Windows)
[ClassInstall32.ntarm64] | (Windows 10 version 1709 and later versions of Windows)
[install-interface-section] |
[service-install-section] |
[event-log-install] |
[add-interface-section]
AddReg=add-registry-section[,add-registry-section] ...
各 add-registry-section には、次の操作を行うエントリを含めることができます。
レジストリに新しいキー(場合によっては初期値のエントリ)を追加します。
既存のレジストリ キーに新しい値エントリを追加します。
レジストリ内の特定のキーの既存の値エントリを変更します。
AddReg ディレクティブによって参照される各名前付き add-registry-section の形式は次のとおりです。
[add-registry-section]
reg-root,[subkey],[value-entry-name],[flags],[value][,[value]]
reg-root,[subkey],[value-entry-name],[flags],[value][,[value]]
...
[[add-registry-section.security]
"security-descriptor-string"]
add-registry-section には、それぞれ個別の行に任意の数のエントリを含めることができます。 INF には、1 つ以上の省略可能な add-registry-section.security セクションを含めることもできます。各セクションでは、名前付き add-registry-section 内で説明されているすべてのレジストリ値に適用されるセキュリティ記述子を指定します。
エントリ
reg-root
このエントリで指定された他の値のレジストリ ツリーのルートを識別します。 値は次のいずれかになります。
HKCR
HKEY_CLAS ROOTの省略形
HKCU
HKEY_CURRENT_USERの省略形
HKLM
HKEY_LOCAL_MACHINEの省略形
HKU
HKEY_USERS の省略形
HKR
次の表に示すように、この省略形を使用して指定されたキーが、この AddReg ディレクティブが表示される INF セクションに関連付けられているレジストリ キーを基準とする相対的なものです。
AddReg ディレクティブを含む INF セクション | HKR によって参照されるレジストリ キー |
---|---|
INF DDInstall セクション | デバイスの ソフトウェア キー |
INF DDInstall.HW セクション | デバイスの ハードウェア キー |
INF [service-install-section] セクション | サービス キー |
INF [event-log-install] セクション | EventLog キー |
INF [add-interface-section] section | デバイス インターフェイスのレジストリ キー |
Note
HKR は INF DefaultInstall セクション から参照される add-registry-section では使用できません。
HKEY_LOCAL_MACHINEルート下に格納されるドライバー情報の詳細については、デバイスとドライバーのレジストリツリーとキーを参照してください。
subkey
このオプション値は、INFのStringsセクションで定義された%strkey%トークンか、与えられたreg-rootの下のレジストリパス(key1\key2\key3.)として形成され、以下のいずれかを指定する:
- 指定されたレジストリ パスの末尾にあるレジストリに追加する新しいサブキー。
- このエントリで指定された追加の値が書き込まれる既存のサブキー (指定されたサブキーの既存の名前付き値エントリの値を置き換える可能性があります)。
- レジストリに追加する新しいサブキーと、その初期値エントリの両方。
value-entry-name
この省略可能な値は、指定された (既存の) サブキー 内の既存の値エントリに名前を付けるか、指定した サブキー に追加する新しい値エントリの名前を作成します(既に存在するか、レジストリに追加する新しいキーであるかに関係なく)。 この値は、"引用文字列" またはINFのStringsセクションで定義されている%strkey%トークンとして表現することができます。 (文字列型の値に対してこれを省略した場合、 value-entry-name はこのキーの既定の "名前なし" 値エントリになります)。
オペレーティング システムでは、システム定義の特殊な value-entry-name キーワード (keyword) がサポートされています。 詳細については、この記事の「備考」セクションを参照してください。
flags
この省略可能な 16 進数の値は、システム定義の低ワードおよび高ワード フラグ値の ORed ビットマスクとして表され、値エントリのデータ型を定義したり、追加レジストリ操作を制御したりします。
これらの各フラグのビットマスク値は次のとおりです。
0x00000001 (FLG_ADDREG_BINVALUETYPE)
指定された値は "生" データです。 (この値は、FLG_ADDREG_TYPE_BINARYと同じです)。
0x00000002 (FLG_ADDREG_NOCLOBBER)
指定された値が既存の値エントリの値を置き換えないようにします。
0x00000004 (FLG_ADDREG_DELVAL)
指定した サブキー をレジストリから削除するか、指定したレジストリ サブキー から指定した value-entry-name を削除します。
0x00000008 (FLG_ADDREG_APPEND)
指定した 値 を既存の名前付き値エントリの値に追加します。 このフラグは、FLG_ADDREG_TYPE_MULTI_SZも設定されている場合にのみ有効です。 指定した文字列値が既に存在する場合、追加されません。
0x00000010 (FLG_ADDREG_KEYONLY)
指定されたサブキーを作成しますが、指定された value-entry-name や value は無視します。
0x00000020 (FLG_ADDREG_OVERWRITEONLY)
指定した value-entry-name が指定されたサブキーに既に存在する場合にのみ、指定された値 にリセットします。
0x00001000 (FLG_ADDREG_64BITKEY)
(Windows XP 以降のバージョンの Windows)。64 ビット レジストリで指定した変更を行います。 指定しない場合、ネイティブ レジストリが変更されます。
0x00002000 (FLG_ADDREG_KEYONLY_COMMON)
(Windows XP 以降のバージョンの Windows)。これはFLG_ADDREG_KEYONLYと同じですが、INF DelReg ディレクティブの del-registry セクションでも機能します。
0x00004000 (FLG_ADDREG_32BITKEY)
(Windows XP 以降のバージョンの Windows)。64 ビット レジストリで指定した変更を行います。 指定しない場合、ネイティブ レジストリが変更されます。
0x00000000 (FLG_ADDREG_TYPE_SZ)
指定された値のエントリや値は、REG_SZ型です。
Note
この値は、指定した値エントリの既定の型であるため、フラグ値は、この型の値エントリを操作するadd-registryセクション の任意の reg-root= 行から省略できます。
0x00010000 (FLG_ADDREG_TYPE_MULTI_SZ)
指定された値エントリまたは値は、レジストリの種類 REG_MULTI_SZです。 次の値フィールドには、コンマで区切られた文字列のリストを指定できます。 この仕様では、指定された文字列値に NULL ターミネータは必要ありません。
0x00020000 (FLG_ADDREG_TYPE_EXPAND_SZ)
指定された値エントリ名または値は、REG_EXPAND_SZレジストリの種類です。
0x00010001 (FLG_ADDREG_TYPE_DWORD)
指定された値エントリ名または値は、REG_DWORDレジストリの種類です。
0x00020001 (FLG_ADDREG_TYPE_NONE)
指定された値エントリ名または値は、REG_NONEレジストリの種類です。
value
必要に応じて、指定したレジストリ キーに追加する、指定した value-entry-name の新しい値を指定します。 このような値には、既存のキー内の既存の名前付き値エントリの "置換" 値、既存のキー内の既存の名前付きREG_MULTI_SZ型の値エントリに追加する値 (フラグ値0x00010008)、既存のキーに書き込む新しい値エントリ、またはレジストリに追加する新しいサブキーの初期値エントリを指定できます。
このような値の式は、フラグ に指定されたレジストリの種類によって異なります。次に示します。
レジストリ文字列型の値は、「引用符で囲まれた文字列」 または INF ファイルの Strings セクションで定義された %strkey% トークンとして表すことができます。 このような INF で指定された値には、各文字列の末尾に NULL ターミネータを含める必要はありません。
レジストリの数値型の値は、16 進数 (0x 表記を使用) または 10 進数で表すことができます。
security-descriptor-string
名前付き add-registry-section によって作成されたすべてのレジストリ エントリに適用されるセキュリティ記述子を指定します。 security-descriptor-string は、DACL (D:) セキュリティ コンポーネントを示すトークンを含む文字列です。
add-registry-section.security セクションが指定されていない場合、レジストリ エントリは親キーのセキュリティ設定を継承します。
add-registry-section.security セクションが指定されている場合は、デバイスとシステム サービス パックのインストールとアップグレードを実行できるように、次の ACE を含める必要があります。
- (A;;ジョージア 州;;;SY) - ローカル システムへのすべてのアクセスを許可します。
- (A;;ジョージア 州;;;BA) - 組み込み管理者へのすべてのアクセスを許可します。
特権のないユーザーに書き込みアクセス権を付与する ACE 文字列は指定しないでください。
セキュリティ記述子文字列の詳細については、「セキュリティ記述子定義言語 (Windows)」を参照してください。 セキュリティ記述子文字列の形式については、「セキュリティ記述子定義言語 (Windows)」を参照してください。
セキュリティ記述子を指定する方法の詳細については、「セキュリティで保護されたデバイスのインストールの作成」を参照してください。
解説
AddReg ディレクティブは、上記の正式な構文ステートメントに示されているセクションのいずれかで指定できます。 このディレクティブは、次の INF ライター定義セクションのいずれかで指定することもできます。
INF DDInstall.サービスセクションの AddService ディレクティブで参照される サービス インストール セクション または イベント ログ インストール セクション。
INF DDInstall.InterfacesセクションのAddInterfaceディレクティブで参照されるadd-interface-sectionです。
INF InterfaceInstall32 セクションで参照される install-interface-section。
各 add-registry セクション名は INF ファイルに対して一意である必要がありますが、同じ INF の他のセクションで AddReg ディレクティブ によって参照できます。 各セクション名は、INF ファイルの一般的な構文規則 で説明されているセクション名を定義するための一般的な規則に従う必要があります。
Note
フラグ値の下位ワードの下位ビットは、文字データとバイナリ データを区別します。
定義済みの REG_XXX 型の 1 つ以外のレジストリ型の数を表すには、フラグ ORed の上位ワードに新しい型番号を指定し、その下位ワードにFLG_ADDREG_BINVALUETYPEを指定します。
このような値のデータは、コンマで区切られたバイトシーケンスとしてバイナリ形式で指定する必要があります。 たとえば、0x38 などの新しいレジストリ データ型の 16 バイトのデータを値エントリとして格納する場合、add-registry セクション エントリは次のようになります。
HKR,,MYValue,0x00380001,1,0,2,3,4,5,6,7,8,9,A,B,C,D,E,F
この手法を使用して、数値の新しいレジストリ型を定義できますが、REG_EXPAND_SZ、REG_MULTI_SZ、REG_NONEまたはREG_SZ型の値には使用できません。 これらの型について詳しくは、「レジストリ値の型」をご覧ください。
特殊な value-entry-name キーワード (keyword)
特別なキーワード (keyword)は、HKR AddReg エントリで使用するために定義されます。 これらのキーワード (keyword)を使用するエントリの形式は次のとおりです。
[HKR,,DeviceCharacteristics,0x10001,characteristics]
[HKR,,DeviceType,0x10001,device-type]
[HKR,,Security,,security-descriptor-string]
[HKR,,UpperFilters,0x10000,service-name]
[HKR,,LowerFilters,0x10000,service-name]
[HKR,,Exclusive,0x10001,exclusive-device]
[HKR,,EnumPropPages32,,"prop-provider.dll,provider-entry-point"]
[HKR,,LocationInformationOverride,,"text-string"]
[HKR,,ResourcePickerTags,,"text-string"]
[HKR,,ResourcePickerExceptions,,"text-string"] ,
次に、これらの特殊なキーワード (keyword)を使用する HKR AddReg エントリについて説明します。
DeviceCharacteristics
DeviceCharacteristics HKR AddReg エントリは、デバイスの特性を指定します。 特性値は、Wdm.h および Ntddk.h で定義されている 1 つ以上の FILE_* ファイル特性値で OR を使用した結果である数値です。
INF では、次の値のみを指定できます。
#define FILE_REMOVABLE_MEDIA 0x00000001
#define FILE_READ_ONLY_DEVICE 0x00000002
#define FILE_FLOPPY_DISKETTE 0x00000004
#define FILE_WRITE_ONCE_MEDIA 0x00000008
#define FILE_DEVICE_SECURE_OPEN 0x00000100
これらの値の詳細については、「IoCreateDevice」 を参照してください。
DeviceCharacteristics エントリを使用して指定される特性値は、デバイス スタックにデバイス オブジェクトを作成する IoCreateDevice の各呼び出しで指定された値を持つ ORed です。 OR 操作は、すべてのデバイス オブジェクトが追加された後、デバイスが開始される前に発生します。
特性値 (値 0 を含む) は、関連付けられたクラス インストーラー INF で指定されたクラス全体のデバイス特性をオーバーライドします。
デバイス特性の詳細については、「デバイス特性の指定」 を参照してください。
DeviceType
DeviceType HKR AddReg エントリは、デバイスのデバイスの種類を指定します。 デバイスの種類は、Wdm.h または Ntddk.h で定義されている FILE_DEVICE_XXX 定数の数値です。 0x10001のフラグ値は、デバイスの種類の値が REG_DWORDであることを指定します。 詳細については「デバイスの種類の指定」を参照してください。
クラス インストーラー INF では、クラス内のデバイスのすべてまたはほぼすべてのデバイスに適用されるデバイスの種類を指定する必要があります。 たとえば、クラス内のデバイスの種類がFILE_DEVICE_CD_ROMの場合は、0x02の デバイスの種類 を指定します。 デバイス INF で デバイスの種類 値が指定されている場合は、クラス インストーラーによって設定された値 (存在する場合) がオーバーライドされます。 クラスまたはデバイス INF が デバイスタイプ 値を指定する場合、PnP マネージャーは、デバイスのバス ドライバーによって作成された 物理デバイス オブジェクト (PDO) にその型を適用します。
セキュリティ
Security HKR AddReg エントリは、デバイスのセキュリティ記述子を指定します。 security-descriptor-string は、DACL (D:) セキュリティ コンポーネントを示すトークンを含む文字列です。
クラス インストーラー INF では、デバイス クラスのセキュリティ記述子を指定できます。 デバイス INF は、クラスのセキュリティをオーバーライドする個々のデバイスのセキュリティ記述子を指定できます。 クラスまたはデバイス INF で セキュリティ記述子文字列 が指定されている場合、PnP マネージャーは、デバイスのすべてのデバイス オブジェクト (DOs) に記述子を伝達します。 これには、関数デバイス オブジェクト (FDO)、オプションの フィルター DOs、および PDO が含まれます。
セキュリティ記述子文字列の形式については、Microsoft Windows SDK のドキュメントを参照してください。
セキュリティ記述子を指定する方法の詳細については、「セキュリティで保護されたデバイスのインストールの作成」を参照してください。
UpperFilters
UpperFilters HKR AddReg エントリは、PnP 上位フィルター ドライバーを指定します。 DDInstall.HW セクション のこのエントリは、1つ以上のデバイス固有の下位フィルタードライバーを定義します。 ClassInstall32 セクションで、このエントリは1つ以上のクラス全体の下位フィルタドライバを定義します。
LowerFilters
LowerFilters HKR AddReg エントリは、PnP 下位フィルター ドライバーを指定します。 DDInstall.HWセクション のこのエントリは、1つ以上のデバイス固有の下位フィルタードライバーを定義します。 ClassInstall32 セクションで、このエントリは1つ以上のクラス全体の下位フィルタドライバを定義します。
[排他]
排他 HKR AddReg エントリが存在し、"1" に設定されている場合は、デバイスが 排他的デバイス であることを指定します。 それ以外の場合、デバイスは排他的として扱われません。 詳細については、「デバイス オブジェクトへの排他アクセスの指定」を参照してください。
EnumPropPages32
EnumPropPages32 HKR AddReg エントリは、デバイス固有のプロパティ ページ プロバイダーであるダイナミック リンク ライブラリ (DLL) ファイルの名前を指定します。 また、DLL によって実装される ExtensionPropSheetPageProc コールバック関数の名前も指定します。 これらの関数の詳細については、Windows 7 および .NET Framework 4.0 用の Microsoft Windows ソフトウェア開発キット (SDK) を参照してください。
重要
DLL の名前と ExtensionPropSheetPageProc コールバック関数の両方を引用符 (" ") で囲む必要があります。
LocationInformationOverride
(Windows XP 以降のバージョンの Windows) LocationInformationOverride HKR AddReg エントリを使用して、デバイスの物理的な場所を記述するテキスト文字列を指定できます。 デバイスのバス ドライバーが IRP_MN_QUERY_DEVICE_TEXT 要求に応答して提供する LocationInformation 文字列をオーバーライドします。
ResourcePickerTags
ResourcePickerTags HKR AddReg エントリは、デバイスのリソース ピッカー タグを指定します。
ResourcePickerExceptions
ResourcePickerExceptions HKR AddReg エントリは、デバイスで許可されるリソースの競合を指定します。
例
AddReg 指示文は、このINFの DDInstall.Services セクションの AddService 指示文によって参照されるINFライタ定義セクションの下で、この例の (SCSI) Miniport_EventLog_AddReg セクションを参照しました。
[Miniport_EventLog_AddReg]
HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll"
; double quotation marks delimiters in preceding entry prevent truncation
; if line wraps
HKR,,TypesSupported,0x00010001,7
例に示すように、フラグ値を 16 進数形式で指定することも、%FLG_ADDREG_TYPE_DWORD%
各 INF ファイルの [Strings] セクションなどの文字列プレースホルダーを定義することもできます。