阅读:2175回复:16
问Win2000内核驱动高手们:可否硬性指定中断服务程序的IRQL值?
我在驱动程序中使用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] |
|
沙发#
发布于:2005-05-15 22:37
希望能人早点看到此贴。
|
|
板凳#
发布于:2005-05-16 21:18
hook 中断处理程序 Hook中断处理程序?如何Hook?另外,Windows中8259的硬中断优先编码失效了?不会吧?我试过通过直接控制8259使其不产生任何中断,键盘鼠标就全部没有了反应,Win2000就变得又聋又瞎了。 [编辑 - 5/16/05 by zhenlongyang] |
|
地板#
发布于:2005-05-17 19:06
楼上有几位没有理解我的意思,我指的不是在中断服务程序中提高CPU的当前IRQL级别,那是很容易的,而是如何能令自己的中断服务程序中断别的中断服务程序,比如,为系统时钟中断(IRQ0,IRQL=5)编的中断服务程序如何能中断正在执行的硬盘控制器中断(IRQ14,IRQL=6)服务程序;至于人为更改IRQL会不会有问题,我认为应该不会,Windows是如何确定某个IRQ所对应的IRQL的呢?包括一些未被系统占用而留给用户硬件使用的IRQ,它们的IRQL值也不尽相同呀!另外,在Windows2000下,我曾经试过在我的时钟中断服务程序中加一个延时,然后先关闭我的驱动程序,运行Windows的文件复制功能复制一个很大的文件(个人认为硬盘控制器中断服务程序应该被执行),在文件拷贝期间启动我的时钟中断服务程序,一旦我的时钟中断执行便会中断硬盘控制器中断,这时文件拷贝立即停止,当时钟中断退出后文件拷贝便会继续,并未发现有何异常,但这也不能说明时钟中断的优先级比硬盘控制器中断的优先级高(事实上应该是低,否则不就与Windows声称的IRQL级别关系矛盾了么。),因为时钟中断可能是在某个硬盘控制器中断执行完毕时执行的,但可以断定在时钟中断正在执行时硬盘控制器中断是不会执行的。
|
|
地下室#
发布于: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] |
|