#include <psapi.h>
#pragma comment(lib, "psapi.lib")
void EnumAllDeviceDrivers()
{
do
{
LPVOID aDrivers[1024];
memset(aDrivers, 0, sizeof(aDrivers));
DWORD cbNeeded = 0;
if ( !EnumDeviceDrivers( aDrivers, sizeof(aDrivers), &cbNeeded ) )
break;
// Calculate how many drivers were returned
DWORD cDrivers = cbNeeded / sizeof(aDrivers[0]);
// Spit out the information for each driver
for ( unsigned int i = 0; i < cDrivers; i++ )
{
TCHAR szBaseName[MAX_PATH];
TCHAR szDriverFileName[MAX_PATH];
memset(szBaseName, 0, sizeof(szBaseName));
memset(szDriverFileName, 0, sizeof(szDriverFileName));
// Get the driver's base name
if (! GetDeviceDriverBaseName( aDrivers[i], szBaseName,
sizeof(szBaseName) ) )
continue;
// Get the full path to the driver
if(!GetDeviceDriverFileName( aDrivers[i], szDriverFileName,
sizeof(szDriverFileName) ) )
continue;
TRACE( _T("%s (0x%08X) [%s]\n"),
szBaseName, aDrivers[i], szDriverFileName);
}
}while(0);
}