|
2 | 2 |
|
3 | 3 | #include <memory> |
4 | 4 | #include <YY/Base/ErrorCode.h> |
| 5 | +#include <YY/Base/Utils/SystemInfo.h> |
5 | 6 |
|
6 | 7 | #pragma comment(lib, "Version.lib") |
7 | 8 |
|
@@ -45,23 +46,26 @@ namespace YY |
45 | 46 |
|
46 | 47 | VS_FIXEDFILEINFO* _pFileInfo = NULL; |
47 | 48 | UINT _cbFileInfo; |
48 | | -#ifndef _ATL_XP_TARGETING |
49 | | - if (!VerQueryValueW(_hGlobal, L"\\", (LPVOID*)&_pFileInfo, &_cbFileInfo)) |
50 | | - { |
51 | | - return HRESULT_From_LSTATUS(GetLastError()); |
52 | | - } |
53 | | -#else |
54 | | - // XP系统不允许直接调用,不然会触发内存非法访问。所以先复制到一个内存块上 |
55 | | - const DWORD _cbFileInfoBuffer = SizeofResource(_hMoudle, _hRsrcVersion); |
56 | | - void* _pFileInfoBuffer = alloca(_cbFileInfoBuffer); |
| 49 | + if (GetOperatingSystemVersion() >= Version(6, 0)) |
| 50 | + { |
| 51 | + if (!VerQueryValueW(_hGlobal, L"\\", (LPVOID*)&_pFileInfo, &_cbFileInfo)) |
| 52 | + { |
| 53 | + return HRESULT_From_LSTATUS(GetLastError()); |
| 54 | + } |
| 55 | + } |
| 56 | + else |
| 57 | + { |
| 58 | + // XP系统不允许直接调用,不然会触发内存非法访问。所以先复制到一个内存块上 |
| 59 | + const DWORD _cbFileInfoBuffer = SizeofResource(_hMoudle, _hRsrcVersion); |
| 60 | + void* _pFileInfoBuffer = alloca(_cbFileInfoBuffer); |
57 | 61 |
|
58 | | - memcpy(_pFileInfoBuffer, _hGlobal, _cbFileInfoBuffer); |
| 62 | + memcpy(_pFileInfoBuffer, _hGlobal, _cbFileInfoBuffer); |
59 | 63 |
|
60 | | - if (!VerQueryValueW(_pFileInfoBuffer, L"\\", (LPVOID*)&_pFileInfo, &_cbFileInfo)) |
61 | | - { |
62 | | - return HRESULT_From_LSTATUS(GetLastError()); |
63 | | - } |
64 | | -#endif |
| 64 | + if (!VerQueryValueW(_pFileInfoBuffer, L"\\", (LPVOID*)&_pFileInfo, &_cbFileInfo)) |
| 65 | + { |
| 66 | + return HRESULT_From_LSTATUS(GetLastError()); |
| 67 | + } |
| 68 | + } |
65 | 69 |
|
66 | 70 | _pVersion->uLowPart = _pFileInfo->dwFileVersionLS; |
67 | 71 | _pVersion->uHightPart = _pFileInfo->dwFileVersionMS; |
|
0 commit comments