zhenlongyang
驱动小牛
驱动小牛
  • 注册日期2004-10-28
  • 最后登录2010-07-26
  • 粉丝1
  • 关注0
  • 积分729分
  • 威望100点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
阅读:2175回复:16

问Win2000内核驱动高手们:可否硬性指定中断服务程序的IRQL值?

楼主#
更多 发布于:2005-05-15 02:30
我在驱动程序中使用HalGetInterruptVector()函数测试了从IRQ0到IRQ23的IRQL值,如下:
IRQ 0: IRQL is 5 (ISA)System timer
IRQ 1: IRQL is 10 (ISA)KeyBoard
IRQ 2: IRQL is 5 (ISA)No Used
IRQ 3: IRQL is 4 (ISA)No Used
IRQ 4: IRQL is 9 (ISA)COM1
IRQ 5: IRQL is 10 (ISA)No Used
IRQ 6: IRQL is 5 (ISA)Floppy disk controller
IRQ 7: IRQL is 8 (ISA)No Used
IRQ 8: IRQL is 9 (ISA)CMOS/real time clock
IRQ 9: IRQL is 10 (ISA)Microsoft ACPI-Compliant System
IRQ 10: IRQL is 6 (ISA)No Used
(PCI)Intel(R) 82801EB SMBus Controller - 24D3
IRQ 11: IRQL is 7 (ISA)No Used
IRQ 12: IRQL is 4 (ISA)PS/2 Compatible Mouse
IRQ 13: IRQL is 7 (ISA)Numeric data processor
IRQ 14: IRQL is 6 (ISA)Primary IDE Channel
IRQ 15: IRQL is 8 (ISA)Secondary IDE Channel
IRQ 16: IRQL is 8 (PCI)Intel(R) 82801EB USB Universal Host Controller
(PCI)Intel(R) 82801EB USB Universal Host Controller
IRQ 17: IRQL is 8 (PCI)Realtek AC\'97 Audio
IRQ 18: IRQL is 8 (PCI)Intel(R) 82801EB USB Universal Host Controller
IRQ 19: IRQL is 8 (PCI)Intel(R) 82801EB USB Universal Host Controller
IRQ 20: IRQL is 8 (PCI)No Used
IRQ 21: IRQL is 8 (PCI)No Used
IRQ 22: IRQL is 8 (PCI)No Used
IRQ 23: IRQL is 8 (PCI)Standard Enhanced PCI to USB Host Controller

其中各IRQ所对应的硬件是在Win2000的“系统”->“硬件”->“设备管理器”中查看的,从上面的测试可以看出:IRQ值与IRQL值并不一致,按理说IRQ0是所有ISA总线中中断级别最高的,但其对应的IRQL确只有5,比硬盘控制器的IRQL低,这样是否意味着当硬盘控制器中断正在执行时,系统时钟中断就必须等待?按我估计,当系统时钟中断正在执行时,尽管硬盘控制器的IRQL比较高,但是,由于其硬件IRQ的优先级比较低,因此8259将不会把其中断信号送到CPU中去,因此其应该不会打扰系统时钟中断的执行,但是反过来我就不知道会怎样了;还请高手们指点一二。
另外,IRQ所对应的IRQL值是Win2000内核分配的,能否人为改动呢?(我指的不是在中断服务程序中用Ke...()函数提高CPU的当前IRQL值),如果能的话就可以较容易的实现实时控制了,高手们多多指教。


[编辑 -  5/15/05 by  zhenlongyang]
zhenlongyang
驱动小牛
驱动小牛
  • 注册日期2004-10-28
  • 最后登录2010-07-26
  • 粉丝1
  • 关注0
  • 积分729分
  • 威望100点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-15 22:37
希望能人早点看到此贴。
zhenlongyang
驱动小牛
驱动小牛
  • 注册日期2004-10-28
  • 最后登录2010-07-26
  • 粉丝1
  • 关注0
  • 积分729分
  • 威望100点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-16 21:18
hook 中断处理程序
你爱在哪个irql上执行 就可以在哪个irql上执行

windows中那个8259的硬中断优先编码 已失效了吧?
应该是每个中断都会到cpu 只是处理与不处理的问题

乱说一气  你打我吧

Hook中断处理程序?如何Hook?另外,Windows中8259的硬中断优先编码失效了?不会吧?我试过通过直接控制8259使其不产生任何中断,键盘鼠标就全部没有了反应,Win2000就变得又聋又瞎了。

[编辑 -  5/16/05 by  zhenlongyang]
zhenlongyang
驱动小牛
驱动小牛
  • 注册日期2004-10-28
  • 最后登录2010-07-26
  • 粉丝1
  • 关注0
  • 积分729分
  • 威望100点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-17 19:06
楼上有几位没有理解我的意思,我指的不是在中断服务程序中提高CPU的当前IRQL级别,那是很容易的,而是如何能令自己的中断服务程序中断别的中断服务程序,比如,为系统时钟中断(IRQ0,IRQL=5)编的中断服务程序如何能中断正在执行的硬盘控制器中断(IRQ14,IRQL=6)服务程序;至于人为更改IRQL会不会有问题,我认为应该不会,Windows是如何确定某个IRQ所对应的IRQL的呢?包括一些未被系统占用而留给用户硬件使用的IRQ,它们的IRQL值也不尽相同呀!另外,在Windows2000下,我曾经试过在我的时钟中断服务程序中加一个延时,然后先关闭我的驱动程序,运行Windows的文件复制功能复制一个很大的文件(个人认为硬盘控制器中断服务程序应该被执行),在文件拷贝期间启动我的时钟中断服务程序,一旦我的时钟中断执行便会中断硬盘控制器中断,这时文件拷贝立即停止,当时钟中断退出后文件拷贝便会继续,并未发现有何异常,但这也不能说明时钟中断的优先级比硬盘控制器中断的优先级高(事实上应该是低,否则不就与Windows声称的IRQL级别关系矛盾了么。),因为时钟中断可能是在某个硬盘控制器中断执行完毕时执行的,但可以断定在时钟中断正在执行时硬盘控制器中断是不会执行的。
zhenlongyang
驱动小牛
驱动小牛
  • 注册日期2004-10-28
  • 最后登录2010-07-26
  • 粉丝1
  • 关注0
  • 积分729分
  • 威望100点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-17 19:09
[quote
[编辑 -  5/16/05 by  zhenlongyang] [/quote]
现在PC不再用8259,改用APIC了,但还是兼容8259的控制命令的,新的APIC,高级可编程中断控制器,提供任何硬件中断到系统中断的映射.但是这方面资料我几乎没有,故不敢多言
至于hook中断处理,我的垃圾原创中演示了hook全部中断,也许在中断处理中可以调用KeRaiseIrql,人为改变吧,但我估计认为改变后,Windows 2k肯定会乱的,经常要panic [/quote]
bmyyyud先生的说法或许可行,我会尽量试试看。

[编辑 -  5/17/05 by  zhenlongyang]
游客

返回顶部