winapi - 什么是 Windows 内核驱动程序?

标签 winapi wdk

什么是使用 WDK 编写的 Windows 内核驱动程序?

与普通应用或服务有何不同?

最佳答案

内核驱动程序是针对 Windows NT 的 native API(而不是 Win32 子系统的 API)编写的程序,并且在底层硬件上以内核模式执行。这意味着驱动程序需要能够处理进程之间虚拟内存上下文的切换,并且需要编写得非常稳定——因为内核驱动程序在内核模式下运行,如果一个崩溃,就会导致整个系统崩溃。内核驱动程序不适合除硬件设备之外的任何设备,因为它们需要管理访问权限才能安装或启动,并且因为它们消除了内核通常为崩溃程序提供的安全性,即它们本身崩溃,而不是整个系统崩溃。

长话短说:

  • 驱动程序使用 native API 而不是 Win32 API
    • 这意味着驱动程序通常无法显示任何 UI。
  • 驱动程序需要管理内存以及显式分页内存的方式 - 使用分页池和非分页池等。
  • 驱动程序需要处理进程上下文切换,而不是依赖于哪个进程在运行时恰好拥有页表。
  • 受限用户无法将驱动程序安装到内核中。
  • 驱动程序在处理器级别以特权运行。
  • 用户级程序中的错误会导致该程序进程终止。驱动程序中的错误会导致系统蓝屏死机。
  • 驱动程序需要处理低级硬件位,例如中断和中断请求级别 (IRQL)。

关于winapi - 什么是 Windows 内核驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6007176/

相关文章:

C++ 和 Windows - NtCreateThreadEx 函数的 DLL 注入(inject)不起作用

c++ - 使用 CreateProcess 运行批处理文件

c - Hook NtReadFile。更改文字

wdk - 错误LNK2001 : unresolved external symbol _fltused in wdk

c - 链接我的驱动程序时出现问题

windows - 是什么导致磁盘上的驱动程序和映射到内存的驱动程序之间存在差异?

c++ - 控制台应用程序可以自己创建窗口吗?

C++ win32 : adding values to ComboBox

windows - 音频:如何设置默认麦克风的电平?

c++ - 在 Windows 中以编程方式区分 USB 软盘驱动器和 USB 闪存驱动器