none
How to locate the EDID data folder/key in the registry, which belongs to a specific PHYSICAL_MONITOR object RRS feed

  • Question

  • Hi,

    I call GetPhysicalMonitorsFromHMONITOR to get PHYSICAL_MONITOR object(s).
    Later I pass the HANDLE(s) PHYSICAL_MONITOR.hPhysicalMonitor to Monitor
    Configuration Functions like SetMonitorBrightness, SetVCPFeature,
    etc. ...

    Depending on the content of the monitors EDID data I have to make
    some descisions, how I have to call those Monitor Configuration Functions.

    As suggested here:
    http://social.msdn.microsoft.com/Forums/pl-PL/wdk/thread/1a19a278-c296-4d34-ade7-83bf3315db96
    I already use:   SetupDiGetClassDevices(GUID_DEVINTERFACE_MONITOR)/
    SetupDiEnumDeviceInterfaces/SetupDiOpenDevRegKey

    to open the present EDID data folders/keys in the registry and to read
    the EDID data.

    But I do not know which EDID data folder in the registry belongs to
    which PHYSICAL_MONITOR object.

    I need to know, how I can locate the EDID data folder/key, which belongs
    to a specific PHYSICAL_MONITOR object.

    Does somebody know how I can do this?



    Thanks in advance for a helpfull answer.
    • Edited by ThePerfectWave Friday, May 4, 2012 9:56 AM
    • Moved by Jesse Jiang Monday, May 7, 2012 3:01 AM (From:Visual C++ General)
    Friday, May 4, 2012 9:45 AM

All replies

  • Hi,

    I think your issue should be raised in the Windows WDK and Driver Development Forum. I believe they will know more information of this issue than us, and I will move this one to that forum.

    Thanks for your understanding,

    Best regards,
    Jesse


    Jesse Jiang [MSFT]
    MSDN Community Support | Feedback to us

    Monday, May 7, 2012 3:00 AM
  • from looking at the structures and the APIs, I can't see a way to tie a PHYSICAL_MONITOR or the hMonitor value back to an instance of GUID_DEVINTERFACE_MONITOR.

    d -- This posting is provided "AS IS" with no warranties, and confers no rights.

    Monday, May 7, 2012 3:05 AM
  • Hi,

    thanks for that fast answer.

    But I can't imaging that there is no possibility to figure out which EDID data folder/key in the registry belongs
    to a PHYSICAL_MONITOR object.

    I guess that, since PHYSICAL_MONITOR objects and EDID data both have monitor related info/data, that
    there must be a way to figure out the "link" between them.

    So I hope, that somebody can tell me, how I can find the EDID data folder/key, which belongs to the same monitor
    than a specific PHYSICAL_MONITOR object that I received with GetPhysicalMonitorsFromHMONITOR.

    Thanks in advance for a helpful answer.
    Monday, May 7, 2012 9:58 AM
  • what problem are you trying to solve? assuming you can figure out the EDID, what are you going to do with it?

    d -- This posting is provided "AS IS" with no warranties, and confers no rights.

    Monday, May 7, 2012 4:22 PM
  • Additional to some other computers, we develop panel computers plus optional extension monitors.  

    For those panel computers and their optional extension monitors, we currently develop
    an application, that implements a special behavior for their backlight control (on/off & brightness).

    The "built in" monitor of our panel computer sends in his EDID data our manufacture id plus
    a special product ID. In our application we want to detect our "built in" monitor with this
    combination manufacture id + product id.

    When walking thru the EDID data in the registry we can locate this "built in" monitor with this
    combination. Now we want to change the brightness of this "built in" monitor. Therefore we need
    to know which PHYSICAL_MONITOR object belongs to the located EDID data.

    ==> That's the reason for this question. A helpful answer would be great. Thanks in advance.

    p.s. As I already wrote: Since both   
       the Monitor Configuration Functions ( http://msdn.microsoft.com/en-us/library/dd692964%28v=vs.85%29.aspx )
       as well as the EDID data
    retrieve / contain monitor related data, I think, that their is a / must be a
    way to "link" them. I guess that also other applications need / use such a "link".



    Tuesday, May 8, 2012 7:53 AM
  • So I think the sad answer is that there is no 100% reliable way to get the monitor edid out of the registry, even though examination of the registry manually can locate the edid. For various reasons I had to do the same thing, and it was my experience that "new" monitors might actually "migrate" in the registry, making tracking down the edid "difficult".

    But I'll share what I know, warning you that NT version matters, and that I ultimately abandoned the effort, using my miniport display driver to put the edid where I could reliably find it instead.

    Using the "MonitorName' find HKLM\SYSTEM\CurrentControlSet\\Enum\DISPLAY\"name"\Device Parameters\EDID.

    MonitorName is tricky. The DISPLAY_DEVICE struct obtained from the win32 APIs for enumerating monitors produces a string like:

    Monitor\HSD5B10\{4d36e96e-e325-11ce-bfc1-08002be10318}\0002

    in the DeviceID field. The "HSDB510" can be used as "name" in the Enum\DISPLAY section.

    NOTE: if the system has had more than one same manufacturer name monitor plugged in, your life gets complicated. You need the 'current one', it has a "Control" key in its Enum\Display section of the registry. If two identical monitors are plugged in, good luck.

    NOTE ALSO: this is very fragile, error prone, etc. and doesn't always work if your enumeration coincides with a first plugin event for a new monitor.


    Mark Roddy Windows Driver and OS consultant www.hollistech.com



    Wednesday, May 9, 2012 1:49 PM
    Moderator