簡體   English   中英

為什么Windows 10中的kernel32.dll上的GetFileVersionInfo返回版本6.2?

[英]Why does GetFileVersionInfo on kernel32.dll in Windows 10 return version 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中的相同): 在此輸入圖像描述

您正在從此任務的版本信息中讀取錯誤的字段。 而不是dwFileVersionMSdwFileVersionLS使用dwProductVersionMSdwProductVersionLS

文件版本字段受supportedOS兼容性問題的影響。 這是它們的值取決於應用程序清單中聲明的supportedOS級別。 另一方面,產品版本字段不依賴於清單。

未在Windows 8.1或Windows 10中顯示的應用程序將返回Windows 8 OS版本值(6.2)。

這是來自GetVersionEx函數的MSDN描述。 對於GetFileVersionInfo沒有這樣的說明,但真的這樣做。 我在調試器下看: 在此輸入圖像描述

在此輸入圖像描述

所以dwFileVersionMS中的10.0(0xA000)可以固定為6.2或6.3,但dwProductVersionMS - 未更改(0xA000~10.0)認為需要修復GetFileVersionInfo的MSDN文檔[Ex] :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM