shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
阅读:2233回复:2

[经验分享]如何在驱动程序中导出函数

楼主#
更多 发布于:2009-07-14 19:17
1. 引言
   了解文件过滤驱动minifilter的人都知道,所有的minifilter都是通过调用过滤管理器中导出的函数,以及向过滤管理器注册回调函数的形式,来实现对文件操作的过滤。而过滤管理器实际上就是由fltmgr.sys实现的,那么我们自己能不能写一个像fltmgr.sys这样的驱动,在向其他驱动程序提供服务的同时,保证自身的独立性呢? 答案是肯定的,下面我们以一个例子来介绍如何完成这样一个驱动(范例见附件)。

2. 准备工作
     首先创建8个文件,分别为makefile,source,driver.h,driver.c,export.h,export.c,driver.def, common.h。其中makefile和source用于对驱动进行编译,其中包含了编译选项;driver.h和driver.c是驱动程序的主体,包含driverentry函数以及派遣函数;export.h和export.c分别声明和定义了该驱动程序要导出的函数;driver.def向外部声明要导出的函数;common.h包含一些宏定义。
     在source文件中,将TARGETTYPE属性定义为EXPORT_DRIVER(即TARGETTYPE=EXPORT_DRIVER),并添加宏定义DLLDEF=.\Driver.def指向driver.def文件。
     在driver.def文件中声明将要导出的函数名称,具体格式见driver.def文件内容。
     在export.h中为每个要导出的函数添加extern声明。

3. 生成驱动文件
    上述工作完成后,用ddk对该驱动进行编译,在obj目录下得到driver.lib和driver.sys文件。

4. 如何调用导出函数
    双击obj目录下的.reg文件加载driver.sys后(对于该驱动,需要重启计算机才能加载),其他驱动即可调用driver.sys导出的函数了。首先包含export.h头文件,而后包含driver.lib库,即可调用export.h中声明的导出函数。

 Driver.zip
    
作一名真实,诚实,优秀的科技工作者!
zyh1898
驱动牛犊
驱动牛犊
  • 注册日期2007-04-04
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望34点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-07-30 17:08
这好在学习这方面的知识,下下来研究研究
yjukh
驱动牛犊
驱动牛犊
  • 注册日期2007-04-27
  • 最后登录2011-07-08
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望158点
  • 贡献值1点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-07-30 19:44
好东西,谢谢分享!
游客

返回顶部