开发者需要了解的WDF中的一些重要的概念
本科毕业设计是这方面的工作,所以想开几篇博客来介绍使用WDF开发PCI/PCIe接口卡的驱动程序方法。
在上一篇简要介绍了WDF和开发环境搭建后,本篇将讲述几个WDF中的概念,对开发者了解WDF非常有帮助,属于“内功部分”;
本篇文章结构将没那么清晰,当句句都是作者通过看书、看论文、看MSDN提炼出来的,希望对读者能够有所帮助。
1、WinDBG是唯一的内核驱动调试利器,但是开发PCIe的WDF驱动可以采用“黑盒”方式,所以windbg不是必须的;
2、WDF比WDM好,别再用WDM了;
3、驱动程序编译成的二进制文件是sys类型,和EXE一样都是Portable Executable File Format;DLL也是PE格式
4、微软提供的内核接口只有C/C++
5、驱动程序开发时,需要为每一个函数指定其是分页内存还是非分页内存;
6、PAGE标识是指此函数能在驱动运行时被交换到磁盘上;如果不指定,编译器默认为非分页内存;一般情况下,我们不许要考虑这些问题。但有些特殊的情况,代码是不允许被交换到硬盘上的,否则导致操作系统蓝屏或者自动重启;
7、驱动开发一定要关注warnning!!!除非你对这个warnning带来的影响非常了解;
8、派遣函数又可称为回掉函数,,提供给操作系统调用。这些派遣函数是我们的主要工作重点;
9、创建设备时要判断设备是否创建成功,比进行必要的失败处理。驱动程序中这样的处理对于驱动程序的健壮性起着不容忽视的作用;
10、驱动程序的设备名称对应用程序来说是透明的,只能应用于内核,这也是为什么要创建设备符号链接、GUID的原因;
为了不给读者带来疲劳,再从1开始计数吧~
1、用户模式应用程序的虚拟地址空间除了为专用空间以外,还会受到限制。在用户模式下运行的处理器无法访问为该操作系统保留的虚拟地址。限制用户模式应用程序的虚拟地址空间可防止应用程序更改并且可能损坏关键的操作系统数据;
2、在内核模式下运行的所有代码都共享单个虚拟地址空间。这表示内核模式驱动程序未从其他驱动程序和操作系统自身独立开来。如果内核模式驱动程序意外写入错误的虚拟地址,则属于操作系统或其他驱动程序的数据可能会受到损坏。如果内核模式驱动程序损坏,则整个操作系统会损坏;
3、最正式的设备堆栈的定义:设备堆栈为(设备对象、驱动程序)对的有序列表,设备堆栈中创建的第一个设备对象位于底部,创建并附加到设备堆栈的最后一个设备对象位于顶部;
4、安装设备驱动时,安装程序使用信息(INF)文件中的信息来确定哪个驱动程序为函数驱动程序、哪个驱动程序为筛选器。这样安装后,PnP管理器就能通过注册表来确定设备的函数驱动程序和筛选器驱动程序了;
5、发送到设备的请求大部分都打包在I/O数据请求包中(IRP),IRP结构体:%28v=vs.85%29.aspx;
6、IRP包含驱动程序处理I/O请求所需的全部信息;
7、驱动程序拆分为两个部分:一部分处理通用处理,另一部分处理特殊设备的处理,通用部分由Microsoft编写;特定部分由Microsoft或者硬件提供商编写;
8、通用部分称为“框架”,特定部分称为KMDF驱动程序;
9、”框架“可以处理I/O请求队列、线程同步以及很大一部分的电源管理任务;因此当某人将IRP发送到对时,IRP会转至框架。如果框架可以处理IRP,则不会涉及到KMDF驱动程序;如果框架处理不了就通过调用KMDF驱动程序来实现事件处理程序来获取帮助;
10、WDK中的头文件包含的条件语句指定编程元素仅在某些版本的Windows操作系统中才可用
好吧,还没有写完~
1、创建驱动程序时,可以指定Windows 7为基本的目标操作系统,在这种情况下,驱动程序会在Win7或更高的Windows上运行;
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69795.html
- 上一篇:Windows的加密能力
- 下一篇:没有了