使用 INF 文件替代 EDID

本文介绍供应商和制造商如何使用 INF 文件替代任何监视器的扩展显示标识数据 (EDID)。 它还包括示例 INF 文件 (Monsamp.inf)。

EDID 是监视器使用的元数据格式,用于将其功能传达给图形卡等视频源。 它包含监视标识符、制造商数据、硬件标识符、计时信息等信息。 这些数据以 VESA 指定的格式存储在监视器的 EEPROM 中。 所有显示器(无论是模拟还是数字)都必须支持 EDID。

监视器为 Windows 组件、显示驱动程序和一些用户模式应用程序提供 EDID。 例如,在初始化过程中,监视器驱动程序向 Windows 显示驱动程序模型 (WDDM) 驱动程序查询 EDID 中的亮度查询接口和设备驱动程序接口 (DDI) 支持。 监视器 EEPROM 上不正确或无效的 EDID 信息可能会导致设置不正确的显示模式等问题。

纠正 EDID 有两种方法:

  • 让客户将监视器发送回制造商,该制造商使用正确的 EDID 重新刷新 EEPROM,并将监视器退还给客户。
  • 实现一个包含正确 EDID 信息的 INF 文件,并让客户将其下载到连接到显示器的计算机上。 Windows 从 INF 中提取更新的 EDID 信息,并将其提供给组件,而不是使用 EEPROM EDID 信息,从而有效地替代 EEPROM EDID。 这种更简单的方法对制造商和客户来说都是更好的解决方案。

除了替换 EDID 信息之外,供应商还可以提供监视器名称和首选显示分辨率的替代。 客户可以经常通过 Windows 更新或包装箱中的数字媒体访问此替代。 此替代的优先级高于本文中所述的 EDID 替代。 有关详细信息,请参阅监视 INF 文件部分

EDID 格式

EDID 数据被格式化为一个或多个 128 字节的块:

  • 根据 VESA 规范,EDID 版本 1.0 至 1.2 由单个数据块组成。
  • EDID 版本 1.3 或增强型 EDID (E-EDID) 允许制造商在主块之外指定一个或多个扩展块。

每个块都有编号,初始块从 0 开始。 为了更新 EDID 信息,制造商的 INF 指定了要更新的块的编号,并提供 128 字节的 EDID 数据来替换原始块。 监视器驱动程序从注册表中获取已更正块的更新数据,并使用 EEPROM 数据处理其余块。

更新 EDID

使用 INF 更新 EDID:

  1. 显示器制造商实现了一个包含更新的 EDID 信息的 INF,并将文件下载到用户的计算机上。 此下载可以通过 Windows 更新或随显示器一起运送的 CD 来完成。
  2. 设备安装从 INF 读取更新后的 EDID 信息,并将信息作为值存储在监视器设备的硬件键下。 每个 EDID 替代都存储在设备硬件键下的单独键下。
  3. 监视器驱动程序在初始化期间检查注册表,并使用存储在其中的任何 EDID 信息,而不是 EEPROM 上的相应信息。 添加到注册表的 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 个十六进制整数。 块编号后的“0x1”值是一个标志,指示此注册表值包含二进制数据 (FLG_ADDREG_BINVALUETYPE)。

制造商必须只更新那些不正确的 EDID 块。 系统从 EEPROM 获取剩余块。 以下示例显示了更新 EDID 块 0、4 和 5 的 INF 的相关部分。 监视器驱动程序从 EEPROM 获得块 1-3 和块 5 之后的任何扩展块:

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