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

标签 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 系统上对此进行了测试。还有另一个函数 GetFileVersionInfoSizeEx() 可以按预期工作,但仅从 Vista 开始支持它。如果可能,我想保留对 XP 的支持(我们的一些旧 Win PE 镜像仍然基于 XP)。

是否已弃用 GetFileVersionInfoSize() 并且我无法以某种方式找到该信息,我是否使用不正确等等?

最佳答案

问题不在于电话,而在于您的作业;你需要周围的 parent :

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

您编写的内容为表达式 size != 0 赋值,1 表示真。

关于c++ - GetFIleVersionInfoSize() 成功但返回不正确的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24891777/

相关文章:

c++ - 删除空格后如何将空格插入字符串

c# - COM C#,如何用C++调用COM

windows - REG EXPORT HKLM\System\CurrentControlSet - Windows 上出现错误

c++ - 选项卡控件上的列表控件 SetFocus 重绘错误

c++ - 从字符串文字初始化 char 数组是否被认为是隐式转换?

c++ - 数组在函数中作为参数传递并被访问,那么为什么函数返回后数组的值会被修改呢?

c++ - 最大长度的字符串类型

c++ - winapi - 获取和/或更改我的钩子(Hook)的顺序和优先级

c++ - 来自 LookupAccountSid() 的 "The parameter is incorrect"错误

c++ - 如何使用 ATA 命令读取磁盘的特定扇区?