dysxq
驱动牛犊
驱动牛犊
  • 注册日期2002-07-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1737回复:2

如果驱动编译是不静态链接到NTDLL.DLL,有没有办法调用ntdll里的函数

楼主#
更多 发布于:2007-11-15 09:28
如果静态链到ntdll.dll,启动时加载驱动就会失败,有没有办法解决?
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-16 17:55
楼主,我是叫你调用LdrLoadDll(),但是并没有叫你静态连接这个函数。我回贴已经说了很明白了,是插入APC调用,也就是说是APC代码调用LdrLoadDll(),NTDLL.DLL在User Mode空间,APC代码怎么能调用呢?能,如果这个APC代码也运行在User Mode进程空间的话。另外,NTDLL.DLL在所有进程的加载地址都是一样的。所以你完全可以自己分析NTDLL.DLL来查询LdrLoadDll()的地址,再把这个地址以参数的形式传入你的APC代码里边,在APC代码里边调用就可以了。

APC_Code(CombineStruct cs) //这个结构带很多参数,LdrLoadDll()只是其中一个
{
     cs->pfnLdrLoadDll(........);
}

至于怎么让APC代码运行在User Mode进程空间,网上有很多代码,google就可以了。
dysxq
驱动牛犊
驱动牛犊
  • 注册日期2002-07-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-16 21:46
恩,已经搞定了,谢谢slwqw
游客

返回顶部