Uso de un archivo INF para invalidar EDID
En este artículo se describe cómo los proveedores y fabricantes pueden usar un archivo INF para invalidar los datos de identificación de visualización extendida (EDID) de cualquier monitor. También incluye un archivo INF de ejemplo (Monsamp.inf).
EDID es un formato de metadatos que usan los monitores para comunicar sus funcionalidades a un origen de vídeo, como una tarjeta gráfica. 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. Todos los monitores, analógicos o digitales, deben admitir EDID.
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 del monitor consulta a compatibilidad del controlador del modelo de controladores de pantalla de Windows (WDDM) con las interfaces de consulta de brillo y controlador del dispositivo (DDI), que se encuentra en EDID. La información de EDID incorrecta o no válida en la EEPROM del monitor puede provocar problemas como establecer modos de visualización incorrectos.
Hay dos enfoques para corregir los EDID:
- Haga que el cliente envíe el monitor de vuelta al fabricante, que vuelva a instalar la EEPROM con el EDID correcto y devuelva el monitor al cliente.
- Implemente un archivo INF que contenga la información de EDID correcta y haga que el cliente lo descargue en el equipo que está conectado al monitor. Windows extrae la información de EDID actualizada del INF y la proporciona a los componentes en lugar de usar la información de EDID de EEPROM, reemplazando eficazmente el EDID de EEPROM. Este enfoque más sencillo es la mejor solución para el fabricante y el cliente.
Además de reemplazar la información de EDID, un proveedor puede proporcionar una invalidación para el nombre del monitor y la resolución de pantalla preferida. Los clientes pueden acceder con frecuencia a esta invalidación a través de Windows Update o medios digitales en la caja de envío. Esta invalidación tiene más prioridad que la invalidación de EDID descrita en este artículo. Para obtener más información, consulte Secciones del archivo INF del monitor.
Formato de EDID
Los datos de EDID tienen el formato de uno o varios bloques de 128 bytes:
- La versión de EDID de 1.0 a 1.2 consta de un único bloque de datos, según la especificación VESA.
- La versión de EDID 1.3 o EDID mejorado (E-EDID) permite a los fabricantes 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 de EDID para reemplazar el bloque original. El controlador de monitor 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 el INF:
- El fabricante del monitor implementa un INF que contiene la información de EDID actualizada y descarga el archivo en el equipo del usuario. Esta descarga se puede realizar a través de Windows Update o mediante el envío de un CD con el monitor.
- La instalación del dispositivo lee la información de EDID actualizada del INF y la almacena como valores en la clave de hardware del dispositivo del monitor. Cada invalidación de EDID se almacena en una clave independiente bajo la clave de hardware del dispositivo.
- El controlador del monitor comprueba el registro durante la inicialización y usa cualquier información de EDID almacenada allí en lugar de la información correspondiente en la EEPROM. La información de EDID que se agrega al registro siempre tiene prioridad sobre la información de EDID de EEPROM.
- Los componentes de Windows y las aplicaciones en modo de usuario usan la información de 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, con el formato siguiente:
HKR, EDID_OVERRIDE, BlockNumber, 0x1, Byte 1, Byte 2, Byte 3, Byte 4,...
El número de bloque es un valor de índice cero del bloque de EDID que se va a invalidar. Los bytes de datos deben tener el formato de enteros hexadecimales de 128 que contienen los datos de 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 de EDID incorrectos. El sistema obtiene los bloques restantes de la EEPROM. En el ejemplo siguiente se muestran las secciones pertinentes de un INF que actualiza los bloques de EDID 0, 4 y 5. El controlador del monitor obtiene los bloques 1 a 3 y los bloques de extensión que siguen al 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 los INF en general, y AddReg y DDInstall en particular, consulte Creación de un archivo INF.
Archivo INF de ejemplo: Monsamp.inf
Para obtener información sobre cómo usar y modificar Monsamp.inf, consulte Secciones del archivo INF del monitor.
; 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"