今天在网上看到这个问题, 自己也不明白, 在此请教, 希望高手给个详细一点的解释, 谢谢了, 问题如下: 想请教一个问题,看到这样一段描述。
系统服务函数NtReadFile创建IRP_MJ_WRITE类型的IRP,然后它将这个IRP发送到某个驱动程序的派遣函数中。NtReadFile然 后去等待一个事件,这时当前线程进入“睡眠”状态,也可以说当前线程被阻塞住或者线程处于“Pending”状态。这里说当线程进入睡眠状态,那么线程就可能发生了切换吧,那其派遣函数又在哪个线程环境中执行的?似乎根据不同的IRP类型其派遣函数被调用的方式都不同?
系统服务函数NtReadFile创建IRP_MJ_WRITE类型的IRP,然后它将这个IRP发送到某个驱动程序的派遣函数中。NtReadFile然 后去等待一个事件,这时当前线程进入“睡眠”状态,也可以说当前线程被阻塞住或者线程处于“Pending”状态。这里说当线程进入睡眠状态,那么线程就可能发生了切换吧,那其派遣函数又在哪个线程环境中执行的?似乎根据不同的IRP类型其派遣函数被调用的方式都不同?
你应该参考:Execution Context in NT Drivers (by osr)