Почему GetFileVersionInfo на kernel32.dll в Windows 10 возвращает версию 6.2?

используя следующий код, я пытаюсь получить версию kernel32.dll для проверки версии Windows.
тем не менее, по какой-то причине, хотя версия kernel32.dll (как видно из свойств файла) — 10.0.10586.0, возвращаемая версия: 6.2.10586.0
Как так?

    DWORD dwDummy;
DWORD dwFVISize = GetFileVersionInfoSize(lpszFilePath, &dwDummy);
LPBYTE lpVersionInfo = new BYTE[dwFVISize];
if (GetFileVersionInfo(lpszFilePath, 0, dwFVISize, lpVersionInfo) == 0)
{
return FALSE;
}

UINT uLen;
VS_FIXEDFILEINFO *lpFfi;
BOOL bVer = VerQueryValue(lpVersionInfo, L"\\", (LPVOID *)&lpFfi, &uLen);

if (!bVer || uLen == 0)
{
return FALSE;
}
DWORD dwFileVersionMS = lpFfi->dwFileVersionMS;
DWORD dwFileVersionLS = lpFfi->dwFileVersionLS;
delete[] lpVersionInfo;

DWORD dwLeftMost = HIWORD(dwFileVersionMS);
DWORD dwSecondLeft = LOWORD(dwFileVersionMS);
DWORD dwSecondRight = HIWORD(dwFileVersionLS);
DWORD dwRightMost = LOWORD(dwFileVersionLS);

Свойства Kernel32.dll (такие же, как в SysWow64):
введите описание изображения здесь

4

Решение

Вы читаете неправильные поля из информации о версии для этой задачи. Вместо dwFileVersionMS а также dwFileVersionLS использование dwProductVersionMS а также dwProductVersionLS,

Поля версии файла могут быть supportedOS проблемы совместимости. То есть их значения зависят от supportedOS уровни, заявленные в манифесте приложения. С другой стороны, поля версии продукта не зависят от манифеста.

6

Другие решения

Приложения, не указанные в Windows 8.1 или Windows 10, вернутся
значение версии ОС Windows 8 (6.2).

это из описания функции MSDN функции GetVersionEx. для GetFileVersionInfo такой заметки нет, но на самом деле это происходит так же. я смотрю под отладчиком:
введите описание изображения здесь

введите описание изображения здесь

поэтому 10.0 (0xA000) в dwFileVersionMS можно установить на 6.2 или 6.3.
но dwProductVersionMS — не изменилось (0xA000 ~ 10.0)
думаю нужно исправить документацию MSDN для GetFileVersionInfo [Ex] 🙂

4

По вопросам рекламы [email protected]