欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

【翻译】winddk翻译(四)--移植性

【翻译】winddk翻译(四)--移植性

Kernel-Mode Driver Architecture: Windows DDK
移植性
所有的驱动必须确保能够在所有的Windows硬件平台上运行。为了达到多平台可移值的目的,驱动开发师应该: 
使用C语言(而不是汇编语言)
只使用由DDK提供的程序接口和头文件
用C语言写驱动
所有的内核模式驱动应该使用C语言来编写,这样我们只需使用特定系统的C语言编译器重新编译,链接,而不必重写或者 替换任何代码,即可运行于其他Microsoft Windows平台上。大部分操作系统组件是完全由C语言编写的,只有硬件抽象层(HAL)及内核(kernel)的小部分是由汇编书写的,因此操作系统在不同的硬件平台上取得移植性。
驱动不应该依赖于任何特定系统的C语言编译器或者语言库,如若这些特定的功能并不为其他的系统的编译器所支持。一般情况下,驱动代码应该遵循ANSI C标准并且不依赖任何该标准描述为“没有定义”的功能。 
为了书写可移植的驱动,首先得避免:
依赖于那些不同平台具有不同大小的数据类型。
调用尚待讨论的标准的C运行库函数。
调用C语言运行库函数,而不使用由操作系统提供的等价支持例程。

使用DDK提供的接口
每一个NT执行体组件提供了一系列的内核模式 驱动支持例程(driver support routines) 。驱动程序和其他内核模式组件都会调用这些驱动支持例程。 因为组件接口不会改变,即使底层的支持例程随着时间发生变化,她的调用者仍旧可以维护可移植性。 
DDK提供了一系列的头文件。这些头文件定义了系统特别的数据类型以及驱动(其他内核模式组伯)用来维持可移植性的一些常量。所有内核驱动都包含了一个DDK内核模式主头文件,wdm.h或者ntddk.h。主头文件不仅仅提供了定义基本内核模式类型的头文件还包括了对任意处理器构架的特别头文件,当然这个时候要求驱动程序使用特定的指令来进行编译。
也有一些驱动,如SCSI微型端口驱动(SCSI miniport drivers), NDIS驱动(NDIS drivers)和 显卡微型端口驱动(video miniport drivers),包括其他的由系统提供的头文件。 
如果一个函数要求使用平台相关的定义,您最好是使用#ifdef语句将这些定义独立起来,这样驱动即可以编译,链接到适合的硬件平台。然而,你一般情况下都可以使用支持例程,宏,常量以及其他由DDK主要头文件提供的数据类型,来避免在您的驱动中使用平台相关,条件编译的代码。
内核模式驱动可以使用内核模式DDK中当中文档化了的RtlXxx例程。内核驱动不能够使用用户模式下的RtlXxx例程。

Microsoft Corporation
Send feedback on this topic
Built on Friday, February 18, 2005

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功