PE 포맷 바이너리 파일의 버전을 구하는 함수
2012. 4. 30. 08:39 in 프로그래밍/Let's Share it

와 같이 fileversion을 구하는 함수를 공유합니다.
fileversion은 숫자가 4개로 구성되는데, 각 숫자값을 전달해 줍니다.
- // version.lib import
- #include <assert.h>
- #include <winver.h>
- DWORD GetVersion(IN LPCTSTR lpszFilePath, OUT PWORD pwVer1, OUT PWORD pwVer2, OUT PWORD pwVer3, OUT PWORD pwVer4)
- {
- DWORD dwRtnValue = ERROR_SUCCESS;
- DWORD dwHandle = 0;
- DWORD dwDataSize = 0;
- LPBYTE bufVersionData = NULL;
- TCHAR szValue[MAX_PATH] = {0,};
- LPVOID pData = NULL;
- UINT nQuerySize = 0;
- VS_FIXEDFILEINFO* pVsffi = NULL;
- if ((NULL == lpszFilePath) || (NULL == pwVer1) || (NULL == pwVer2) || (NULL == pwVer3) || (NULL == pwVer4))
- {
- dwRtnValue = ERROR_INVALID_PARAMETER;
- assert(FALSE);
- goto FINAL;
- }
- // Clear output
- *pwVer1 = 0;
- *pwVer2 = 0;
- *pwVer3 = 0;
- *pwVer4 = 0;
- dwDataSize = ::GetFileVersionInfoSize(lpszFilePath, &dwHandle);
- if (0 == dwDataSize)
- {
- dwRtnValue = ::GetLastError();
- assert(FALSE);
- goto FINAL;
- }
- bufVersionData = new BYTE[dwDataSize];
- if (NULL == bufVersionData)
- {
- dwRtnValue = ERROR_NOT_ENOUGH_MEMORY;
- assert(FALSE);
- goto FINAL;
- }
- ZeroMemory(bufVersionData, sizeof(BYTE)*dwDataSize);
- if (FALSE == ::GetFileVersionInfo(lpszFilePath,
- dwHandle,
- dwDataSize,
- bufVersionData))
- {
- dwRtnValue = ::GetLastError();
- assert(FALSE);
- goto FINAL;
- }
- if (FALSE == ::VerQueryValue(bufVersionData,
- TEXT("\\"),
- (LPVOID*)&pVsffi,
- &nQuerySize))
- {
- dwRtnValue = ::GetLastError();
- assert(FALSE);
- goto FINAL;
- }
- *pwVer1 = HIWORD(pVsffi->dwFileVersionMS);
- *pwVer2 = LOWORD(pVsffi->dwFileVersionMS);
- *pwVer3 = HIWORD(pVsffi->dwFileVersionLS);
- *pwVer4 = LOWORD(pVsffi->dwFileVersionLS);
- FINAL:
- if (NULL != bufVersionData)
- {
- delete [] bufVersionData;
- bufVersionData = NULL;
- }
- return dwRtnValue;
- }
'프로그래밍 > Let's Share it' 카테고리의 다른 글
SQLite 암호화(encrypt) 지원하기 (SQLITE_HAS_CODEC) (30) | 2012.06.20 |
---|---|
간단하게 SHA256(sha2) 구하기 (1) | 2012.05.25 |
프로세스 생성 종결자 (ShellExecute / CreateProcess) (0) | 2012.03.23 |
손쉽게 File을 나열할 수 있는 class 공유(FindFirstFile/FindNextFile Wrapper) (0) | 2012.03.23 |
VC9.0에서 crypto++ library를 이용하여 SHA256(sha2) 구하기 (8) | 2011.12.14 |