资源简介
判断一个文件是否是合法的PE文件
IsValidPEFile.cpp
代码片段和文件信息
#include “stdafx.h“
#include
#include
#include
/*
Code From Internet Web.
This file IS PROVIDED by: hustwing@qq.com
QQ:10196739
MSN:hustwing@hotmail.com
*/
BOOL IsValidPEFile(LPTSTR tszFullFileName)
{
HANDLE hFile = INVALID_HANDLE_VALUE;
HANDLE hMapping = INVALID_HANDLE_VALUE;
LPVOID pvMem = NULL;
BOOL bIsPE = FALSE;
if (!PathFileExists(tszFullFileName))
{
return bIsPE;
}
// 根据 PE 签名判断当前文件是否是合法的 PE 文件
hFile = CreateFile( tszFullFileName GENERIC_READ FILE_SHARE_READ
NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL );
if ( hFile == INVALID_HANDLE_VALUE )
{
::_tprintf_s(_T(“CreateFile failed.\r\n“));
goto __cleanup;
}
hMapping = CreateFileMapping( hFile NULL PAGE_READONLY 0 0 NULL );
if ( hMapping == INVALID_HANDLE_VALUE )
{
::_tprintf_s(_T(“CreateFileMapping failed.\r\n“));
goto __cleanup;
}
pvMem = MapViewOfFile( hMapping FILE_MAP_READ 0 0 0 );
if (NULL == pvMem)
{
::_tprintf_s(_T(“MapViewOfFile failed.\r\n“));
goto __cleanup;
}
// 是否包含有 DOS 签名
if ( *( USHORT* ) pvMem != IMAGE_DOS_SIGNATURE )
{
::_tprintf_s(_T(“无DOS签名.\r\n“));
goto __cleanup;
}
// 是否包含有 NT 签名
if ( *( ( DWORD* ) ( ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew ) ) != IMAGE_NT_SIGNATURE )
{
::_tprintf_s(_T(“无NT签名.\r\n“));
goto __cleanup;
}
bIsPE = TRUE;
__cleanup:
if (pvMem != NULL)
{
UnmapViewOfFile(pvMem);
}
if (hMapping != INVALID_HANDLE_VALUE)
{
CloseHandle(hMapping);
}
if (hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
}
return bIsPE;
}
BOOL IsWindowsApp(LPTSTR tszFullFileName)
{
HANDLE hFile = INVALID_HANDLE_VALUE;
HANDLE hMapping = INVALID_HANDLE_VALUE;
LPVOID pvMem = NULL;
BOOL bIsWinApp = FALSE;
if (!PathFileExists(tszFullFileName))
{
return bIsWinApp;
}
// 根据 PE 签名判断当前文件是否是合法的 PE 文件
hFile = CreateFile( tszFullFileName GENERIC_READ FILE_SHARE_READ
NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL );
if ( hFile == INVALID_HANDLE_VALUE )
{
::_tprintf_s(_T(“CreateFile failed.\r\n“));
goto __cleanup;
}
hMapping = CreateFileMapping( hFile NULL PAGE_READONLY 0 0 NULL );
if ( hMapping == INVALID_HANDLE_VALUE )
{
::_tprintf_s(_T(“CreateFileMapping failed.\r\n“));
goto __cleanup;
}
pvMem = MapViewOfFile( hMapping FILE_MAP_READ 0 0 0 );
if (NULL == pvMem)
{
::_tprintf_s(_T(“MapViewOfFile failed.\r\n“));
goto __cleanup;
}
// 是否包含有 DOS 签名
if ( *( USHORT* ) pvMem != IMAGE_DOS_SIGNATURE )
{
::_tprintf_s(_T(“无DOS
- 上一篇:后缀表达式求值
- 下一篇:C语言经典讲义!华科密文
相关资源
- openssl c语言应用
- 模拟卫星旋转和地球自转
- OpenCV手势识别-手掌特征提取源码
- OpenGL纹理贴图源程序.rar
- 计算机图形学实验二 opengl
- openmp的矩阵相乘cannon算法实现
- usertype.dat
- OpenGL载入3ds模型并在MFC视图窗口显示
- vc++&opencv图像分块
- C++ 桌面宠物-金鱼
- OpenCv背景差分228299
- SuperGrid-MFC_ListCtrl控件扩展(让ListCt
- 在VC 6.0的opencv环境下视频显示与捕捉
- 计算机图形学OpenGL画机器人
- VC++ 实现增大可执行文件的体积 自
- openGL通过点线方式画出立方体并移动
- 唯一可译码源代码c语言 含报告
- openCV获取车流
- OPENGL 画颜色渐变六角星+旋转
- Opencv C++ 读取、保存图片
- NCDDE服务连接DDE封装的APIddehelper
- opengl头文件
- opengl五角星绘制
- C语言 简易二十四节气判断代码
- C++实现的JPEG压缩算法
- OpenCV视频的保存以及显示
- OpenGL火焰
- OpenGL纹理茶壶
- c++中的chamfer matching 实现
- 判断一个字符串是否是中心对称 C++描
评论
共有 条评论