モニター EDID の製造元のオーバーライド

この記事では、ベンダーと製造元が INF ファイルを介して任意のモニターの拡張ディスプレイ識別データ (EDID) をオーバーライドする方法について説明します。 サンプル INF ファイル (Monsamp.inf) が用意されています。

すべてのモニター (アナログまたはデジタル) は、モニター識別子、製造元データ、ハードウェア識別子、タイミング情報などの情報を含む EDID をサポートする必要があります。 このデータは、 VESAが指定した形式でモニターの EEPROM に格納されます。

モニターは、Windows コンポーネント、ディスプレイ ドライバー、および一部のユーザー モード アプリケーションに EDID を提供します。 たとえば、初期化中にモニター ドライバーは、Windows ディスプレイ ドライバー モデル (WDDM) ドライバーの明るさクエリ インターフェイスとデバイス ドライバー インターフェイス (DDI) のサポート (EDID) を照会します。 モニターのEEPROMのEDID情報が誤っている、または無効な場合、誤った表示モードの設定などの問題が発生する可能性があります。

EDIDを修正するには、次の2つの方法があります。

  • 正しい EDID を使用して Enterprise Edition PROM を再フラッシュし、モニターを顧客に返す、モニターを製造元に返送します。
  • より良い解決策は、製造元が正しい EDID 情報を含む INF ファイルを実装し、お客様によってモニターに接続されているコンピューターにダウンロードしてもらうことです。 Windows は、更新された EDID 情報を INF から抽出し、EEPROM EDID 情報を使用する代わりにコンポーネントに提供し、Enterprise Edition PROM EDID を効果的にオーバーライドします。

ベンダーは、EDID 情報の置き換えに加えて、モニター名と推奨されるディスプレイ解像度のオーバーライドを提供できます。 このようなオーバーライドは、Windows Update または発送ボックス内のデジタル メディアを通じてお客様が頻繁に利用できるようになり、ここで述べた EDID オーバーライドより優先されます。 詳細については、モニター INF ファイル セクションを参照してください。

EDID 形式

EDID データは、1 つ以上の 128 バイト ブロックとして書式設定されます。

  • EDID バージョン 1.0 から 1.2 は、VESA 仕様に従って、単一のデータ ブロックで構成されます。
  • EDID バージョン 1.3 または拡張 EDID (E-EDID) では、製造元はプライマリ ブロックに加えて1つ以上の拡張ブロックを指定できます。

各ブロックには番号が付けられます。最初のブロックの番号は0から始まります。 EDID情報を更新するには、製造元の INF が更新するブロックの番号を指定し、元のブロックを置き換える128 バイトの EDID データを提供します。 モニター ドライバーは、レジストリから修正されたブロックの更新されたデータを取得し、残りのブロックにはEEPROMデータを使用します。

EDID の更新

INF を使用して EDID を更新する場合。

  1. モニターの製造元は、更新された EDID 情報を含む INF を実装し、ユーザーのコンピューターにファイルをダウンロードします。 このダウンロードは、Windows Update を使用するか、モニターと共に CD を出荷することによって実行できます。
  2. デバイスのインストールでは、更新された EDID 情報が INF から読み取られ、監視デバイスのハードウェア キーの下に値として格納されます。 各 EDID オーバーライドは、デバイスのハードウェア キーの下にある個別のキーの下に格納されます。
  3. モニター ドライバーは、初期化中にレジストリをチェックし、EEEPROM の対応する情報ではなく、そこに格納されている EDID 情報を使用します。 レジストリに追加される EDID 情報は、常に EEPROM EDID 情報よりも優先されます。
  4. Windows コンポーネントとユーザー モード アプリでは、更新された EDID 情報が使用されます。

INF で EDID をオーバーライドする

EDID をオーバーライドするには、オーバーライドする各ブロックの INF に、次の形式で AddReg ディレクティブ を含めます。

HKR, EDID_OVERRIDE, BlockNumber, 0x1, Byte 1, Byte 2, Byte 3, Byte 4,...

ブロック番号は、オーバーライドする EDID ブロックのゼロベースの値です。 データ バイトは、バイナリ EDID データを含む 128 の 16 進整数として書式設定する必要があります。 ブロック番号の後の値である"0x1"は、このレジストリ値にバイナリ データ (FLG_ADDREG_BINVALUETYPE) が含まれていることを示すフラグです。

製造元は、正しくない EDID ブロックのみを更新する必要があります。 システムは、EEPROM から残りのブロックを取得します。 次の例は、EDID ブロック 0、4、5 を更新する INF の関連セクションを示しています。 モニター ドライバーは、ブロック 1 から 3およびブロック 5 に続く拡張ブロックを EEPROM から取得します。

[ABC.DDInstall.HW]
ABC.AddReg
...
[ABC.AddReg]
HKR, EDID_OVERRIDE, 0, 1, 00, FF, ..., 3B
HKR, EDID_OVERRIDE, 4, 1, 1F, 3E, ..., 4E
HKR, EDID_OVERRIDE, 5, 1, 24, 5C, ..., 2D
...

INF 全般、特に AddRegDDInstall の詳細については、INF ファイルの作成を参照してください。

サンプル INF ファイル: Monsamp.inf

Monsamp.infの使用および変更方法については、INF ファイルセクションの監視を参照してください。

; monsamp.INF
;
; Copyright (c) Microsoft Corporation.  All rights reserved.
;
; This is a generic INF file for overriding EDIDs
; of any monitors, starting with Windows Vista.
;

[Version]
Signature="$WINDOWS NT$"
Class=Monitor
ClassGuid={4D36E96E-E325-11CE-BFC1-08002BE10318}
Provider=%MS_EDID_OVERRIDE%
DriverVer=04/18/2006, 1.0.0.0
PnpLockdown=1

; Be sure to add the directive below with the proper catalog file after
; WHQL certification.
;CatalogFile=Sample.cat


[DestinationDirs]
DefaultDestDir=23

[SourceDisksNames]
1=%SourceDisksNames%

; Enable the following section to copy a monitor profile.
[SourceDisksFiles]
;profile1.icm=1

[Manufacturer]
%MS_EDID_OVERRIDE%=MS_EDID_OVERRIDE,NTx86,NTamd64

; Modify the hardware ID (MON1234) to match that of the monitor being used.
[MS_EDID_OVERRIDE.NTx86]
%MS_EDID_OVERRIDE-1%=MS_EDID_OVERRIDE-1.Install, MONITOR\MON1234

; Modify the hardware ID (MON1234) to match that of the monitor being used.
[MS_EDID_OVERRIDE.NTamd64]
%MS_EDID_OVERRIDE-1%=MS_EDID_OVERRIDE-1.Install.NTamd64, MONITOR\MON1234

[MS_EDID_OVERRIDE-1.Install.NTx86]
DelReg=DEL_CURRENT_REG
AddReg=MS_EDID_OVERRIDE-1.AddReg, 1024, 1280, DPMS
CopyFiles=MS_EDID_OVERRIDE-1.CopyFiles

[MS_EDID_OVERRIDE-1.Install.NTamd64]
DelReg=DEL_CURRENT_REG
AddReg=MS_EDID_OVERRIDE-1.AddReg, 1024, 1280, DPMS
CopyFiles=MS_EDID_OVERRIDE-1.CopyFiles

[MS_EDID_OVERRIDE-1.Install.NTx86.HW]
AddReg=MS_EDID_OVERRIDE-1_AddReg

[MS_EDID_OVERRIDE-1.Install.NTamd64.HW]
AddReg=MS_EDID_OVERRIDE-1_AddReg

[MS_EDID_OVERRIDE-1_AddReg]
HKR,EDID_OVERRIDE,"0",0x01,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x35,\
0xEE,0x34,0x12,0x01,0x00,0x00,0x00,0x0A,0x0E,0x01,0x03,0x68,0x22,0x1B,\
0x78,0xEA,0xAE,0xA5,0xA6,0x54,0x4C,0x99,0x26,0x14,0x50,0x54,0xA5,0x4B,\
0x00,0x71,0x4F,0x81,0x80,0xA9,0x40,0x01,0x01,0x01,0x01,0x01,0x01,0x01,\
0x01,0x01,0x01,0x30,0x2A,0x00,0x98,0x51,0x00,0x2A,0x40,0x30,0x70,0x13,\
0x00,0x52,0x0E,0x11,0x00,0x00,0x1E,0x00,0x00,0x00,0xFF,0x00,0x41,0x42,\
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x0A,0x00,0x00,0x00,\
0xFC,0x00,0x4D,0x53,0x20,0x31,0x32,0x33,0x34,0x0A,0x0A,0x0A,0x0A,0x0A,\
0x0A,0x00,0x00,0x00,0xFD,0x00,0x38,0x4C,0x1F,0x50,0x12,0x00,0x0A,0x20,\
0x20,0x20,0x20,0x20,0x20,0x00,0xDB

[DEL_CURRENT_REG]
HKR,MODES
HKR,,MaxResolution
HKR,,DPMS
HKR,,ICMProfile

; Pre-defined AddReg sections. These can be used for default settings
; when a given standard resolution is used.

[1024]
HKR,,MaxResolution,,"1024,768"
[1280]
HKR,,MaxResolution,,"1280,1024"

[DPMS]
HKR,,DPMS,,1

[MS_EDID_OVERRIDE-1.AddReg]
HKR,"MODES\1024,768",Mode1,,"31.0-94.0,55.0-160.0,+,+"
HKR,"MODES\1280,1024",Mode1,,"31.0-94.0,55.0-160.0,+,+"

; Enable the following section to copy a monitor profile.
[MS_EDID_OVERRIDE-1.CopyFiles]
;PROFILE1.ICM

[Strings]
MonitorClassName="Monitor"
SourceDisksNames="MS_EDID_OVERRIDE Monitor EDID Override Installation Disk"

MS_EDID_OVERRIDE="MS_EDID_OVERRIDE"
MS_EDID_OVERRIDE-1="MS EDID Override"