2010-07-27 5 views
2

C++ (Visual Studio)를 사용하고 있고 .bmp 파일이 합법적인지 (일부 virus.exe 이름이 아닌지) 사용자가 인터넷을 통해 공유 할 수 있는지 확인하고 싶습니다. 내 응용 프로그램을 사용하는 다른 사용자. DirectX 2d 렌더링 및 프레임 워크를 사용하고 있습니다.C++ : bmp 파일이 합법적인지 확인합니다.

비트 맵의 ​​유효성을 검사하는 쉬운 방법이 있습니까?

감사합니다.

+0

아마도 수신자 쪽에서 유효성을 검사하고 싶을 것입니다 (아마도 보낸 사람의 끝뿐 아니라). –

답변

2

당신은 잘못된 비트 맵 실패는 Win32 LoadImage와 비트 맵을로드 시도 할 수 있습니다.

다른 사람들이 언급 한 것처럼 비트 맵 헤더와 온전한 파일 크기 (헤더에서 찾은 것을 기반으로 함)를 검사 할 수 있습니다. 그것은 LoadImage보다 빠르지 만 작성하고 테스트하는 코드가 많습니다. 비트 맵 헤더에는 많은 법적 변형이 있습니다.

영원히 머물러 있기 때문에 아마도 LoadImage을 잘 테스트합니다.

+0

헤더가 파일의 나머지 부분과 일치하지 않는다고해서 반드시 파일이 바이러스라는 것을 의미하지는 않습니다. 일부 응용 프로그램에는 문제가없고 다른 응용 프로그램에서는 거부하는 잘못된 형식의 이미지 파일 일 수 있습니다. – UncleBens

+0

@UncleBens : 사실, 질문은 "(쉬운) 비트 맵 유효성 검사 방법이 있습니까?"라고 제기되었습니다. –

3

언제든지 비트 맵 헤더가 유효한지 확인할 수 있습니다. 이 기능을 사용할 수 있습니다 http://easybmp.sourceforge.net/

가 : 주어진 파일이 올바른 BMP가 아닌 경우

bool ReadFromFile(char* FileName). 

그것은 false를 돌려줍니다 비트 맵 헤더의 형식은 here

+0

좋은 생각입니다. 머리글 뒤에 가비지가 있으면 DirectX에서 파일을 무시하기를 바랍니다. – Eliasdx

0

확인이 라이브러리를 찾을 수 있습니다 파일. 유감스럽게도 전체 파일을 메모리에로드하기 때문에 헤더 만 테스트하면됩니다. 헤더를 수동으로 테스트하거나이를 위해 몇 가지 API를 찾을 수 있습니다.

희망이 있습니다.

편집 :이 링크도 확인 : http://www.gamedev.net/reference/articles/article1966.asp

관련 문제