本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
楼主: zyq8709

KfLowerIrql调用过程与平时的认识出入不小,请各位大牛解释一下!!! [复制链接]

Rank: 1

发表于 2011-6-25 18:06:51 |显示全部楼层
[quote=\"irp\"]wait函数的irql主要要考虑的是<是否能够顺利完成scheduler的工作>, 我个人的理解,
如果timeout值有效,scheduler会 用timer来定时,timer 是以dpc形式完成的,这隐含了
irql啊。[/quote]
关于这点我没什么把握,这是个设计问题。遵循规则就行了。

Rank: 1

发表于 2011-6-25 18:35:28 |显示全部楼层
WDK:
Callers of KeWaitForSingleObject must be running at IRQL <= DISPATCH_LEVEL. However, if Timeout <> 0, the caller must be running at IRQL  <= APC_LEVEL and in a nonarbitrary thread context.

从WDK的解释来看,我想象不出为什么不能在dispatch及以上等,唯一可能的原因是如果
timeout !=0 部分内存会被交换出去,当thread被切换回来恢复到high irql后,继续执行可能
引起page fault.

Rank: 1

发表于 2011-6-25 18:36:29 |显示全部楼层
所以文档强调irql <= apc_level and non-arbitrary context, 这是page fault可以被resolve的级别。

Rank: 1

发表于 2011-6-25 18:41:49 |显示全部楼层
http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/Locks.doc

这篇文档8.1.1 irql restriction 也谈了这个问题,但是也没解释清楚为什么。

Rank: 1

发表于 2011-6-25 20:03:15 |显示全部楼层
多谢irp大哥,您的讲解使我对这些规定有了新的认识,这些规定有些并不是系统强制要求的,而是保证系统的正常运行的推荐值,违反了这些规定有时并不会立刻出现问题,而是会对系统的正常运行埋下隐患,有可能使系统在以后的运行中不能正常的执行某些操作而出现冲突出错,我这样的理解可以吗?
希望今后还能向您多多学习,多谢您的无私解答!

Rank: 1

发表于 2011-6-25 20:12:12 |显示全部楼层
是.  这个问题如果表述为不能在dpc (dispatch level) 里等,比较容易解释, swapcontex会检查dpcroutineactive? , 如果是,会bugcheck.

Rank: 1

发表于 2011-6-25 20:21:54 |显示全部楼层
您说的是在KiSwapContext中会检测是否有活动的dpc级例程以来保证不允许irql违例?

Rank: 1

发表于 2011-6-25 20:33:43 |显示全部楼层
SwapContext

Rank: 1

发表于 2011-6-25 20:38:59 |显示全部楼层
我看了一下源码,发现SwapContext的检查是
Check if an attempt is being made to context switch while in a DPC routine.
;

        cmp     byte ptr [ebx]+PcPrcbData+PbDpcRoutineActive, 0 ; check if DPC active
        jne     sc91                    ; bugcheck if DPC active.
那么它检查的只是DPC例程,而非所有的Dispatch_level的过程呀?

Rank: 1

发表于 2011-6-25 20:42:41 |显示全部楼层
所以说如果说是把dispatch level换成dpc,更容易理解。

Rank: 1

发表于 2011-6-25 20:45:44 |显示全部楼层
哦,明白了,多谢您的解答!希望您今后还能多帮助帮助小弟,不胜感激!
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-7-21 13:21 , Processed in 0.029997 second(s), 6 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部