Ring 0 和 Ring 3 driver 有什么区别?
What is the difference between Ring 0 and Ring 3 driver?
我正在尝试学习 windows 驱动程序的基础知识。
为什么我不能在典型的 c++ 应用程序中使用 header ntddk.h 中的函数?
编辑:内核 是操作系统的核心组件,它管理运行ning 进程、内存分配等。您可以将其视为具有特殊特权的进程 - 尽管它不是进程,因为它管理进程。
Kernel-mode 驱动程序 或 ring-0 驱动程序 被加载到内核中。他们的代码与任何其他内核代码一样被对待。内核对系统具有完全控制权——这意味着如果出现问题,它可能会搞砸整个系统并需要重新启动。 (这就是蓝屏死机。)
User-mode drivers 或 ring-3 drivers, 运行 在正常进程中。像任何其他进程一样,它们不能在不询问内核的情况下访问系统的其余部分,并且它们有自己的地址空间。与任何其他程序一样,如果 user-mode 驱动程序崩溃,它只会影响该进程 - 特别是,它不太可能导致 BSOD。
User-mode 驱动程序也在更高的抽象级别上运行。 IRQL、paged/non-paged 内存和线程上下文等概念在内核之外不存在,因此 user-mode 驱动程序不需要关心它们。
因为它们 运行 在正常进程中,user-mode 驱动程序也可以使用普通调试器进行调试 - 不需要内核调试器。
kernel-mode 驱动程序的主要优点是性能,并且对内核开发人员来说简单 - 这就是所有驱动程序最初都是 kernel-mode 的原因。 user-mode 驱动程序的主要优点是隔离、安全、容错和驱动程序编写者的简单性。
此外,并非所有功能都在 User-Mode 驱动程序框架中可用。 Here is a list on MSDN - most notably, UMDF does not support Direct Memory Access, or multiple functional power states.
(部分信息取自MSDN)
我正在尝试学习 windows 驱动程序的基础知识。 为什么我不能在典型的 c++ 应用程序中使用 header ntddk.h 中的函数?
编辑:内核 是操作系统的核心组件,它管理运行ning 进程、内存分配等。您可以将其视为具有特殊特权的进程 - 尽管它不是进程,因为它管理进程。
Kernel-mode 驱动程序 或 ring-0 驱动程序 被加载到内核中。他们的代码与任何其他内核代码一样被对待。内核对系统具有完全控制权——这意味着如果出现问题,它可能会搞砸整个系统并需要重新启动。 (这就是蓝屏死机。)
User-mode drivers 或 ring-3 drivers, 运行 在正常进程中。像任何其他进程一样,它们不能在不询问内核的情况下访问系统的其余部分,并且它们有自己的地址空间。与任何其他程序一样,如果 user-mode 驱动程序崩溃,它只会影响该进程 - 特别是,它不太可能导致 BSOD。
User-mode 驱动程序也在更高的抽象级别上运行。 IRQL、paged/non-paged 内存和线程上下文等概念在内核之外不存在,因此 user-mode 驱动程序不需要关心它们。
因为它们 运行 在正常进程中,user-mode 驱动程序也可以使用普通调试器进行调试 - 不需要内核调试器。
kernel-mode 驱动程序的主要优点是性能,并且对内核开发人员来说简单 - 这就是所有驱动程序最初都是 kernel-mode 的原因。 user-mode 驱动程序的主要优点是隔离、安全、容错和驱动程序编写者的简单性。
此外,并非所有功能都在 User-Mode 驱动程序框架中可用。 Here is a list on MSDN - most notably, UMDF does not support Direct Memory Access, or multiple functional power states.
(部分信息取自MSDN)