iccvid.dll のファイルバージョンがおかしい件とプログラミング

8月の MS10-055 Cinepak Codec の脆弱性により、リモートでコードが実行される (982665) で更新される iccvid.dll のバージョンを取得しようとしてうまくいかないことに気づきました|・ω・)ノ


iccvid
上のテーブルを見ると 1,10,0,13 がバージョンですが、下を見ると、 1.10.0.11がファイルバージョンになっています。

    DWORD       dwHdl  = NULL;
    WORD*       wTmp = NULL;
    DWORD dwIsz = GetFileVersionInfoSize(filename,&dwHdl);
    LPVOID* pVI = new LPVOID[dwIsz];
    nRet = GetFileVersionInfo(filename, dwHdl, dwIsz, pVI);
    if(nRet){
        nRet = VerQueryValue
      (pVI, "\\VarFileInfo\\Translation", &lpStr1, &dwLength);
        if(nRet){
            wTmp = (WORD*)lpStr1;
            wsprintf(sTmp,"\\StringFileInfo\\%04x%04x\\FileVersion, ", *wTmp, *(wTmp + 1));
            nRet = VerQueryValue(pVI, sTmp,&lpStr2, &dwLength);
        }
    }
    delete[] pVI;

普通のファイルバージョン取得処理。
これだと、"1.10.0.11" が返ってきます。

    DWORD     dwHdl  = NULL;
    UINT        nRet = 0;
    char retstr[64];
    DWORD dwIsz = GetFileVersionInfoSize(filename, &dwHdl);
    LPVOID* pVI = new LPVOID[dwIsz];
    nRet = GetFileVersionInfo(filename, dwHdl, dwIsz, pVI);
    if(nRet){
        VS_FIXEDFILEINFO* pFI;
        UINT nSize = 0;
        VerQueryValue(pVI, "\\", (LPVOID*)&pFI, &nSize);
        wsprintf(retstr,"%d.%d,%d.%d",
                HIWORD(pFI->dwFileVersionMS),
                LOWORD(pFI->dwFileVersionMS),
                HIWORD(pFI->dwFileVersionLS),
                LOWORD(pFI->dwFileVersionLS));       
    }
    delete[] pVI;
}

一方、この処理にすると "1.10.0.13" が返ります。
コンパイル時の不具合だと思うんですが迷惑な話です。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です