Compartir a través de


Invalidación del fabricante de EDID de monitor

En este artículo se describe cómo los proveedores y fabricantes pueden invalidar los datos de identificación de visualización extendida (EDID) de cualquier monitor a través de un archivo INF. Se proporciona un archivo INF de ejemplo (Monsamp.inf).

Todos los monitores, analógicos o digitales, deben admitir EDID, que contiene información como el identificador del monitor, los datos del fabricante, el identificador de hardware, la información de tiempo, etc. Estos datos se almacenan en la EEPROM del monitor en un formato que VESA especifica.

Los monitores proporcionan el EDID a componentes de Windows, controladores de pantalla y algunas aplicaciones en modo de usuario. Por ejemplo, durante la inicialización, el controlador de supervisión consulta el controlador windows Display Driver Model (WDDM) para obtener su compatibilidad con la interfaz de consulta de brillo y la interfaz de controlador de dispositivo (DDI), que se encuentra en EDID. La información EDID incorrecta o no válida en la EEPROM del monitor puede dar lugar a problemas como establecer modos de visualización incorrectos.

Hay dos enfoques para corregir edids:

  • Haga que el cliente devuelva el monitor al fabricante, que vuelve aflar la EEPROM con el EDID correcto y devuelve el monitor al cliente.
  • La mejor solución es que el fabricante implemente un archivo INF que contenga la información EDID correcta y que el cliente lo descargue en el equipo que está conectado al monitor. Windows extrae la información EDID actualizada de INF y la proporciona a los componentes en lugar de usar la información EDID de EEPROM, reemplazando eficazmente el EDID de EEPROM.

Además de reemplazar la información edid, un proveedor puede proporcionar una invalidación para el nombre del monitor y la resolución de pantalla preferida. Esta invalidación se pone a disposición de los clientes con frecuencia a través de Windows Update o medios digitales en la caja de envío, y recibe mayor prioridad que la invalidación EDID mencionada aquí. Para obtener más información, vea Supervisar secciones de archivos INF.

Formato EDID

Los datos EDID tienen formato de uno o varios bloques de 128 bytes:

  • EDID versión 1.0 a 1.2 consta de un único bloque de datos, según la especificación VESA.
  • Con EDID versión 1.3 o EDID mejorada (E-EDID), los fabricantes pueden especificar uno o varios bloques de extensión además del bloque principal.

Cada bloque se numera, empezando por 0 para el bloque inicial. Para actualizar la información de EDID, el INF del fabricante especifica el número del bloque que se va a actualizar y proporciona 128 bytes de datos EDID para reemplazar el bloque original. El controlador de supervisión obtiene los datos actualizados de los bloques corregidos del registro y usa los datos de EEPROM para los bloques restantes.

Actualización de un EDID

Para actualizar un EDID mediante un INF:

  1. El fabricante del monitor implementa un INF que contiene la información EDID actualizada y descarga el archivo en el equipo del usuario. Esta descarga se puede realizar a través de Windows Update o enviando un CD con el monitor.
  2. La instalación del dispositivo lee la información EDID actualizada de INF y almacena la información como valores en la clave de hardware del dispositivo de supervisión. Cada invalidación EDID se almacena bajo una clave independiente bajo la clave de hardware del dispositivo.
  3. El controlador de supervisión comprueba el registro durante la inicialización y usa cualquier información EDID almacenada allí en lugar de la información correspondiente sobre EEPROM. La información EDID que se agrega al registro siempre tiene prioridad sobre la información EDID de EEPROM.
  4. Los componentes de Windows y las aplicaciones en modo de usuario usan la información EDID actualizada.

Invalidación de un EDID con un INF

Para invalidar un EDID, incluya una directiva AddReg en el INF para cada bloque que desee invalidar, en el siguiente formato:

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

El número de bloque es un valor indizado de cero del bloque EDID que se va a invalidar. Los bytes de datos deben tener el formato de enteros hexadecimales de 128 que contienen los datos EDID binarios. El valor "0x1" después del número de bloque es una marca que indica que este valor del Registro contiene datos binarios (FLG_ADDREG_BINVALUETYPE).

Los fabricantes solo deben actualizar los bloques EDID incorrectos. El sistema obtiene los bloques restantes de EEPROM. En el ejemplo siguiente se muestran las secciones pertinentes de un INF que actualiza los bloques EDID 0, 4 y 5. El controlador de supervisión obtiene los bloques 1 - 3 y los bloques de extensión que siguen el bloque 5 de 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
...

Para obtener más información sobre las INFs en general, y AddReg y DDInstall en particular, vea Crear un archivo INF.

Archivo INF de ejemplo: Monsamp.inf

Para obtener información sobre cómo usar y modificar Monsamp.inf, vea Supervisar secciones de archivos 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"