阅读:1471回复:10
系统怎么知道 什么时候 调用哪个注册过的函数
系统怎么知道 什么时候 调用哪个注册过的函数
系统要实现例如读数据 怎么知道 调用那一个呢 |
|
沙发#
发布于:2002-05-28 10:11
这个问题也太那个了吧
一看就知道没有好好看书 |
|
|
板凳#
发布于:2002-05-28 10:21
看了 只是没有明白 能不能 讲解一点
|
|
地板#
发布于:2002-05-28 10:36
比如你要读,应用程序就调用readfile
然后系统会创建irp然后调用你自己写的xxxread例程了 这个例程是这样注册的: DriverObject->MajorFunction[ IRP_MJ_READ ] = xxxReadFile; |
|
|
地下室#
发布于:2002-05-28 10:45
我还是没有完全理解
是不是 我的这个读功能的名称一定要是一个规范的名称呢 要不然 系统 怎么知道 要实现读 就找xxxread 而不是别的函数呢 要么在初始化的时候 就把每个函数功能在系统中注册 但是我并没有看到初始化的时候做这件事情呀 谢谢 |
|
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 |
|
|
6楼#
发布于:2002-05-28 11:13
谢谢 由于本人刚刚涉及到驱动 而且在linux下 会有很多很低级的问题 而且刚刚加入 分也很少 谢谢各位。
能留个qq号码吗 我的是 23654875 白天都在 |
|
7楼#
发布于:2002-05-28 12:37
再说的深一些的话,函数名只是在编译的时候才用到。等编译成机器码之后,函数调用就只是一个内存Address了,你看汇编码一般是CALL 0xXXXXXXXXX之类。这也是GetProcAddress能工作的原因了。
|
|
|
8楼#
发布于:2002-05-28 13:28
斑竹 能不能 帮我看看 我的另一个问题
那里有 linux 内核函数 的详细资料功能介绍 |
|
9楼#
发布于:2002-05-28 13:30
斑竹 能不能 帮我看看 我的另一个问题 没研究过Linux,Sorry。 |
|
|
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 }; |
|