iccvid.dll のファイルバージョンがおかしい件とプログラミング
8月の MS10-055 Cinepak Codec の脆弱性により、リモートでコードが実行される (982665) で更新される iccvid.dll のバージョンを取得しようとしてうまくいかないことに気づきました|・ω・)ノ
上のテーブルを見ると 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" が返ります。
コンパイル時の不具合だと思うんですが迷惑な話です。
Comments