System Hardware Information Finder | CodeGuru

System Hardware Information Finder

This article is an update to my previous articles on the same topic. I started this utility to get some basic information about the hardware. After that I have received some emails from some of our fellow programmers, who are frequent visitors of this site, asking to extend this utility to spit out some more […]

Written By
CodeGuru Staff
CodeGuru Staff
Feb 8, 1999
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

This article is an update to my previous articles on the same topic. I started this utility to get some basic information about the hardware. After that I have received some emails from some of our fellow programmers, who are frequent visitors of this site, asking to extend this utility to spit out some more information.
In this update I have added the information about CPU vendor (Intel, Cyrix, AMD, etc.) ,CPU speed, and Physical memory status of sustem .

CPU Information:


To get CPU information I could not find any direct and simple API call. Then I thought of our friendly Registry, which contains all the system information. And there it was all the information I wanted. If you look under HKEY_LOCAL_MACHINE/Hardware/Description/System/CentralProcessor/0 key in registry, you will find the answers to your questions. ~MHz subkey gives the CPU speed and VendorIdentifier gives the vendor information.


We will make use of RegQueryValueEx API call to get the information.

LONG RegQueryValueEx(
HKEY hKey, 			// handle to key to query
LPTSTR lpValueName, 	// address of name of value to query
LPDWORD lpReserved, 	// reserved
LPDWORD lpType, 		// address of buffer for value type
LPBYTE lpData, 		// address of data buffer
LPDWORD lpcbData 		// address of data buffer size
);

Before making this call, it is necessary to create the handle to registry key which needs to be queried. For this make use of RegCreateKeyEx API call.

This is how the code looks like in the included code for this utility.

// Get the processor speed info.
result = ::RegOpenKeyEx (HKEY_LOCAL_MACHINE,
	“Hardware\Description\System\CentralProcessor\0”, 0, KEY_QUERY_VALUE, &hKey);
// Check if the function has succeeded.
if (result == ERROR_SUCCESS) {
	result = ::RegQueryValueEx (hKey, _T(“~MHz”), NULL, NULL,
		(LPBYTE)&data, &dataSize);
	m_stCPUSpeed.Format (“%d”, data);
	m_stCPUSpeed += _T (” MHz”);
	dataSize = sizeof (vendorData);
	result = ::RegQueryValueEx (hKey, _T(“VendorIdentifier”), NULL, NULL,
		(LPBYTE)vendorData, &dataSize);
	m_stVendorInfo.Format (“%s”, vendorData);
}
// Make sure to close the reg key
RegCloseKey (hKey);

Since I don’t have access to any other CPU than Intel. So I couldn’t test this code on CPU’s from Cyrix, AMD, etc.

Physical Memory Status:


To get the information about the memory status of the system we can take routes. First one, which is not easy for a person who does not know assembly language, involves getting the required information from CMOS data. Second one which simply involves making GlobalMemoryStatus API call. And I chose the second one (Ofcourse I am not assembly language pro).

VOID GlobalMemoryStatus (
LPMEMORYSTATUS lpBuffer // pointer to the memory status structure
);

The information is returned in MEMORYSTATUS data structure.

typedef struct _MEMORYSTATUS { // mst
 DWORD dwLength; // sizeof(MEMORYSTATUS)
 DWORD dwMemoryLoad; // percent of memory in use
 DWORD dwTotalPhys; // bytes of physical memory
 DWORD dwAvailPhys; // free physical memory bytes
 DWORD dwTotalPageFile; // bytes of paging file
 DWORD dwAvailPageFile; // free bytes of paging file
 DWORD dwTotalVirtual; // user bytes of address space
 DWORD dwAvailVirtual; // free user bytes
} MEMORYSTATUS, *LPMEMORYSTATUS;

The information returned by the GlobalMemoryStatus function is volatile. There is no guarantee that two sequential calls to this function will return the same information. This API call has been made in GetMemoryInfo function of the application attached. I gets the information for memory usage, total physical memory instaled, physical memory available, and total virtual memory.

Download source – 27 KB

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.