阅读:1905回复:7
x386体系中,ring 0代码怎样调用ring 3回调函数?
我看过许多操作系统的API以及系统服务都存在这样的情况,就是在使用该API或服务之前都需要使用者提供一个回调函数的指针,但该回调函数一般是ring 3代码,系统怎样调用它呢?Intel规定无论是直接调用或通过门调用都不允许降级访问呀?
|
|
沙发#
发布于:2003-05-01 19:01
我想回调函数应该由系统从Ring0返回到Ring3时再调用。
DPC例程是在Ring0中运行的,IRQL与Ring0或者Ring3没关系。 |
|
板凳#
发布于:2003-04-30 23:15
你的分恐怕给的有点冤 :D
你所说的callback函数,和DPC有什么关系呢? API确实有可能在ring0和ring3间切换,但是你没有必要考虑这些,就当他是一直在ring3,当然可以call你的回调函数。 |
|
地板#
发布于:2003-04-30 22:27
俺好象不太明白你的意思,当我们给一个回调函数时,系统怕不会在Ring0等级调用这个回调函数,是从Ring0返回到Ring3时才执行这个回调函数(假如这个回调函数是我们自己编的),这是俺的意见不知道对否,请大虾指点错误?
|
|
地下室#
发布于:2003-04-26 20:25
谢谢给分! DPC在dispatch level。。。怎么会降到passive去? |
|
5楼#
发布于:2003-04-26 19:24
谢谢给分!
打个比方吧,当中断发生时,系统升高IRQL到DIRQL级别,如果此ISR例程要调用PASSIVE_LEVEL级别的例程,则此被调用例程入DPC队列,中断返回后,系统的IRQL降到PASSIVE_LIVEL后,此线程被调用。此也为延迟过程调用DPC的由来。 |
|
|
6楼#
发布于:2003-04-26 11:54
好象明白了,又好象什么也没明白,不过我根据您的叙述已经假设了一个软件架构可以完成此类工作。给分没商量。
|
|
7楼#
发布于:2003-04-25 21:25
好像是用DPC,用户线程先入DPC队列,当系统的IRQL降到该级线程的级别时再调用。
|
|
|