Your display driver or mini-VDD can use the EDID structure returned to the VDD at boot time by retrieving this structure from the registry. This can be done once your display driver (or mini-VDD) has called VDD_GET_DISPLAY_CONFIG (or VDD_GetDisplayInfo if your mini-VDD is issuing the call from ring 0). To retrieve the EDID for the current monitor:
1. Get and save the diMonitorDevNodeHandle member of the DISPLAYINFO structure.
2. Call CONFIGMG_Read_Registry_Value. Make sure that you have CONFIGMG.INC in your include directory. The parameters for the call should be as follows:
Parameter | Value |
dnDevNode | diMonitorDevNodeHandle retrieved from the DISPLAYINFO |
pszSubKey | NULL (no subkey needed) |
pszValueName | A pointer to the ASCIIz string "EDID" |
ulExpectedType | REG_BINARY |
Buffer | A pointer to a 128 byte buffer (the EDID plus the null terminator) which will receive the EDID data back |
pulLength | Size of Buffer (129 bytes or longer) |
ulFlags | CM_REGISTRY_HARDWARE |
If CONFIGMG_Read_Registry_Value returns CR_SUCCESS, the EDID structure for the current monitor will be in your Buffer, available for use by your driver or mini-VDD to determine appropriate timings from it.
If the call fails, then there is no EDID structure for the monitor present in the registry. In this case your driver should use an alternate means for setting monitor timings.