什么是Windows内核驱动程序?

时间:2011-05-15 07:48:23

标签: winapi wdk

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

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

4 个答案:

答案 0 :(得分:11)

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

长话短说:

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

答案 1 :(得分:2)

代码在内核模式而不是用户模式下运行。内核模式代码可以直接访问操作系统的内部,硬件等。

您总是编写内核模式模块来实现device drivers

答案 2 :(得分:0)

内核驱动程序是"应用程序"的低级实现 因为它在内核上下文中运行,所以它能够直接访问内核API和内存。

例如,应该使用内核驱动程序:

  • 控制对文件的访问(密码保护,隐藏)
  • 允许访问非标准文件系统(如ext,reiserfs,zfs等)和设备
  • True API挂钩
  • ......还有很多其他原因

如果您想了解更多信息,可以搜索关键字" ring0"用你最喜欢的搜索引擎。

答案 3 :(得分:0)

其他人则从系统级别的角度解释了差异。 如果您使用C ++进行开发,则用户模式开发和内核模式开发之间存在以下差异。

  1. 未处理的异常使用户模式下的进程崩溃,但在内核模式下,它使整个系统(蓝屏死机)崩溃。
  2. 当用户模式进程在没有可用私有内存的情况下终止时,系统将隐式释放进程内存。但是在内核模式下,系统引导后剩余的可用内存。
  3. 以PASSIVE_LEVEL编写并执行用户模式代码。在内核模式下,IRQL级别更高。
  4. 使用单独的计算机完成内核代码调试。但是您可以在同一台计算机上调试用户模式。
  5. 您不能在内核模式下使用所有C ++功能,例如异常处理和STL。
  6. 入口点不同,在用户模式下,您使用main作为入口点。但是在内核模式下,我们需要使用DriverEntry。
  7. 您不能在内核模式下使用new运算符,您需要显式重载它。