请问IRP是从应用程序发起的,还是操作系统由于硬件状态改变(如有数据进入)而产生的,并传给驱动程序?
还有一问:IRP是如何分发的?比如我的板卡发出一个中断信号(eg: IRQ5),驱动程序应怎样编写来响应它?并且通知应用程序来取数据?
Windows系统的函数CreateFile, ReadFile,WriteFile,DeviceIoControl等都可以产生对应的IRP.
硬件可以通过产生中断来调用驱动程序的中断服务例程.
对于第二个问题,问答起来比较复杂.
在操作系统中有一个IDT(中断分发表),CPU根据硬件的中断号,在IDT表中找到中断分发例程的指针,从而调用驱动程序.