Использование INF-файла для переопределения EDID
В этой статье описывается, как поставщики и производители могут использовать INF-файл для переопределения расширенных данных идентификации отображения (EDID) любого монитора. Он также включает пример INF-файла (Monsamp.inf).
EDID — это формат метаданных, используемый мониторами для передачи их возможностей источнику видео, например графической карточке. Он содержит такие сведения, как идентификатор монитора, данные производителя, идентификатор оборудования, сведения о времени и т. д. Эти данные хранятся в EEPROM монитора в формате, который указывает VESA . Все мониторы, аналоговые или цифровые, должны поддерживать EDID.
Мониторы предоставляют EDID компонентам Windows, драйверам отображения и некоторым приложениям в пользовательском режиме. Например, во время инициализации драйвер монитора запрашивает драйвер модели драйвера windows (WDDM) для поддержки интерфейса запроса яркости и интерфейса драйвера устройства (DDI), который находится в EDID. Неверные или недопустимые сведения EDID в EEPROM монитора могут привести к таким проблемам, как установка неправильных режимов отображения.
Существует два подхода к исправлению EDID:
- Отправьте клиенту монитор обратно производителю, который перенаправляет EEPROM с правильным идентификатором EDID и возвращает монитор клиенту.
- Реализуйте INF-файл, содержащий правильные сведения EDID, и скачайте его клиент на компьютер, подключенный к монитору. Windows извлекает обновленные сведения EDID из INF и предоставляет его компонентам вместо использования сведений EEPROM EDID, эффективно переопределяя EEPROM EDID. Этот более простой подход является лучшим решением как для производителя, так и для клиента.
Помимо замены сведений EDID поставщик может предоставить переопределение для имени монитора и предпочтительного разрешения отображения. Клиенты могут часто обращаться к этой переопределении через Обновл. Windows или цифровой носитель в коробке доставки. Это переопределение получает более высокий приоритет, чем переопределение EDID, описанное в этой статье. Дополнительные сведения см. в разделе "Мониторинг INF-файлов".
Формат EDID
Данные EDID форматируются как один или несколько блоков 128 байтов:
- EDID версии 1.0–1.2 состоит из одного блока данных в спецификации VESA.
- EDID версии 1.3 или расширенный EDID (E-EDID) позволяет производителям указывать один или несколько блоков расширений в дополнение к основному блоку.
Каждый блок нумерован, начиная с 0 для начального блока. Чтобы обновить сведения об EDID, inf производителя указывает количество обновляемого блока и предоставляет 128 байт данных EDID для замены исходного блока. Драйвер монитора получает обновленные данные для исправленных блоков из реестра и использует данные EEPROM для оставшихся блоков.
Обновление EDID
Чтобы обновить идентификатор EDID с помощью INF:
- Производитель монитора реализует INF-файл, содержащий обновленные сведения EDID, и загружает файл на компьютер пользователя. Это можно сделать с помощью Обновл. Windows или доставки компакт-диска с монитором.
- Установка устройства считывает обновленные данные EDID из INF и сохраняет сведения в виде значений под аппаратным ключом устройства монитора. Каждая переопределение EDID хранится под отдельным ключом под аппаратным ключом устройства.
- Драйвер монитора проверяет реестр во время инициализации и использует все данные EDID, хранящиеся там, а не соответствующие сведения о EEPROM. Сведения EDID, добавляемые в реестр, всегда имеют приоритет над сведениями EEPROM EDID.
- Компоненты Windows и приложения пользовательского режима используют обновленные сведения EDID.
Переопределение EDID с помощью INF
Чтобы переопределить идентификатор EDID, добавьте директиву AddReg в INF-файл для каждого блока, который требуется переопределить, в следующем формате:
HKR, EDID_OVERRIDE, BlockNumber, 0x1, Byte 1, Byte 2, Byte 3, Byte 4,...
Номер блока — это нулевое индексируемое значение блока EDID для переопределения. Байты данных должны быть отформатированы как 128 шестнадцатеричных целых чисел, содержащих двоичные данные EDID. Значение "0x1" после номера блока является флагом, указывающим, что это значение реестра содержит двоичные данные (FLG_ADDREG_BINVALUETYPE).
Производители должны обновлять только те блоки EDID, которые являются неверными. Система получает оставшиеся блоки из EEPROM. В следующем примере показаны соответствующие разделы INF, которые обновляют EDID блоков 0, 4 и 5. Драйвер монитора получает блоки 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
...
Дополнительные сведения о INFs в целом и AddReg и DDInstall см. в статье "Создание 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"