freejack
驱动牛犊
驱动牛犊
  • 注册日期2003-04-12
  • 最后登录2005-03-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1903回复:7

x386体系中,ring 0代码怎样调用ring 3回调函数?

楼主#
更多 发布于:2003-04-25 12:21
我看过许多操作系统的API以及系统服务都存在这样的情况,就是在使用该API或服务之前都需要使用者提供一个回调函数的指针,但该回调函数一般是ring 3代码,系统怎样调用它呢?Intel规定无论是直接调用或通过门调用都不允许降级访问呀?
zfw
zfw
驱动小牛
驱动小牛
  • 注册日期2001-12-16
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-25 21:25
好像是用DPC,用户线程先入DPC队列,当系统的IRQL降到该级线程的级别时再调用。
zfw
freejack
驱动牛犊
驱动牛犊
  • 注册日期2003-04-12
  • 最后登录2005-03-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-26 11:54
好象明白了,又好象什么也没明白,不过我根据您的叙述已经假设了一个软件架构可以完成此类工作。给分没商量。
zfw
zfw
驱动小牛
驱动小牛
  • 注册日期2001-12-16
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-26 19:24
谢谢给分!
打个比方吧,当中断发生时,系统升高IRQL到DIRQL级别,如果此ISR例程要调用PASSIVE_LEVEL级别的例程,则此被调用例程入DPC队列,中断返回后,系统的IRQL降到PASSIVE_LIVEL后,此线程被调用。此也为延迟过程调用DPC的由来。
zfw
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-04-26 20:25
谢谢给分!
打个比方吧,当中断发生时,系统升高IRQL到DIRQL级别,如果此ISR例程要调用PASSIVE_LEVEL级别的例程,则此被调用例程入DPC队列,中断返回后,系统的IRQL降到PASSIVE_LIVEL后,此线程被调用。此也为延迟过程调用DPC的由来。

DPC在dispatch level。。。怎么会降到passive去?
wwwwwww
驱动牛犊
驱动牛犊
  • 注册日期2003-01-09
  • 最后登录2003-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-30 22:27
  俺好象不太明白你的意思,当我们给一个回调函数时,系统怕不会在Ring0等级调用这个回调函数,是从Ring0返回到Ring3时才执行这个回调函数(假如这个回调函数是我们自己编的),这是俺的意见不知道对否,请大虾指点错误?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-04-30 23:15
你的分恐怕给的有点冤 :D
你所说的callback函数,和DPC有什么关系呢?
API确实有可能在ring0和ring3间切换,但是你没有必要考虑这些,就当他是一直在ring3,当然可以call你的回调函数。
zhang79
驱动牛犊
驱动牛犊
  • 注册日期2001-08-17
  • 最后登录2013-12-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-01 19:01
我想回调函数应该由系统从Ring0返回到Ring3时再调用。
DPC例程是在Ring0中运行的,IRQL与Ring0或者Ring3没关系。
游客

返回顶部