Uso di un file INF per eseguire l'override degli ID EDID
Questo articolo descrive come i fornitori e i produttori possono usare un file INF per eseguire l'override dei dati EDID (Extended Display Identification Data) di qualsiasi monitor. Include anche un file INF di esempio (Monsamp.inf).
EDID è un formato di metadati usato dai monitor per comunicare le proprie funzionalità a un'origine video, ad esempio una scheda grafica. Contiene informazioni come l'identificatore di monitoraggio, i dati del produttore, l'identificatore hardware, le informazioni sulla tempistica e così via. Questi dati vengono archiviati nell'EEPROM del monitoraggio in un formato specificato da VESA . Tutti i monitor, analogici o digitali, devono supportare EDID.
I monitoraggi forniscono l'EDID ai componenti di Windows, i driver di visualizzazione e alcune applicazioni in modalità utente. Ad esempio, durante l'inizializzazione, il driver di monitoraggio esegue una query sul driver WDDM (Windows Display Driver Model) per il supporto dell'interfaccia di query di luminosità e dell'interfaccia DDI (Device Driver Interface), che si trova nell'EDID. Le informazioni EDID non corrette o non valide sulla EEPROM del monitor possono causare problemi, ad esempio l'impostazione di modalità di visualizzazione non corrette.
Esistono due approcci per la correzione degli ID EDID:
- Chiedere al cliente di inviare nuovamente il monitoraggio al produttore, che ribatte l'EEPROM con l'EDID corretto e restituisce il monitoraggio al cliente.
- Implementare un file INF contenente le informazioni EDID corrette e fare in modo che il cliente lo scarichi nel computer connesso al monitor. Windows estrae le informazioni EDID aggiornate dall'INF e le fornisce ai componenti invece di usare le informazioni EDID EEPROM, eseguendo in modo efficace l'override dell'EDID EEPROM. Questo approccio più semplice è la soluzione migliore sia per il produttore che per il cliente.
Oltre a sostituire le informazioni EDID, un fornitore può fornire un override per il nome del monitoraggio e la risoluzione di visualizzazione preferita. I clienti possono spesso accedere a questa sostituzione tramite Windows Update o supporti digitali nella casella di spedizione. Questo override riceve una precedenza superiore rispetto all'override EDID descritto in questo articolo. Per altre informazioni, vedere Monitorare le sezioni dei file INF.
Formato EDID
I dati EDID vengono formattati come uno o più blocchi di 128 byte:
- EDID versione da 1.0 a 1.2 è costituito da un singolo blocco di dati, in base alla specifica VESA.
- EDID versione 1.3 o EDID avanzata (E-EDID) consente ai produttori di specificare uno o più blocchi di estensione oltre al blocco primario.
Ogni blocco è numerato, a partire da 0 per il blocco iniziale. Per aggiornare le informazioni EDID, l'INF del produttore specifica il numero del blocco da aggiornare e fornisce 128 byte di dati EDID per sostituire il blocco originale. Il driver di monitoraggio ottiene i dati aggiornati per i blocchi corretti dal Registro di sistema e usa i dati EEPROM per i blocchi rimanenti.
Aggiornamento di un EDID
Per aggiornare un EDID usando un INF:
- Il produttore del monitoraggio implementa un INF che contiene le informazioni EDID aggiornate e scarica il file nel computer dell'utente. Questo download può essere eseguito tramite Windows Update o inviando un CD con il monitor.
- L'installazione del dispositivo legge le informazioni EDID aggiornate da INF e archivia le informazioni sotto la chiave hardware del dispositivo di monitoraggio. Ogni override EDID viene archiviato in una chiave separata sotto la chiave hardware del dispositivo.
- Il driver di monitoraggio controlla il Registro di sistema durante l'inizializzazione e usa tutte le informazioni EDID archiviate invece delle informazioni corrispondenti su EEPROM. Le informazioni EDID aggiunte al Registro di sistema hanno sempre la precedenza sulle informazioni EDID EEPROM.
- I componenti di Windows e le app in modalità utente usano le informazioni EDID aggiornate.
Override di un EDID con un INF
Per eseguire l'override di un EDID, includere una direttiva AddReg in INF per ogni blocco di cui si vuole eseguire l'override, nel formato seguente:
HKR, EDID_OVERRIDE, BlockNumber, 0x1, Byte 1, Byte 2, Byte 3, Byte 4,...
Il numero di blocco è un valore indicizzato zero del blocco EDID di cui eseguire l'override. I byte di dati devono essere formattati come 128 numeri interi esadecimali che contengono i dati EDID binari. Il valore "0x1" dopo il numero di blocco è un flag che indica che questo valore del Registro di sistema contiene dati binari (FLG_ADDREG_BINVALUETYPE).
I produttori devono aggiornare solo i blocchi EDID non corretti. Il sistema ottiene i blocchi rimanenti da EEPROM. L'esempio seguente illustra le sezioni pertinenti di un INF che aggiorna i blocchi EDID 0, 4 e 5. Il driver di monitoraggio ottiene blocchi da 1 a 3 ed eventuali blocchi di estensione che seguono il blocco 5 da 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
...
Per altre informazioni sulle funzioni INFS in generale e su AddReg e DDInstall in particolare, vedere Creazione di un file INF.
File INF di esempio: Monsamp.inf
Per informazioni su come usare e modificare Monsamp.inf, vedere Monitorare le sezioni dei file 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"