回 帖 发 新 帖 刷新版面

主题:替换系统文件造成无法启动

替换的目标是iphlpapi.dll,里面是IP Helper的API。

我建立了一个工程,先把iphlpapi.dll重命名为iphlpori.dll,然后用dev-C++写一个dll,里面loadLibrary调用iphlpori.dll的api函数并且返回,基本代码格式如下:

DLLIMPORT DWORD GetNumberOfInterfaces(PDWORD pdwNumIf)  
{  
    DWORD result;  
    HMODULE hDLL = LoadLibrary("IpHlpOri.dll");  
    if(hDLL)  
    {  
        lpGetNumberOfInterfaces fp = (lpGetNumberOfInterfaces)GetProcAddress(hDLL, "GetNumberOfInterfaces");  
        result = (*fp)(pdwNumIf);  
        FreeLibrary(hDLL);  
        return result;  
    }  
    return 1;  
}  

代码里错误检测几乎没有,不过简单测试了一下,其他程序通过产生的新dll可以得到正常的结果

dll头文件代码头部如下:

   1. #ifndef _DLL_H_  
   2. #define _DLL_H_  
   3. #if BUILDING_DLL  
   4. #   define DLLIMPORT __declspec (dllexport)  
   5. #else /* Not BUILDING_DLL */  
   6. #   define DLLIMPORT __declspec (dllimport)  
   7. #endif /* Not BUILDING_DLL */  
   8. #include <windows.h>  
   9. #include "iptypes.h"  
  10. #include "ipexport.h"  
  11. #include "iprtrmib.h"  
  12. extern "C" DLLIMPORT DWORD GetNumberOfInterfaces(PDWORD pdwNumIf);  
  13. //....  

在控制台里测试调用函数,结果正常。但是把原dll更名为iphlpori.dll,把产生的文件更名为iphlpapi.dll,放到system32下,系统就无法启动了。

请问问题出在什么地方呢?

另外一个相关的问题是SDK中的原版iphlpapi.h中有关键字。如WINAPI IN OUT OPTIONAL等等。这些关键字在哪里定义呢?是否有相关文档?我的dll代码里直接删除这些关键字是否可行?

回复列表 (共2个回复)

沙发

您确保每个原有函数都写了么?有257个函数喔。
另:LoadLibrary最好写在DllMain里。

板凳

寻找一直寻找机会的人!
一个趋势中的趋势的项目!
一个直销和传销终结者的项目!
一个帮助普通创业者成功的项目!
   我们在互联网上正在拓展一个生意项目,现在正在寻求合作伙伴。我们认为成功的关键是你是什么人?还有你和谁在一起。我们在乎的是--您是否是有激情、有梦想的人。有意者请跟我们联系,我们和您谈谈,给您讲解一些生意概念,或许我们可以合作。一个集即时网游、交友,娱乐游戏,网络品牌代理商城,互联网平台项目招商进行中……详情QQ空间资料
网商咨询 摩客天宇QQ 909065437 

我来回复

您尚未登录,请登录后再回复。点此登录或注册