GetFIleVersionInfoSize()成功但返回的大小不正确

时间:2014-07-22 15:38:58

标签: c++ winapi

我正在尝试获取文件的版本。我想看看这个文件的版本号,以确定在未启动的驱动器上安装了哪个操作系统(我实际上是从Win PE环境中执行此操作并尝试确定主驱动器是否具有Windows XP或Windows 7安装)。无论如何,我有以下

wchar_t *fileName;
fileName = new wchar_t[255];

lstrcpy(fileName, hdds[HardDriveIndexes::SystemDrive].driveLetter.c_str());

lstrcat(fileName, L"Windows\\System32\\winload.exe");

TCHAR *versionInfoBuffer;

DWORD versionDataSize;

if (versionDataSize = GetFileVersionInfoSize(fileName, NULL) != 0)
{
    versionInfoBuffer = new TCHAR[versionDataSize];

    BOOL versionInfoResult = FALSE;

    versionInfoResult = GetFileVersionInfo(fileName, NULL, versionDataSize, versionInfoBuffer);
    if (versionInfoResult == FALSE)
    {
        wprintf(L"The last error associated with getting version info is: %d\n", GetLastError());
    }

}
else
{
    wprintf(L"The last error associated with gettting version info size is: %d\n", GetLastError());
}

问题是GetFileVersionInfoSize()成功但总是返回1作为大小。这导致GetFileVersionInfo()失败并出现错误122.到目前为止,我只在Windows 7系统上测试了这一点。还有另一个函数Ge​​tFileVersionInfoSizeEx()按预期工作,但它仅从Vista开始支持。如果可能的话,我想保留XP支持(我们的一些旧的Win PE图像仍然基于XP)。

GetFileVersionInfoSize()是否已弃用,我无法找到该信息,我是否正确使用它等等?

1 个答案:

答案 0 :(得分:4)

问题不在于通话,而在于你的作业;你需要它周围的parens:

if ( ( versionDataSize = GetFileVersionInfoSize(fileName, NULL) ) != 0)

你所写的内容赋予了表达式size != 0的值,该值为1表示真实。