ltxdxu
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-02-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1191回复:2

求助2000下两个WDM驱动程序之间通信的问题3

楼主#
更多 发布于:2004-11-14 15:35
我的一个系统需要两个驱动程序,而这两个驱动程序之间需有功能上的互相调用,如果其中的任一个驱动没有加载,则已加载的那个驱动程序也要应该能够加载成功,只是因为没有另一个驱动的支持,功能上有所降级而已,我曾经试过让两个驱动分别导出函数以供另一个驱动调用,但这样做的话有些限制,因为好象驱动A如果依赖于另一个驱动B的话,则加载驱动A时要求驱动B必须已经被WINDOWS加载(而不是类似于DLL的会自动加载),因此肯定是只能有一个驱动导出函数给另一个用,然后导出的函数中有一个函数以便让另一个驱动设置自己的函数指针给有导出函数的那个驱动回调用,我这样做也成功了,但总觉得很累,而且驱动之间加载顺序方面的问题也很烦.想问一下在内核中有没有类似WIN32中LoadLibrary(还不完全像LoadLibrary,而应该只是得到已加载映象模块的句柄)和GetProcAddresss之类的函数来达到动态加载的效果,使两个驱动之间没有模块上的直接依赖关系.

我知道IoCallDriver可以在驱动间通信,但好象也比较麻烦

请有清楚这个的兄弟给点建设性的建议

谢谢!
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-14 22:04
愚见:

可以写三个驱动程序:A、B和C。

C作为中间导出驱动,导出四个函数:两个设置函数,两个取地址函数。两个设置函数分别供驱动A、B加载成功后调用,用来设置提供给对方调用的函数的指针。函数指针存储在C中。两个取地址函数分别供A、B调用,用以获取对方提供给己方调用的函数的指针。

这样,A、B都依赖于C,而彼此之间不存在依赖关系。

[编辑 -  11/14/04 by  tigerL]
省元坊
ltxdxu
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-02-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-15 14:11
有点意思,谢谢
不过我最想要的是如GetModuleHandle与GetProcAddress这样的调用
游客

返回顶部