为什么内核模式驱动程序不能分配和使用内存而不引起潜在的不稳定?



我正在学习如何编写内核模式代码。我一直认为,在这种运作模式下,系统稳定性是脆弱的。我在寻找一个低层次的解释为什么会这样。

我知道在内核模式下运行的代码肯定会导致一些问题:

  • 内核模式代码可以写入任何内存地址,这可能包括损坏用户模式进程使用的内存
  • 甚至修改内核执行关键任务所依赖的内存。
  • 可以直接与硬件通信(这只是内存访问的另一个特性)

但是这些事情似乎可以通过简单地分配一个安全的内存空间来避免,并且通常不写任何分配给另一个进程的内存,除非该进程专门设计为共享该内存。

我将引用我刚刚在Windows文档中读到的内容:

重要的

驱动程序不应该"在旁边"分配内存。并将其用作内核模式堆栈。这从来没有被推荐过练习任何平台,因为它影响稳定性和操作系统的可靠性。在基于x64的系统上,如果操作系统检测到未经授权的内核模式堆栈,它将生成错误检查并关闭系统。-使用内核模式堆栈的指南

为什么会这样?

驱动程序不能简单地分配一些未使用的内存,系统的其余部分将知道不使用?

在内核(堆上)分配内存是常见的做法,有很多函数可以做到这一点。

如果需要使用大容量的数据,建议在正确的池中分配内存,而不是在堆栈上使用变量。

相关内容

  • 没有找到相关文章

最新更新