luanjiajia
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1471回复:10

系统怎么知道 什么时候 调用哪个注册过的函数

楼主#
更多 发布于:2002-05-28 10:04
系统怎么知道 什么时候 调用哪个注册过的函数  
系统要实现例如读数据 怎么知道 调用那一个呢
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-28 10:11
这个问题也太那个了吧
一看就知道没有好好看书
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
luanjiajia
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-28 10:21
看了 只是没有明白 能不能 讲解一点
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-28 10:36
比如你要读,应用程序就调用readfile
然后系统会创建irp然后调用你自己写的xxxread例程了

这个例程是这样注册的:

DriverObject->MajorFunction[ IRP_MJ_READ ]  = xxxReadFile;
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
luanjiajia
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-28 10:45
我还是没有完全理解

是不是 我的这个读功能的名称一定要是一个规范的名称呢
要不然 系统 怎么知道 要实现读 就找xxxread 而不是别的函数呢

要么在初始化的时候 就把每个函数功能在系统中注册 但是我并没有看到初始化的时候做这件事情呀

谢谢
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-28 11:08
DriverObject->MajorFunction[ IRP_MJ_READ ] = xxxReadFile;
这句语句的意思就是告述系统,当IRP_MJ_READ到达时调用xxxReadFile;
没有什么规范,你大可以如此
DriverObject->MajorFunction[ IRP_MJ_READ ] = ILoveYou;
那么系统当IRP_MJ_READ到达时就会调用ILoveYou函数;

 :D :D :D
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
luanjiajia
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-28 11:13
谢谢 由于本人刚刚涉及到驱动 而且在linux下 会有很多很低级的问题 而且刚刚加入 分也很少 谢谢各位。
能留个qq号码吗 我的是 23654875 白天都在
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-28 12:37
再说的深一些的话,函数名只是在编译的时候才用到。等编译成机器码之后,函数调用就只是一个内存Address了,你看汇编码一般是CALL 0xXXXXXXXXX之类。这也是GetProcAddress能工作的原因了。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
luanjiajia
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-28 13:28
斑竹 能不能 帮我看看 我的另一个问题
那里有 linux 内核函数 的详细资料功能介绍
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-28 13:30
斑竹 能不能 帮我看看 我的另一个问题
那里有 linux 内核函数 的详细资料功能介绍


没研究过Linux,Sorry。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-28 13:35
你应该去Linux版提问。
多看看书,在init_module()函数中,你注册一个字符设备时,可以定义register_chrdev(...,xxx_fop),你再定义这个结构
static struct file_operations xxx_fops={ NULL,xxx_read, xxx_write,   NULL,   NULL,   xxx_ioctl,   NULL, xxx_open,  xxx_release, NULL };
游客

返回顶部