原文地址:http://www.codeproject.com/system/WDM_Driver_development.asp

引言(Introduction)
  我们可以很容易找到许多研究应用程序层面上问题比如可换肤对话框、MFC、ATL、线程、进程、注册表等等的文章,但是你很难找到附带有完整源代码的关于驱动程序开发的文章,导致这种现象的根源在于大多数的驱动程序是为特定的硬件开发的,没有相关领域的知识,你几乎永远不能也不可能接触到它们。我相信许多软件工程师第一次涉足内核模式编程时内心都是十分“恐惧”的,而且从DDK学习到编程阶段整个过程中能找到的资源是极端匮乏的,因此,我决定和大家分享我在Windows平台上开发驱动程序的一些经验。本文着重于快速介绍WDM驱动程序的架构、介绍伴随Windows而来的两种I/O模式:直接I/O(Direct I/O)和缓冲I/O(Buffered I/O)、如何与驻留在系统内核地址空间中的驱动程序通讯并且如何向其读写数据。
  阅读演示程序是不需要任何硬件相关的背景知识,这些演示程序都是一些伪驱动程序(我更愿意叫它纯软件驱动),也就是说这些驱动程序并不与计算机上的任何物理设备相关。
  你可以把那些在演示程序中定义的成员函数用作未来开发驱动程序的样板。

背景(Background)
  你必须是一个经验丰富的软件工程师,而且想涉足内核编程领域。

创建你自己的WDM驱动程序:伪驱动程序 教程
  在开始之前,你必须声明成员函数以及相关结构,最重要的驱动程序需要的数据结构就是:DEVICE_EXTENSION!
PDEVICE_EXTENSION;
  下面的代码片断展示了如何开始创建一个合法的WDM驱动程序。[WDM][翻译]A simple demo for WDM Driver develop
  在WDM驱动程序中,有些成员是必需而有些成员是可选的。在一个合法的WDM驱动程序中一般都有下面这些成员过程,DriverEntry最重要的任务就是向内核注册这些成员过程。
[WDM][翻译]A simple demo for WDM Driver developNTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, 
[WDM][翻译]A simple demo for WDM Driver develop  IN PUNICODE_STRING RegistryPath)
}

[WDM][翻译]A simple demo for WDM Driver develop
WDM驱动程序的一般工作流程

  下面的代码片断演示了AddDevice过程的流程:AddDevice过程的最重要任务就是创建一个设备对象,并且将它挂到已经存在的设备堆栈上。

[WDM][翻译]A simple demo for WDM Driver developNTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject,
[WDM][翻译]A simple demo for WDM Driver develop  IN PDEVICE_OBJECT PhysicalDeviceObject)
}



未完待续...

相关文章:

  • 2021-08-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
  • 2021-08-30
  • 2021-07-30
猜你喜欢
  • 2021-12-15
  • 2022-12-23
  • 2021-09-06
  • 2021-11-24
  • 2022-02-11
  • 2021-06-18
  • 2022-01-04
相关资源
相似解决方案