Usually, people use this material through WMI, but it cannot provide useful information many times, even providing βincorrectβ information, because sometimes it relies on information provided by the supplier from the BIOS (via SMBIOS), which often comes up empty or incorrect. instead of communicating with specific hardware.
I already went through this experience to get information about RAM. WMI provided incorrect BIOS information, and I found that the RAM chips came with a special SPD (Serial Presence Detect) chip that I needed to communicate with. My employer eventually chose the CPUID API.
Here the author of CPU-Z talks a bit about this in an interview:
http://www.techpowerup.com/mobile/reviews/Interviews/Franck_Delattre/1.html
To get this information, you need to find a way to interact with the PCI configuration space in kernel mode using the driver, or go to an alternative API that will do this for you.
Here are some links that I made during this time:
http://www.codeproject.com/Articles/35378/Access-Physical-Memory-Port-and-PCI-Configuration
http://support.microsoft.com/?scid=kb;en-us;253232&x=3&y=13
http://www.hollistech.com/Resources/Misc%20articles/getbusdata.htm
http://www.osronline.com/showThread.CFM?link=176210#T4
Also, I think it's worth mentioning the SetupDi features in Windows, which sometimes can provide information that WMI cannot.
source share