Usar um arquivo INF para substituir EDIDs
Este artigo descreve como fornecedores e fabricantes podem usar um arquivo INF para substituir os EDID (Dados de Identificação de Exibição Estendida) de qualquer monitor. Ele também inclui um arquivo INF de exemplo (Monsamp.inf).
EDID é um formato de metadados usado por monitores para comunicar seus recursos a uma fonte de vídeo, como uma placa gráfica. Ele contém informações como o identificador do monitor, dados do fabricante, identificador de hardware, informações de tempo e assim por diante. Esses dados são armazenados na EEPROM do monitor em um formato especificado pela VESA. Todos os monitores, analógicos ou digitais, devem suportar EDID.
Os monitores fornecem o EDID para componentes do Windows, drivers de vídeo e alguns aplicativos de modo de usuário. Por exemplo, durante a inicialização, o driver do monitor consulta o driver WDDM (Modelo de Driver de Exibição) do Windows para obter suporte à interface de consulta de brilho e à DDI (interface do driver de dispositivo), que está no EDID. Informações EDID incorretas ou inválidas na EEPROM do monitor podem levar a problemas como a configuração de modos de exibição incorretos.
Existem duas abordagens para corrigir EDIDs:
- Peça ao cliente que envie o monitor de volta ao fabricante, que atualiza novamente a EEPROM com o EDID correto e devolve o monitor ao cliente.
- Implemente um arquivo INF que contenha as informações EDID corretas e faça com que o cliente o baixe para o computador conectado ao monitor. O Windows extrai as informações EDID atualizadas do INF e as fornece aos componentes em vez de usar as informações EDID da EEPROM, substituindo efetivamente o EDID da EEPROM. Essa abordagem mais simples é a melhor solução para o fabricante e o cliente.
Além de substituir as informações EDID, um fornecedor pode fornecer uma substituição para o nome do monitor e a resolução de exibição preferencial. Os clientes podem acessar frequentemente essa substituição por meio do Windows Update ou da mídia digital na caixa de remessa. Essa substituição recebe maior precedência do que a substituição EDID descrita neste artigo. Para saber mais, consulte Monitorar seções do arquivo INF.
Formato EDID
Os dados EDID são formatados como um ou mais blocos de 128 bytes:
- O EDID versão 1.0 a 1.2 consiste em um único bloco de dados, de acordo com a especificação VESA.
- A versão 1.3 do EDID ou EDID aprimorada (E-EDID) permite que os fabricantes especifiquem um ou mais blocos de extensão além do bloco primário.
Cada bloco é numerado, começando com 0 para o bloco inicial. Para atualizar as informações do EDID, o INF do fabricante especifica o número do bloco a ser atualizado e fornece 128 bytes de dados EDID para substituir o bloco original. O driver do monitor obtém os dados atualizados para os blocos corrigidos do registro e usa os dados EEPROM para os blocos restantes.
Atualizar um EDID
Para atualizar um EDID usando um INF:
- O fabricante do monitor implementa um INF que contém as informações EDID atualizadas e baixa o arquivo para o computador do usuário. Esse download pode ser feito por meio do Windows Update ou enviando um CD com o monitor.
- A instalação do dispositivo lê as informações EDID atualizadas do INF e armazena as informações como valores na chave de hardware do dispositivo monitor. Cada substituição de EDID é armazenada em uma chave separada sob a chave de hardware do dispositivo.
- O driver do monitor verifica o registro durante a inicialização e usa todas as informações EDID armazenadas lá em vez das informações correspondentes na EEPROM. As informações EDID adicionadas ao registro sempre têm precedência sobre as informações EDID da EEPROM.
- Os componentes do Windows e os aplicativos de modo de usuário usam as informações EDID atualizadas.
Substituir um EDID por um INF
Para substituir um EDID, inclua uma diretiva AddReg no INF para cada bloco que você deseja substituir, no seguinte formato:
HKR, EDID_OVERRIDE, BlockNumber, 0x1, Byte 1, Byte 2, Byte 3, Byte 4,...
O número do bloco é um valor indexado a zero do bloco EDID a ser substituído. Os bytes de dados devem ser formatados como 128 inteiros hexadecimais que contêm os dados EDID binários. O valor "0x1" após o número do bloco é um sinalizador que indica que esse valor do Registro contém dados binários (FLG_ADDREG_BINVALUETYPE).
Os fabricantes devem atualizar apenas os blocos EDID incorretos. O sistema obtém os blocos restantes da EEPROM. O exemplo a seguir mostra as seções relevantes de um INF que atualiza os blocos EDID 0, 4 e 5. O driver do monitor obtém os blocos de 1 a 3 e todos os blocos de extensão que seguem o bloco 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
...
Para obter mais informações sobre INFs em geral e AddReg e DDInstall em particular, consulte Criar um arquivo INF.
Exemplo de arquivo INF: Monsamp.inf
Para obter informações sobre como usar e modificar Monsamp.inf, consulte Monitorar seções de arquivo 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"