driver - 为什么内核模式驱动程序不能分配和使用内存而不导致潜在的不稳定?
问题描述
我正在学习编写内核模式代码。我一直看到这种系统稳定性的概念在这种操作模式下很脆弱。我正在寻找一个低层次的解释为什么会这样。
我了解在内核模式代码中运行的代码肯定会导致问题的一些方式:
- 内核模式代码可以写入任何内存地址,其中可能包括破坏用户模式进程使用的内存
- 甚至修改内核依赖的内存来执行关键任务。
- 可以直接与硬件通信(这只是内存访问的另一个特性)
但是这些似乎可以通过简单地分配一个安全的内存空间来工作来避免,并且通常不会覆盖分配给另一个进程的任何内存,除非该进程专门设计用于共享该内存。
我将引用我刚刚在 Windows 文档中阅读的内容:
重要驱动程序不应该“在侧面”分配内存并将其用作内核模式堆栈。这从来都不是任何平台的推荐做法,因为它会影响操作系统的稳定性和可靠性。在基于 x64 的系统上,如果操作系统检测到未经授权的内核模式堆栈,它将生成错误检查并关闭系统。-使用内核模式堆栈的指南
为什么会这样?
驱动程序不能简单地分配一些系统其余部分知道不使用的未使用内存吗?
解决方案
在内核(堆上)分配内存是常见的做法,有很多函数可以做到这一点。
如果您需要使用大数据,建议您在正确的池中分配内存,而不是在堆栈上使用变量。
推荐阅读
- ansible - 如何将多行字符串复制到带有文字换行符的文件中?
- visual-studio-code - 从配置文件中读取扩展配置
- sql-server - SQL Server 在 db TABLES FROM 上触发 UPDATE(SELECT FROM a Linked Server (ODBC)
- python - 只有字典的最新值被添加到列表中
- angular - ViewEncapsulation.None 在 Angular 中产生冲突
- javascript - 需要帮助检索多个播放列表中的项目
- sql - 如何处理多个重叠的数据集?
- c# - 如何忽略使用反射继承的类的所有隐藏属性?
- javascript - location.reload(); 在远程服务器上延迟(本地立即工作)
- python - Python读取播放声音数据