Jump to content

Chipset detection in Delphi


Recommended Posts

Hi All,

I would like to ask you, how can I detect chipset type of motherboard. I haven`t found this info in WMI. Resp. I found some in Win32_PNPEntity, but on every PC I have different models, so I cannot grab name from exact position. Can somebody help me, how or where discover, what kind of chipset is used (Intel 945 or VIA....). Thanks a lot.

Link to comment
Share on other sites


The Win32_BaseBoard class has some good info (if the vendor actually provides the data to the OS, and I know at least most Intel boards respond very well to this), as well as the Win32_MotherboardDevice class.

Win32_BaseBoard:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_BaseBoard",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------"
Wscript.Echo "Win32_BaseBoard instance"
Wscript.Echo "-----------------------------------"
Wscript.Echo "Caption: " & objItem.Caption
If isNull(objItem.ConfigOptions) Then
Wscript.Echo "ConfigOptions: "
Else
Wscript.Echo "ConfigOptions: " & Join(objItem.ConfigOptions, ",")
End If
Wscript.Echo "CreationClassName: " & objItem.CreationClassName
Wscript.Echo "Depth: " & objItem.Depth
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "Height: " & objItem.Height
Wscript.Echo "HostingBoard: " & objItem.HostingBoard
Wscript.Echo "HotSwappable: " & objItem.HotSwappable
Wscript.Echo "InstallDate: " & objItem.InstallDate
Wscript.Echo "Manufacturer: " & objItem.Manufacturer
Wscript.Echo "Model: " & objItem.Model
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "OtherIdentifyingInfo: " & objItem.OtherIdentifyingInfo
Wscript.Echo "PartNumber: " & objItem.PartNumber
Wscript.Echo "PoweredOn: " & objItem.PoweredOn
Wscript.Echo "Product: " & objItem.Product
Wscript.Echo "Removable: " & objItem.Removable
Wscript.Echo "Replaceable: " & objItem.Replaceable
Wscript.Echo "RequirementsDescription: " & objItem.RequirementsDescription
Wscript.Echo "RequiresDaughterBoard: " & objItem.RequiresDaughterBoard
Wscript.Echo "SerialNumber: " & objItem.SerialNumber
Wscript.Echo "SKU: " & objItem.SKU
Wscript.Echo "SlotLayout: " & objItem.SlotLayout
Wscript.Echo "SpecialRequirements: " & objItem.SpecialRequirements
Wscript.Echo "Status: " & objItem.Status
Wscript.Echo "Tag: " & objItem.Tag
Wscript.Echo "Version: " & objItem.Version
Wscript.Echo "Weight: " & objItem.Weight
Wscript.Echo "Width: " & objItem.Width
Next

Win32_MotherboardDevice:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_MotherboardDevice",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------"
Wscript.Echo "Win32_MotherboardDevice instance"
Wscript.Echo "-----------------------------------"
Wscript.Echo "Availability: " & objItem.Availability
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
Wscript.Echo "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
Wscript.Echo "CreationClassName: " & objItem.CreationClassName
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "DeviceID: " & objItem.DeviceID
Wscript.Echo "ErrorCleared: " & objItem.ErrorCleared
Wscript.Echo "ErrorDescription: " & objItem.ErrorDescription
Wscript.Echo "InstallDate: " & objItem.InstallDate
Wscript.Echo "LastErrorCode: " & objItem.LastErrorCode
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID
If isNull(objItem.PowerManagementCapabilities) Then
Wscript.Echo "PowerManagementCapabilities: "
Else
Wscript.Echo "PowerManagementCapabilities: " & Join(objItem.PowerManagementCapabilities, ",")
End If
Wscript.Echo "PowerManagementSupported: " & objItem.PowerManagementSupported
Wscript.Echo "PrimaryBusType: " & objItem.PrimaryBusType
Wscript.Echo "RevisionNumber: " & objItem.RevisionNumber
Wscript.Echo "SecondaryBusType: " & objItem.SecondaryBusType
Wscript.Echo "Status: " & objItem.Status
Wscript.Echo "StatusInfo: " & objItem.StatusInfo
Wscript.Echo "SystemCreationClassName: " & objItem.SystemCreationClassName
Wscript.Echo "SystemName: " & objItem.SystemName
Next

Link to comment
Share on other sites

  • 3 weeks later...

Thanks cluberti, I already tried these two things. But nowhere is Chipset name. This is, what I need to determine. Maybe with help of other component/code. But I seek entire WMI and not found exact way, how to determine it :(

Link to comment
Share on other sites

Thanks cluberti, I already tried these two things. But nowhere is Chipset name. This is, what I need to determine. Maybe with help of other component/code. But I seek entire WMI and not found exact way, how to determine it :(

There is no WMI class that will help you detect the chipset. Nor any native API of any kind. WMI is somewhat limited (not just for tasks like chipset detection, also like how to detect CPU types properly: 64bit or not, Dual Core or not, HyperThreading or not... Some classes are there but never return anything -- like some probes). But it all comes down to this: there's no chipset information in the SMBIOS tables and such. There's no real place to get the information from.

There's only one easy way. And yes you'd be using WMI (and yes, specifically the Win32_PnPEntity class you were already using). You enumerate them, and try to match with the right vendor/device IDs of the chipsets. Yes, it is a real PITA.

E.g. you want to detect an Intel chipset, like say, the 915G. Their VendorID is 8086, and you use a device like the one with the DeviceID 2580 ("Host Bridge / DRAM Controller" or "Intel® 915G/P/GV Processor to I/O Controller - 2580"). Pick something specific to the chipset you want to detect (i.e. not USB ports or a IDE controller, more like a bridge or such) So here you'd be looking for a DeviceID of PCI\VEN_8086&DEV_2580&... (match the left portion). Via would be VendorID 1106, SiS would be 1039, etc. You'll have to create a database of sorts for the chipsets you want to detect.

Yes. It sucks, but there really aren't any other easy ways (reading the ACPI tables directly is not easy). No idea how you'd do this in Delphi (last time I've used Borland's stuff was in the Windows 95 days, and I really don't miss it).

Link to comment
Share on other sites

Thanks for your message!

I know, that there is lot of unfilled entries (e.g. RevisionLevel in CDROMDRIVE - I want to detect FW of drive and here shoul be - I must to extract it from DeviceID).

I will try to do with chipset some things you describe. It is strange - everything is in operating system, OS is detecting it succesfully, but not provide.. :(

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...