了解I / O,IRP,DPC,IRQL的流程

时间:2020-08-08 10:51:01

标签: c++ window wdm irp

我正在阅读有关I / O,IRP,DPC,IRQL的信息,我对ReadFile Flow的流程感到困惑

  1. 用户模式,程序尝试读取“ file.txt”,“ ntdll!NtReadFile”,系统调用。
  2. 内核模式“ ntokrnl!NtReadFile”(该函数将构建IRP并将其传递给多个相关的驱动程序,以获取文件的内容)。

代码可在此处找到:

let arr = [{
id: "95",
datum: "2020-03-11",
trade: "EUR/USD BUY",
aktion: "closed",
pips: "10"
},
{
id: "94",
datum: "2020-07-20",
trade: "GBP/USD BUY",
aktion: "TP Hit",
pips: "65"
},
{
id: "93",
datum: "2020-06-18",
trade: "NZD/USD SELL",
aktion: "SL Hit",
pips: "-57"
},
{
id: "92",
datum: "2020-07-15",
trade: "GBP/USD BUY",
aktion: "TP Hit",
pips: "65"
},];

const today = new Date ();
result = arr.filter(obj => {
    const date = new Date(obj.datum);
    const diffTime = Math.abs(today - date);
    const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); 
    return (diffDays <=30);
});

result.sort((a,b) => {
    a = new Date(a.datum);
  b= new Date(b.datum);
  return (a<b) ? -1 : (a>b) ? 1 : 0; 
})
console.log(result);
  1. 直到在磁盘上找到该文件为止,该线程将执行其他任务。
  2. 一旦磁盘找到了文件的内容,就产生了中断,IRQL上升到“ DIRQL 3〜26”(我想)
  3. 线程离开他当前的工作供以后使用,通过获取ISR开始在中断上工作,然后访问设备硬件以获取结果(文件的内容)
  4. 线程仍在更高的IRQL> DISPATCH_LEVEL [2]中运行,并创建DPC以执行IofCompleteRequest(因为IoCompleteRequest可以在IRQL <= DISPATCH_LEVEL中执行)
  5. 谁负责降级IRQL?
  6. 减去IRQL之后,线程返回执行他的下一个任务。

我对整个流程不熟悉,因此很高兴得到您的帮助。 如果我有任何错误,请随时纠正我,并为流程添加新步骤并描述更多详细信息:)

谢谢!

0 个答案:

没有答案
相关问题