1.1.1显示器驱动程序职责 显示器驱动程序是一个主要职责为绘制的DLL。当一个应用通过设备无关图形请求调 用Win32函数时,图形设备接口(GDI)解释这些指令并调用显示器驱动程序。显示器驱动 程序再把这些请求转换成命令,视频硬件在屏幕上绘制图形 示器驱动程序能够直接访问硬件,因为图形硬件的能力很广泛,而且在任何系统中 显示是对时间最苛求的部分。GDI的这种可访问性和广泛的能力在实现一个显示器驱动程序 时提供了相当的灵活性 缺省情况下,GDI在标准格式位图上处理绘图操作,如在包含帧缓冲区的硬件上。显 示器驱动程序能hook和实现任何硬件提供特别支持的绘图函数。对时间要求较低的操作和 更复杂的操作,图形适配器不支持,驱动程序能punt函数到GDI并允许GDI工作。细节参 见第一部分第2章, Hooking和 Punting 对时间要求特别严格的操作,显示器驱动程序能直接访问视频硬件寄存器。例如,x86 系统的VGA显示器驱动程序对一些绘图和文本操作使用优化的汇编代码实现对硬件寄存器 的直接访问。 显示器驱动程序的细节在第2章显示器驱动程序中讨论。 1.1.2视频微端口驱动程序职责 视频微端口驱动程厅通常处理必须和其他NT核心部件交互的操作。例如,硬件初始 化这样的操作和由 Windows nt i/o子系统操作的存储器映像请求。视频微端口驱动程序职 责包括资源管理,如硬件的配置,以及物理设备存储器映像。视频微端口驱动程序必须指定 视频硬件 显示器驱动程序使用视频微端口驱动程序进行操作不需要频繁请求,例如,管理资源, 执行物理设备存储器映像,确保寄存器的输出出现在最近的地方,或者响应中断 视频微端口驱动程序还能处理: 与图形卡的模式设置交互作用。 多种硬件类型,显示器驱动程序中最小地依赖硬件类型。 把视频寄存器映像到显示器驱动程序的地址空间。Ⅰ/⑩端口直接寻址 视频微端口驱动程序的细节在视频微端口驱动程序中讨论 1.2图形适配器的类型 图形适配器一般有4种类型: 帧缓冲区 加速器 协处理器 VGA 1.2.1帧缓冲区
36 1.1.1 显示器驱动程序职责 显示器驱动程序是一个主要职责为绘制的 DLL。当一个应用通过设备无关图形请求调 用 Win32 函数时,图形设备接口(GDI)解释这些指令并调用显示器驱动程序。显示器驱动 程序再把这些请求转换成命令,视频硬件在屏幕上绘制图形。 显示器驱动程序能够直接访问硬件,因为图形硬件的能力很广泛,而且在任何系统中 显示是对时间最苛求的部分。GDI 的这种可访问性和广泛的能力在实现一个显示器驱动程序 时提供了相当的灵活性。 缺省情况下,GDI 在标准格式位图上处理绘图操作,如在包含帧缓冲区的硬件上。显 示器驱动程序能 hook 和实现任何硬件提供特别支持的绘图函数。对时间要求较低的操作和 更复杂的操作,图形适配器不支持,驱动程序能 punt 函数到 GDI 并允许 GDI 工作。细节参 见第一部分第 2 章,Hooking 和 Punting。 对时间要求特别严格的操作,显示器驱动程序能直接访问视频硬件寄存器。例如,x86 系统的 VGA 显示器驱动程序对一些绘图和文本操作使用优化的汇编代码实现对硬件寄存器 的直接访问。 显示器驱动程序的细节在第 2 章显示器驱动程序中讨论。 1.1.2 视频微端口驱动程序职责 视频微端口驱动程序通常处理必须和其他 NT 核心部件交互的操作。例如,硬件初始 化这样的操作和由 Windows NT I/O 子系统操作的存储器映像请求。视频微端口驱动程序职 责包括资源管理,如硬件的配置,以及物理设备存储器映像。视频微端口驱动程序必须指定 视频硬件。 显示器驱动程序使用视频微端口驱动程序进行操作不需要频繁请求,例如,管理资源, 执行物理设备存储器映像,确保寄存器的输出出现在最近的地方,或者响应中断。 视频微端口驱动程序还能处理: ▪ 与图形卡的模式设置交互作用。 ▪ 多种硬件类型,显示器驱动程序中最小地依赖硬件类型。 ▪ 把视频寄存器映像到显示器驱动程序的地址空间。I/O 端口直接寻址。 视频微端口驱动程序的细节在视频微端口驱动程序中讨论。 1.2 图形适配器的类型 图形适配器一般有 4 种类型: ▪ 帧缓冲区 ▪ 加速器 ▪ 协处理器 ▪ VGA 1.2.1 帧缓冲区
缓冲区是图形适配器上的专用存储器。简单的图形适配器有帧缓冲区而没有加速 器。如果硬件是线性寻址的并且支持标准格式位图(DIB格式),GDI能处理绘图操作并直接 写入帧缓冲区。这能减小显示器驱动程序的大小,因为驱动程序能让GDI进行全部或大多数 的绘图。大多数帧缓冲区是线性寻址的,或者说是“平面的” 在例子中显示器驱动程序是 framebuf目录中的帧缓冲区驱动程序。因为这个驱动程 序支持线性寻址帧缓冲区硬件,它允许GDI进行大多数工作,并且很小也相对简单。 1.2.2加速器 加速器包括显示卡上带的电路,对于指定的绘图操作,如直线的绘制和填充,或位块 传输,能提高图形操作的速度。硬件必须提供对一个指钊的支持,驱动程序使用它通常比由 GDI提供支持的指针速度要块得多 与 Windows2000DDK一起发布的3 Dabs permedia2例子驱动程序是一个复杂和相 当难以处理的加速器。显示器和微端口驱动程序能在 displays|3 dabs和 miniport I3 dabs 源程序例子文件夹中找到。3 abs Permedia2驱动程序完全用C语言编码,因此在整个系 统中可移植 1.23协处理器 包括协处理器的图形适配器提供了加速图形显示函数的另一种方法。协处理器本质上 是带有附加的可编程命令逻辑的加速器。因为协处理器是可编程的,它们支持多进程,允许 协处理器处理一些费时的操作,而其他操作在别处进行 1.2.4VGA 基于x86的计算机的标准图形卡是VGA。这个硬件可以在文本和图形模式下运行。在 VGA兼容的硬件上建立了一系列加速器。 1.3一般的设计和实现策略 为了设计有效的 Windows2000显示器驱动程序和视频微端口驱动程序,考虑以下的 策略: 修改一个已存在的为类似的图形适配器类型设计的DD例子,减少驱动程序的设 计时间 为保证最大的可移植性,尽可能多地使用C语言编写驱动程序,仅当编写硬件没 有很好支持的对时间要求严格的的程序才使用汇编语言。虽然汇编语言代码有优 化的潜力,时间和可移植性在价值上超过了其代价。 操作中使用视频微端口驱动程序管理资源、执行物理设备存储器映像、确保寄存 器以最近似的值输出,或响应中断。微端口驱动程序主要用于处理硬件家族中的
37 帧缓冲区是图形适配器上的专用存储器。简单的图形适配器有帧缓冲区而没有加速 器。如果硬件是线性寻址的并且支持标准格式位图(DIB 格式),GDI 能处理绘图操作并直接 写入帧缓冲区。这能减小显示器驱动程序的大小,因为驱动程序能让 GDI 进行全部或大多数 的绘图。大多数帧缓冲区是线性寻址的,或者说是“平面的”。 在例子中显示器驱动程序是 framebuf 目录中的帧缓冲区驱动程序。因为这个驱动程 序支持线性寻址帧缓冲区硬件,它允许 GDI 进行大多数工作,并且很小也相对简单。 1.2.2 加速器 加速器包括显示卡上带的电路,对于指定的绘图操作,如直线的绘制和填充,或位块 传输,能提高图形操作的速度。硬件必须提供对一个指针的支持,驱动程序使用它通常比由 GDI 提供支持的指针速度要块得多。 与 Windows 2000 DDK 一起发布 的 3Dlabs Permedia2 例子驱动程序是一个复杂和相 当难以处理的加速器。显示器和微端口驱动程序能在 displays\3dlabs 和 miniport\3dlabs 源程序例子文件夹中找到。3Dlabs Permedia2 驱动程序完全用 C 语言编码,因此在整个系 统中可移植。 1.2.3 协处理器 包括协处理器的图形适配器提供了加速图形显示函数的另一种方法。协处理器本质上 是带有附加的可编程命令逻辑的加速器。因为协处理器是可编程的,它们支持多进程,允许 协处理器处理一些费时的操作,而其他操作在别处进行。 1.2.4 VGA 基于 x86 的计算机的标准图形卡是 VGA。这个硬件可以在文本和图形模式下运行。在 VGA 兼容的硬件上建立了一系列加速器。 1.3 一般的设计和实现策略 为了设计有效的 Windows 2000 显示器驱动程序和视频微端口驱动程序,考虑以下的 策略: ⚫ 修改一个已存在的为类似的图形适配器类型设计的 DDK 例子,减少驱动程序的设 计时间。 ⚫ 为保证最大的可移植性,尽可能多地使用 C 语言编写驱动程序,仅当编写硬件没 有很好支持的对时间要求严格的的程序才使用汇编语言。虽然汇编语言代码有优 化的潜力,时间和可移植性在价值上超过了其代价。 ⚫ 操作中使用视频微端口驱动程序管理资源、执行物理设备存储器映像、确保寄存 器以最近似的值输出,或响应中断。微端口驱动程序主要用于处理硬件家族中的
变化,以及使显示器驱动程序对硬件类型的依赖最小 还必须考虑以下事实 显示器驱动程序和视频微端口驱动程序在相同的特权核心模式地址空间中操作, 就像是 Windows nt executive的一部分。任何一个驱动程序中的错误都将引起 系统剩余部分的故障。 显示器驱动程序和视频微端口驱动程序在任何时刻都是抢先的。 显示器驱动程序的代码和数据段都是完全分页的。 ●输出函数在入口处必须执行标准的 Windows n/ Windows2000 prolog,退出时 执行 epiloge更多的信息参见平台SDK文档。 1.4访问图形适配器 为确保显示器的性能,显示器驱动程序能通过下列方法访问图形卡: 通过发送I0CTL到图形适配器的视频微端口驱动程序直接访问。参见通过OC和视 频微端口驱动程序通信。 通过读写视频存储器(帧缓冲区)或硬件寄存器直接访问。参见帧缓冲区和硬件寄存 器。 1.4.1通过II和视频微端口驱动程序通信 图1.2显示了显示器驱动程序如何使用I0C和视频微端口驱动程序通信。 图1.2显示器驱动程序/视频微端口驱动程序的通信 显示器驱动程序使用一个I0CIL调用 EngDeviceloControl向视频微端口驱动程序发 送一个同步请求。对于输入和输出GDI使用单个的缓冲区向I/0子系统传递请求。I/0子系 统把这个请求发送到视频端口,用视频微端口驱动程序处理请求 些 IOCTL请求要求微端口驱动程序访问视频寄存器,其他的则从微端口驱动程序的 数据结构中存储或取出信息。通常,没有请求要求视频微端口驱动程序执行实际的绘图操作。 般地,除非模块性要求,否则显示器驱动程序处理绘图和其他的时间要求严格的操 作。发送一个 IOCTL到微端口驱动程序来执行时间要求严格的函数会使系统的性能下降 系统定义的视频 IOCTL的描述参见在线DDK中 Video l们 Control codes。通过加入 个私有的IOC,格式必须是在线DD中 Kernel ode Driver Reference中描述的,可 以在显示器驱动程序和视频微端口驱动程序之间扩展接口。如果需要写一个新的 IOCTL,必 须首先和 Microsoft技术支持联系 1.4.2访问帧缓冲区和硬件寄存器 减小显示器驱动程序的大小可以有几种方法。例如,可以仅实现显示器驱动程序执行 比GDI快的函数,而指定GDI执行所有的其他函数。GDI经常执行大量实际的绘图到线型的
38 变化,以及使显示器驱动程序对硬件类型的依赖最小。 还必须考虑以下事实: ⚫ 显示器驱动程序和视频微端口驱动程序在相同的特权核心模式地址空间中操作, 就像是 Windows NT Executive 的一部分。任何一个驱动程序中的错误都将引起 系统剩余部分的故障。 ⚫ 显示器驱动程序和视频微端口驱动程序在任何时刻都是抢先的。 ⚫ 显示器驱动程序的代码和数据段都是完全分页的。 ⚫ 输出函数在入口处必须执行标准的 Windows NT/ Windows 2000 prolog,退出时 执行 epilog。更多的信息参见平台 SDK 文档。 1.4 访问图形适配器 为确保显示器的性能,显示器驱动程序能通过下列方法访问图形卡: 通过发送 IOCTL 到图形适配器的视频微端口驱动程序直接访问。参见通过 IOCTL 和视 频微端口驱动程序通信。 通过读写视频存储器(帧缓冲区)或硬件寄存器直接访问。参见帧缓冲区和硬件寄存 器。 1.4.1 通过 IOCTL 和视频微端口驱动程序通信 图 1.2 显示了显示器驱动程序如何使用 IOCTL 和视频微端口驱动程序通信。 图 1.2 显示器驱动程序/视频微端口驱动程序的通信 显示器驱动程序使用一个 IOCTL 调用 EngDeviceIoControl 向视频微端口驱动程序发 送一个同步请求。对于输入和输出 GDI 使用单个的缓冲区向 I/O 子系统传递请求。I/O 子系 统把这个请求发送到视频端口,用视频微端口驱动程序处理请求。 一些 IOCTL 请求要求微端口驱动程序访问视频寄存器,其他的则从微端口驱动程序的 数据结构中存储或取出信息。通常,没有请求要求视频微端口驱动程序执行实际的绘图操作。 一般地,除非模块性要求,否则显示器驱动程序处理绘图和其他的时间要求严格的操 作。发送一个 IOCTL 到微端口驱动程序来执行时间要求严格的函数会使系统的性能下降。 系统定义的视频 IOCTL 的描述参见在线 DDK 中 Video I/O Control Codes。通过加入 一个私有的 IOCTL,格式必须是在线 DDK 中 Kernel Mode Driver Reference 中描述的,可 以在显示器驱动程序和视频微端口驱动程序之间扩展接口。如果需要写一个新的 IOCTL,必 须首先和 Microsoft 技术支持联系。 1.4.2 访问帧缓冲区和硬件寄存器 减小显示器驱动程序的大小可以有几种方法。例如,可以仅实现显示器驱动程序执行 比 GDI 快的函数,而指定 GDI 执行所有的其他函数。GDI 经常执行大量实际的绘图到线型的
帧缓冲区以减小驱动程序的大小。GDⅠ不能直接访问分组的存储器:因此,当帧缓冲区不是 线性寻址时,显示器驱动程序必须将帧缓冲区分割成一系列的组,并为GDI提供一种手段执 行相应的组上的绘图操作。详细情况参见第2章支持分组的帧缓冲区。 显示器驱动程序直接访问I/0和存储器映像的视频寄存器。这个访问允许显示器驱动 程序实现高性能。例如,驱动程序可能需要访问视频硬件寄存器,以高吞吐率发送绘制直线 的命令。 类似地,对于图形卡,如S3,在图形引擎代码中许多最内层的循环要求读写几个视频 控制器端口(例如,图形模式下的文本输出,位块传输和直线绘制)。与其请求显示器驱动 程序为每个请求发送一个 IOCTL到微端口驱动程序,不如显示器驱动程序允许直接访问视频 硬件 1.5创建图形INF文件 Windows nt/ Windows2000显示器和视频微端口驱动程序必须使用INF文件安装 Windows2000DDK提供了一个称作 genin.ere的工具,为显示器和视频微端口驱动程序产 生一个INF文件。当 genin. exe运行时,它显示一系列对话框给出提示信息,如公司名, 显示器驱动程序和视频微端口驱动程序的名字等。 genin.exe从这些信息中产生一个INF 文件 注意由 genin.exe产生的文件可能不是一个完全有效的INF文件。 genin.exe产 生一个INF文件,很可能需要客户为INF文件中描述的每个设备加入注册设置。 如果微端口驱动程序对 VideoPortGetAccessRanges或 VideoPort VeerifyAccessRanges的调用总是失败,可以手工编辑INF文件,包含在INF GeneralConfigData段中描述的段和适当的条目。 在运行 genin.ere时,当提示选择设备类时,选择显示器。在驱动程序初始化时, 标记为 Class= Display的IN文件被系统提供的显示器类安装程序解释。这确保所有与视频 驱动程序相关的注册入口都能正确初始化 在系统中 Display类的INF文件只能初始化下列文件 单个微端口驱动程序 个或多个显示器驱动程序 控制面板扩展DLL Display类的INF文件不能安装其他类型的驱动程序或应用文件 genin.ere的限制 不能使用 genin.exe产生: 支持超过一个体系结构的INF文件;例如,可以创建x86体系结构或ia64体系结构 的INF文件,但不能同时创建两个。 支持 Windows9x.或 Windows nt4.0的INF文件, 镜像驱动程序INF文件。作为模板使用 mirror例子驱动程序提供的INF文件。细节 参见第2章中镜像驱动程序ⅠF文件。 监视器INF文件。作为模板使用名为 mensal.inf的INF文件。细节参见监视器IMF 文件 这些例子INF文件与 Windows2000DDK一起发布。 当更新例子INF时,详细的参见第四部分、第3章即插即用、电源管理和设置设计指
39 帧缓冲区以减小驱动程序的大小。GDI 不能直接访问分组的存储器;因此,当帧缓冲区不是 线性寻址时,显示器驱动程序必须将帧缓冲区分割成一系列的组,并为 GDI 提供一种手段执 行相应的组上的绘图操作。详细情况参见第 2 章支持分组的帧缓冲区。 显示器驱动程序直接访问 I/O 和存储器映像的视频寄存器。这个访问允许显示器驱动 程序实现高性能。例如,驱动程序可能需要访问视频硬件寄存器,以高吞吐率发送绘制直线 的命令。 类似地,对于图形卡,如 S3,在图形引擎代码中许多最内层的循环要求读写几个视频 控制器端口(例如,图形模式下的文本输出,位块传输和直线绘制)。与其请求显示器驱动 程序为每个请求发送一个 IOCTL 到微端口驱动程序,不如显示器驱动程序允许直接访问视频 硬件。 1.5 创建图形 INF 文件 Windows NT/ Windows 2000 显示器和视频微端口驱动程序必须使用 INF 文件安装。 Windows 2000 DDK 提供了一个称作 geninf.exe 的工具,为显示器和视频微端口驱动程序产 生一个 INF 文件。当 geninf.exe 运行时,它显示一系列对话框给出提示信息,如公司名, 显示器驱动程序和视频微端口驱动程序的名字等。geninf.exe 从这些信息中产生一个 INF 文件。 注意 由 geninf.exe 产生的文件可能不是一个完全有效的 INF 文件。geninf.exe 产 生一个 INF 文件,很可能需要客户为 INF 文件中描述的每个设备加入注册设置。 如 果 微 端 口 驱 动 程 序 对 VideoPortGetAccessRanges 或 VideoPortVeerifyAccessRanges 的调用总是失败,可以手工编辑 INF 文件,包含在 INF GeneralConfigData 段中描述的段和适当的条目。 在运行 geninf.exe 时,当提示选择设备类时,选择显示器。在驱动程序初始化时, 标记为 Class=Display 的 INF 文件被系统提供的显示器类安装程序解释。这确保所有与视频 驱动程序相关的注册入口都能正确初始化。 在系统中 Display 类的 INF 文件只能初始化下列文件: ▪ 单个微端口驱动程序 ▪ 一个或多个显示器驱动程序 ▪ 控制面板扩展 DLL Display 类的 INF 文件不能安装其他类型的驱动程序或应用文件。 geninf.exe 的限制 不能使用 geninf.exe 产生: 支持超过一个体系结构的 INF 文件;例如,可以创建 x86 体系结构或 ia64 体系结构 的 INF 文件,但不能同时创建两个。 支持 Windows 9x.或 Windows NT 4.0 的 INF 文件。 镜像驱动程序 INF 文件。作为模板使用 mirror 例子驱动程序提供的 INF 文件。细节 参见第 2 章中镜像驱动程序 INF 文件。 监视器 INF 文件。作为模板使用名为 monsamp.inf 的 INF 文件。细节参见监视器 INF 文件。 这些例子 INF 文件与 Windows 2000 DDK 一起发布 。 当更新例子 INF 时,详细的参见第四部分、第 3 章即插即用、电源管理和设置设计指
南中的创建一个IMF文件,以及卷1的第三部分 Windows2000驱动程序开发指南的第1 章,IMF文件段和指令 1. 5. 1 INF GeneralConfigData Et 如果微端口驱动程序对 VideoPort GetAccessRanges或 VideoPort VeerifyAccessRanges的调用总是失败,可以编辑 genin..exe产生的INF文件, 修改 GeneralConfigData段中相应的条目。 [GeneralConfigData] MMaximunDeviceMemory Configuration =n LMaximunNumberOfDevices =n [KeepExistingDriverEnabled =n] 下面是 GeneralConfigData的条目和值: MaximunDeviceMemory Configuration =n 指定了微端口驱动程序的设备尝试映像的物理地址空间的最大兆字节数。为使这个接 口有效,需要重新启动。可以通过在 DeviceManager中检查设备的状态来决定是否需要重新 启动 Maximun NumberOfDevices =n 指定了微端口驱动程序一次能够支持的适配器的最大数量。只在指定了 Maximun DeviceMemory Configuration关键字并且在多监视器系统中微端口驱动程序可以是 第2个适配器时这个条目才指定。为使这个接口有效,需要重新启动。可以通过在 DeviceManager中检查设备的状态来决定是否需要重新启动 Keep ExistingDriverEnable 指定了是否当前的驱动程序保持有效。为保持存在的驱动程序,设置这个注册键为1 (TRUE)。为卸载当前的驱动程序,设置这个键为0( FALSE)。当INF文件编写者想使当前 的驱动程序保持有效,这个键主要在镜像驱动程序IMF文件中使用。 1.52显示器INF文件段 下一段仅用于图形适配器安装。关于INF文件更一般的信息,参见卷1的第三部分 indows200驱动程序开发指南第1章,M文件段和指令 D DInstalI. SoftwareSettings E DDInstall. SoftwareSettings]段包含 AddRe和/或 Deleg指令。每个指令指向一 个分离的INF编写者定义的段,包含要加入或删除的注册条目。 在下例中, Addres指令指向命名为ACME-1234 SoftwareDeviceSettings的INF编写 者定义的加入注册段。 De lreg指令指向命名为ACME-1234 DeleteSWSettings的另一个INF 编写者定义的删除注册段。 在加入注册段里,加入了 InstalledDisplayDrivers和 CapabilityOverride两个键, 并给出了显示的值。删除注册段显示了从注册里删除的两个键: Graphicsclocking和
40 南中的创建一个 INF 文件,以及卷 1 的第三部分 Windows 2000 驱动程序开发指南的第 1 章,INF 文件段和指令。 1.5.1 INF GeneralConfigData 段 如 果 微 端 口 驱 动 程 序 对 VideoPortGetAccessRanges 或 VideoPortVeerifyAccessRanges 的调用总是失败,可以编辑 geninf.exe 产生的 INF 文件, 修改 GeneralConfigData 段中相应的条目。 [GeneralConfigData] [MaximunDeviceMemoryConfiguration = n] [MaximunNumberOfDevices = n] [KeepExistingDriverEnabled = n] 下面是 GeneralConfigData 的条目和值: MaximunDeviceMemoryConfiguration =n 指定了微端口驱动程序的设备尝试映像的物理地址空间的最大兆字节数。为使这个接 口有效,需要重新启动。可以通过在 DeviceManager 中检查设备的状态来决定是否需要重新 启动。 MaximunNumberOfDevices =n 指 定 了 微 端 口 驱动 程 序 一 次能 够 支 持 的适 配 器 的 最大 数 量 。 只在 指 定 了 MaximunDeviceMemoryConfiguration 关键字并且在多监视器系统中微端口驱动程序可以是 第 2 个适配器时这个条目才指定。为使这个接口有效,需要重新启动。可以通过在 DeviceManager 中检查设备的状态来决定是否需要重新启动。 KeepExistingDriverEnabled =n 指定了是否当前的驱动程序保持有效。为保持存在的驱动程序,设置这个注册键为 1 (TRUE)。为卸载当前的驱动程序,设置这个键为 0(FALSE)。当 INF 文件编写者想使当前 的驱动程序保持有效,这个键主要在镜像驱动程序 INF 文件中使用。 1.5.2 显示器 INF 文件段 下一段仅用于图形适配器安装。关于 INF 文件更一般的信息,参见卷 1 的第三部分 Windows 2000 驱动程序开发指南第 1 章,INF 文件段和指令。 DDInstall.SoftwareSettings 段 [DDInstall.SoftwareSettings]段包含 AddReg 和/或 DelReg 指令。每个指令指向一 个分离的 INF 编写者定义的段,包含要加入或删除的注册条目。 在下例中,Addreg 指令指向命名为 ACME-1234_SoftwareDeviceSettings 的 INF 编写 者定义的加入注册段。DelReg 指令指向命名为 ACME-1234_DeleteSWSettings 的另一个 INF 编写者定义的删除注册段。 在加入注册段里,加入了 InstalledDisplayDrivers 和 CapabilityOverride 两个键, 并给出了显示的值。删除注册段显示了从注册里删除的两个键:GraphicsClocking 和