HANDLE hFile,hMapping;
IMAGE_DOS_HEADER *idh;
IMAGE_NT_HEADERS *inh; hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY,0,0,0)
hMapping = MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0)
idh = hMapping;  <---这里出错
if(idh->e_magic = IMAGE_DOS_SIGNATURE)
{inh = idh + idh->e_lfanew;  <---这里出错
  if(inh->Signature = IMAGE_NT_SIGNATURE)
   {
    iIsValid = 1; 
   }
  else
   {
    iIsValid = 0;
   }
}
UnmapViewOfFile(hMapping);我想用这段程序来验证一个PE文件是否是有效的文件,我应该任何进行类型转换,或是换另外一种操作方法。

解决方案 »

  1.   

    MapViewOfFile返回LPVOID,应该进行转换: 
    idh =(IMAGE_DOS_HEADER *)hMapping;
    inh = (IMAGE_DOS_HEADER *)(idh + idh->e_lfanew);看起来这样转换很危险,要弄清楚他们之间的地址的关系之后才能转换。
      

  2.   

    int iIsValid = 0;
    HANDLE hFile,hMapping;
    IMAGE_DOS_HEADER *idh;
    IMAGE_NT_HEADERS *inh;hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY,0,0,0);
    hMapping = MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0);
    idh = (IMAGE_DOS_HEADER*)hMapping;//<---这里出错if (idh->e_magic = IMAGE_DOS_SIGNATURE){
    inh = (IMAGE_NT_HEADERS*)(idh + idh->e_lfanew);//<---这里出错
    if (inh->Signature = IMAGE_NT_SIGNATURE)
    iIsValid = 1; 
    else
    iIsValid = 0;
    }
    UnmapViewOfFile(hMapping);
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  3.   

    IMAGE_DOS_HEADER *idh;
    IMAGE_NT_HEADERS *inh;
    上面这两种类型到底是什么?对应到32位,才可以转
      

  4.   

    IMAGE_DOS_HEADER *idh;
    IMAGE_NT_HEADERS *inh;
    上面上两个结构,在winnt.h中有定义