プログラムでドライバーのバージョン番号を取得しようとしています。を使用して構造体SetupDiEnumDriverInfo
を取得し、 .SP_DRVINFO_DATA
DriverVersion field
次のコードは機能しますが、同じドライバーに対して 2 つの異なるバージョンを返します。私のデバイスはカスタム USB デバイスで、単一の .sys ファイルがあります。私のマシンに接続されているデバイスは 1 つだけです。DIGCF_PRESENT
現在接続されているデバイスのドライバーのみを照会するように指定します。
int main(void)
{
// Get the "device info set" for our driver GUID
HDEVINFO devInfoSet = SetupDiGetClassDevs(
&GUID_DEVINTERFACE_USBSPI, NULL, NULL,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
// Cycle through all devices currently present
for (int i = 0; ; i++)
{
// Get the device info for this device
SP_DEVINFO_DATA devInfo;
devInfo.cbSize = sizeof(SP_DEVINFO_DATA);
if (!SetupDiEnumDeviceInfo(devInfoSet, i, &devInfo))
break;
// Build a list of driver info items that we will retrieve below
if (!SetupDiBuildDriverInfoList(devInfoSet,
&devInfo, SPDIT_COMPATDRIVER))
return -1; // Exit on error
// Get all the info items for this driver
// (I don't understand why there is more than one)
for (int j = 0; ; j++)
{
SP_DRVINFO_DATA drvInfo;
drvInfo.cbSize = sizeof(SP_DRVINFO_DATA);
if (!SetupDiEnumDriverInfo(devInfoSet, &devInfo,
SPDIT_COMPATDRIVER, j, &drvInfo))
break;
printf("Driver version is %08x %08x\n",
(unsigned)(drvInfo.DriverVersion >> 32),
(unsigned)(drvInfo.DriverVersion & 0xffffffffULL));
}
}
SetupDiDestroyDeviceInfoList(devInfoSet);
return 0;
}
私のマシンでは、これは次のように出力されます。
Driver version is 00000000 000015d3
Driver version is 00020004 00000000
友人のマシンでは、次のように出力されます。
Driver version is 00020004 00000000
Driver version is 00020004 00000000
2 行目は、デバイス マネージャーによって報告された数と一致します。
免責事項: 以前に同様の質問をしました。これは、SetupDiEnumDriverInfo が複数のドライバー バージョンを返す理由に関する新しい質問です。