Microsoft KB Archive/259695

{|
 * width="100%"|

HOWTO: Enumerate Hardware Devices by Using SetupDi Calls

 * }

Q259695

-

The information in this article applies to:


 * Microsoft Windows 2000 Driver Development Kit (DDK)
 * Microsoft Windows NT 4.0 Driver Development Kit (DDK)

-

SUMMARY
To get a list of installed hardware devices in Windows 2000, applications can employ the SetupDi class of API functions.

MORE INFORMATION
The following code fragment demonstrates how to display a list of all installed hardware devices:

#include 
 * 1) include 
 * 2) include 
 * 3) include 
 * 4) include 

int main( int argc, char *argv[ ], char *envp[ ] ) {   HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i;

// Create a HDEVINFO with all present devices. hDevInfo = SetupDiGetClassDevs(NULL,       0, // Enumerator        0,        DIGCF_PRESENT | DIGCF_ALLCLASSES ); if (hDevInfo == INVALID_HANDLE_VALUE) {       // Insert error handling here. return 1; }   // Enumerate through all devices in Set. DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i, &DeviceInfoData);i++) {       DWORD DataT; LPTSTR buffer = NULL; DWORD buffersize = 0; //        // Call function with null to begin with, // then use the returned buffer size // to Alloc the buffer. Keep calling until // success or an unknown failure. //        while (!SetupDiGetDeviceRegistryProperty( hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, &DataT, (PBYTE)buffer, buffersize, &buffersize)) {           if (GetLastError ==                 ERROR_INSUFFICIENT_BUFFER) {               // Change the buffer size. if (buffer) LocalFree(buffer); buffer = LocalAlloc(LPTR,buffersize); }           else {               // Insert error handling here. break; }       }        printf(&quot;Result:[%s]\n&quot;,buffer); if (buffer) LocalFree(buffer); }   if ( GetLastError!=NO_ERROR &&         GetLastError!=ERROR_NO_MORE_ITEMS ) {       // Insert error handling here. return 1; }   //  Cleanup SetupDiDestroyDeviceInfoList(hDevInfo); return 0; } The following code fragment demonstrates how to retreive a set of all display adapters on a system.

   hDevInfo = SetupDiGetClassDevs(        (LPGUID) &GUID_DEVCLASS_DISPLAY,        0,        0,        DIGCF_PRESENT); The following code fragment demonstrates how to retrieve a set of all devices on the Peripheral Component Interconnect (PCI) bus.

   hDevInfo = SetupDiGetClassDevs(NULL,        REGSTR_KEY_PCIENUM, // Enumerator        0,        DIGCF_PRESENT | DIGCF_ALLCLASSES ); Windows API functions that require a Device Instance Handle, such as the Config Manager set of API functions, can use the DevInst value in the structure SP_DEVINFO_DATA returned by the SetupDiEnumDeviceInfo function.