?
Solved

Device Driver Version (win32 device management/device services)

Posted on 2008-06-16
3
Medium Priority
?
299 Views
Last Modified: 2013-12-04
How can I find the version of a device driver?

SetupDiGetDeviceRegistryProperty does not seem to be what I want because none of the SPDRP_... constants include anything about version information.

How does the device manager for windows do it, for example?
0
Comment
Question by:henrybaxter
  • 2
3 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 2000 total points
ID: 21799061
You can read the version number directly from the binary, see http://support.microsoft.com/kb/167597 ("SAMPLE: GetVers.exe Specifies Component FileVersion and #Version"). The scoop is to
#include <windows.h>
#include <iostream>
#pragma comment ( lib, "version.lib")
 
using namespace std;
 
   void reportError()
   {
       LPVOID lpMsgBuf;
 
       FormatMessage(
           FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
           NULL,
           GetLastError(),
           MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
           (LPTSTR) &lpMsgBuf,
           0,
           NULL );
 
       cout << (char*)lpMsgBuf << "\n";
 
       // Free the buffer.
       LocalFree( lpMsgBuf );
   }
 
   void main( int argc, char *argv[ ], char *envp[ ] )
   {
       cout << "\n";
 
       if(2 != argc)
       {
           cout << "Syntax: GetVer <File Name>\n";
           return;
       }
 
       DWORD dwArg;
       DWORD dwInfoSize = GetFileVersionInfoSize(argv[1], &dwArg);
 
       if(0 == dwInfoSize)
       {
           cout << "No version info available\n";
           reportError();
           return;
       }
 
       BYTE* lpBuff = new BYTE[dwInfoSize];
 
       if(!lpBuff)
       {
           cout << "Out of Memory\n";
           return;
       }
 
       if(0 == GetFileVersionInfo(argv[1], 0, dwInfoSize, lpBuff))
       {
           cout << "Error retrieving version info\n";
           reportError();
           return;
       }
 
       VS_FIXEDFILEINFO *vInfo;
 
       UINT uInfoSize;
 
       if(0 == VerQueryValue(lpBuff, TEXT("\\"),
               (LPVOID*)&vInfo,
               &uInfoSize))
       {
           cout << "Version information not available\n";
           delete lpBuff;
           return;
       }
 
       if(0 == uInfoSize)
       {
           cout << "Version information not available\n";
           delete lpBuff;
           return;
       }
 
       cout << argv[1]
           << " Version: "
           << HIWORD(vInfo->dwFileVersionMS) << ","
           << LOWORD(vInfo->dwFileVersionMS) << ","
           << HIWORD(vInfo->dwFileVersionLS) << ","
           << LOWORD(vInfo->dwFileVersionLS) << "\n";
 
       delete lpBuff;
   }

Open in new window

0
 

Author Closing Comment

by:henrybaxter
ID: 31467824
Sorry for the delay - I had to make sure I understood it!

Thanks for the help, it's very much appreciated.
0
 
LVL 86

Expert Comment

by:jkr
ID: 21799660
Err what delay? That was swift ;o)
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This is an article on how to answer questions, earn points and become an expert.
By default Outlook 2016 displays only one time zone in the Calendar. The following article explains how to display two time zones in one calendar view.
The Task Scheduler is a powerful tool that is built into Windows. It allows you to schedule tasks (actions) on a recurring basis, such as hourly, daily, weekly, monthly, at log on, at startup, on idle, etc. This video Micro Tutorial is a brief intro…
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…
Suggested Courses

615 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question