2008년 07월 24일
VerQueryValue _ 불법 유저여 아디오스~~^^
► 종종 라이브 업데이트 일을하다 보면 분명 작업을 해서 배포를 했는데,거짓말과도 비슷한 버그 리포팅이 들어올때가 한두번이 아니다..
그래서 생각을 한게 레지나정보파일을 따로 둬서 버젼체크를 하는 방식이 아니고,(요즘 어지간한 유저들은 레지를 만져 버젼이나 기타 정보를 수정함으로서 업그레이드 서버를 안 거치고 그냥 인증으로 가는 경우가 많은듯 하다...;;;)클라이언트 파일 자체에 버젼 리소스를 할당함으로써 버젼체크를 하도록 구조를 변경하였다.
이제 거짓말장이 유저와 거짓말장이운영진과도 안녕이군..하하하.
이하는 아주 간단하게 WinEntry에서 버젼리소스의 값을 검사한 코드이다....
또한 안정성을 위해서 역시런쳐에서도 이와 비슷한 작업을 해 주었다.
///search directory
GetModuleFileName(0,szPath, _MAX_PATH);
DWORD dwSize = GetFileVersionInfoSize(szPath, 0);
LPVOID lpData = malloc(dwSize);
///Get fileversioninfo resource
GetFileVersionInfo(szPath,0, dwSize, lpData);
structLANGANDCODEPAGE
{
WORDwLanguage;
WORDwCodePage;
}*lpTranslate;
UINTcbTranslate = 0;
VerQueryValue(lpData,_T("\\VarFileInfo\\Translation"), (void**)&lpTranslate,&cbTranslate);
TCHARszKey[256];
_stprintf(szKey,_T("\\StringFileInfo\\%04x%04x\\FileVersion"),
lpTranslate->wLanguage,lpTranslate->wCodePage);
TCHAR*pszValue = 0;
UINTuLen;
VerQueryValue(lpData,szKey, (void**)&pszValue, &uLen);
//_putts(pszValue);
free(lpData);
함수의원형이다... 다른함수의 원형에 대해서도 궁금하시면...MSDN을 만나세요..^^
boolAPIENTRY VerQueryValue( const LPVOID pBlock, LPSTR lpSubBlock,LPVOID* lplpBuffer,
PUINTpuLen);
앗 하나더 중요한것이 ...#pragma comment (lib, "version.lib") 훗훗
# by | 2008/07/24 11:05 | Do Job | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]