MSDN 开发


通过使用 Enhanced Write Filter 和 Device Update Agent 更新现场设备
发布日期 : 1/13/2005 | 更新日期 : 1/13/2005

Aaron Stebner
Microsoft

适用于:
Microsoft® Windows® XP Embedded

摘要:学习如何更新正在运行 Enhanced Write Filter 和 Device Update Agent 的现场中的嵌入式映像。

本页内容

简介 简介
需要什么 需要什么
配置 EWF 配置 EWF
配置 DUA 配置 DUA
生成和部署 生成和部署
使用 DUAScriptGen 根据 QFE 创建 DUS 文件 使用 DUAScriptGen 根据 QFE 创建 DUS 文件
向 DUS 文件中添加 EWF 命令 向 DUS 文件中添加 EWF 命令
编译和部署 DUP 文件 编译和部署 DUP 文件
小结 小结

简介

大多数经验丰富的 Microsoft® Windows® XP Embedded 系统生成人员和开发人员都知道如何使用 Target Designer 来生成和配置嵌入式操作系统映像,如何向映像中添加新组件,以及如何在现场重新生成/重新部署更新设备。

我们中的很多人还知道 Enhanced Write Filter (EWF) 是什么以及如何使用它对我们的嵌入式设备进行写保护。

我们中的某些人可能使用 Device Update Agent (DUA) 将单个更新推送到设备中,而无须重新生成整个映像。但是,我们中的那些这样做的人都非常了解通过 DUA 创建和部署更新所需的背景知识、时间和精力。

如果我们要使用 EWF 来使我们的设备成为只读设备,并且我们希望能够更新这些设备,而无须重新生成整个主映像并将整个映像重新部署到这些设备,那么应该怎么办呢?如果我们还希望以快速而灵活的方式完成所有工作,以便能够减少将诸如安全修补程序之类的关键修补程序(也称为快速修复工程 [QFE])应用于设备所需的周转时间,应该怎么办呢?

本月,我们将考察通过使用 EWF 配置写保护嵌入式映像,然后在映像在现场中的设备上部署并运行之后使用 DUA 迅速向该映像部署更新的整个过程。

需要什么

下面是您需要使用的工具的列表:

对于该示例,我们将创建一个包含 EWF 的设备,并且将 RAM 覆盖和 DUA 配置为对 HTTP 服务器进行轮询以查找更新脚本。首先,让我们观察一下 Target Designer 中用于设置上述每个工具的配置设置。

配置 EWF

为了配置 EWF,我们将在 Target Designer 中向运行库映像中添加下列组件:

  • Enhanced Write Filter

  • EWF 管理器控制台应用程序

  • EWF NTLDR

  • EWF 应用程序编程接口 (API)(该组件可选。)

在添加这些组件之后,我们可以单击 Enhanced Write Filter 组件以更改配置设置。我们将配置一个 RAM 覆盖以保护嵌入式映像中的 C 分区,而这恰好是 EWF 组件的默认设置。

embedded1108200401thumb

1 RAM 覆盖的 EWF 配置设置。单击缩略图查看大图像。

配置 DUA

为了配置 DUA,我们将在 Target Designer 中向嵌入式映像中添加 Device Update Agent 组件,然后单击该组件以更改配置设置。首先,在 Setup Startup and Run time Parameters for DUAgent 节中提供一个名为 c:\dua 的工作目录。

embedded1108200402thumb

2 DUA 启动和运行时参数。单击缩略图查看大图像。

接下来,单击选项以选择 Remote using HTTP 命令路径类型。这会使得一些新的文本框显示出来。让我们键入被聪明地加以命名的 HTTP 服务器 myserver 作为主机名称,然后键入路径 myduashare/script1.dup 作为命令文件的完整路径。现在,对于该示例,我们希望使用 HTTP 而不是 HTTPS 作为我们的 DUA 服务器,因此我们需要更改默认的服务器类型设置。单击链接以显示 DUA 的高级设置,然后单击 HTTP 选项。

embedded1108200403thumb

3 DUA 命令路径和高级设置。单击缩略图查看大图像。

生成和部署

既然我们已经配置了 EWF 和 DUA 设置,那么我们就可以在嵌入式运行库中添加我们需要的任何组件,解析缺少的依赖项,并且生成映像布局。

在生成完成之后,我们就可以部署我们的映像了。请记住,要在该映像生成之后部署它,我们将需要设备中存在少量的未分区空间,以便 EWF 存储有关它将保护的卷的信息以及有关要在任何系统重新启动之后运行的命令的信息。因为我们要使用 RAM 覆盖,所以 EWF 分区将只占据大约 64 KB,然而,更好的做法是确保安全,并且在设备中为 EWF 配置保留几个 MB 的可用空间。

使用 DUAScriptGen 根据 QFE 创建 DUS 文件

在将映像部署到设备之后,我们将下载 Windows XP Embedded QFE,创建一个 DUA 脚本以将其安装到现场中的设备上,然后部署更新。首先,让我们转到 Windows XP Embedded Download Center 并查找要安装的 QFE。对于该示例,我们将选择最新的 Cumulative Security Update for Internet Explorer

既然我们已经找到了要安装的 QFE,那么现在就应该使用 DUA 脚本生成器 (DUAScriptGen) 工具了。每个 Windows XP Embedded QFE 软件包都包含一个“附加信息”文档,其中含有该更新中包含的文件和注册表更改的列表。DUAScriptGen 可以用来将这些文件和注册表项转换为 DUA 脚本 (DUS) 文件。在开发计算机上第一次启动 DUAScriptGen 时将显示一个对话框,您可以在该对话框中配置 DUA 服务器设置,以便用来生成能够在嵌入式客户端/服务器配置中工作的 DUS 文件。

embedded1108200404

4 DUA 脚本生成器选项

我们将使用 Internet 信息服务 (IIS) Web 服务器来承载我们的 DUA 脚本文件,因此我们将选择轮询 HTTP 位置,并提供服务器的名称和一个虚拟目录。(这些值应当与我们先前在 Target Designer 中的 DUA 配置用户界面 [UI] 中提供的设置匹配)。

单击 OK 以打开主要的 DUAScriptGen UI。现在,我们可以下载 QFE 的发行说明 .rtf 文件,然后单击 Convert QFE to DUA 按钮以导入该发行说明文档。您将注意到 UI 中出现文件和注册表项列表。

embedded1108200405thumb

5 :导入 QFE 之后的 DUAScriptGen 主窗口。单击缩略图查看大图像。

在导入这些文件和注册表项之后,单击 Generate Script 按钮将创建 DUS 文件以便安装这些文件并更新这些注册表项。

向 DUS 文件中添加 EWF 命令

因为我们要在运行库映像中运行 EWF,所以我们需要在更新系统之前禁用 EWF,并且在完成之后重新启用 EWF。我们可以通过以下方式完成该工作:编写一个小型应用程序以实现一些 EWF API 函数,或者向 DUS 文件中添加一些命令以调用 EWF 管理器控制台应用程序。

对于该示例,让我们通过使用 Visual Notepad .NET 2003 中的 DUAScriptGen(或您喜欢的文本编辑器)打开我们刚刚创建的 DUS 文件 。您将注意到,顶部的一个部分含有一组能够从 DUA 服务器位置检索已更新的文件的 HTTPGET 命令。我们可以在第一个 httpget 命令上方插入下列命令。

// Disable EWF
EXECUTEPROCESS,,,,c:\windows\system32\ewfmgr.exe,0,c: -disable,DAYES,60000,,DASEC_REV,,,,DASEC_REV,,,,,, c:\windows\system32,1,,WinSta0\Default

// Shut down and restart the system
REBOOT,,DAREBOOTOPT_REBOOT

第一个命令将调用 ewfmgr c: -disable 以通知 EWF 在下一次重新启动之后停止保护驱动器 C,而第二个命令将告诉 DUA 重新启动设备。

但是,这里有一个微妙的窍门 — DUA 在注册表中存储有关它的状态(包括它下一次应当从 DUP 文件中运行哪个命令)的信息。操作系统将注册表存储为 c:\windows\system32\config\ 中的一组文件,并且假定我们从驱动器 C 启动。因为 EWF 在下一次重新启动之前仍然将保护 C 分区,所以 DUA 将“忘记”它已经运行了 Ewfmgr.exe 并重新启动,并且将在系统重新启动之后开始从 DUP 文件的顶部处理命令。这将导致 DUA 运行 ewfmgr c: -disable 并再次重新启动,但因为这一次 EWF 被禁用,所以 DUA 将能够在第二次重新启动之后正确地“记住”它的当前状态。

因此,添加这两个命令的最终结果是,系统将重新启动两次,但是 EWF 将被禁用,以便修补文件和注册表的工作可以通过使用 DUAScriptGen 为我们生成的命令而继续进行。

现在,要完成我们的 DUS 文件,我们需要在更新完成之后重新启用 EWF。为此,我们将需要向 DUS 文件的末尾添加下列命令。

// Re-enable EWF
EXECUTEPROCESS,,,,c:\windows\system32\ewfmgr.exe,0,c: -enable,DAYES,60000,,DASEC_REV,,,,DASEC_REV,,,,,, c:\windows\system32,1,,WinSta0\Default

// Shut down and restart the system
REBOOT,,DAREBOOTOPT_REBOOT

这里,需要重点注意以下问题:我们需要知道 DUA 如何处理 DUP 文件以便 HTTP 相应地轮询和创作我们的 DUA 脚本。在 HTTP 轮询方案中,DUA 在完成文件的处理之后不会从服务器中删除 DUP 文件。因此,非常重要的一项操作是更新满足以下条件的注册表值:它包含 DUA 将作为每个 DUA 脚本的一部分而轮询的下一个 DUP 文件的名称。在我们的方案中,DUAScriptGen 自动向 DUS 文件的末尾添加一个命令,以便为我们更新下一个脚本值。我们必须确保在 DUA 下一个脚本值的这一注册表更新命令之后放置用于重新启用 EWF 的命令。否则,DUA 将陷入查找并运行相同的初始脚本以应用该 QFE 的无限循环中。

编译和部署 DUP 文件

既然我们已经更新完 DUS 文件以便能够识别 EWF,那么我们已经准备好尝试编译 DUS 文件,以确保我们没有错误地键入任何 DUA 语法,并且为部署 QFE 做好准备。在 DUAScriptGen 中单击 Execute Compiler 按钮将为我们自动完成该任务,并且如果一切正常,则我们将看到一条消息,告诉我们 DUP 文件成功编译。DUAScriptGen 在名为 DUA_Files 的文件夹(它是用于创建 DUS 文件的位置的子目录)中创建 DUP 文件。

在我们编译 DUP 文件之后,我们只有一个步骤尚须完成 — 将 QFE 的文件解包并安装到我们的计算机上,以便 DUA 可以使用它们来修补我们的设备。我们将通过执行下列步骤来完成该工作:

  1. 将嵌入式 QFE 的可执行文件下载到我们将用于承载 DUA 更新包的 Web 服务器(在前面的示例中为“myserver”)中。

  2. 打开命令提示窗口,并用类似以下内容的命令行运行该可执行文件:Q867801_xpe_sp2_x86_enu.exe /x:c:\temp (或其他任何本地文件夹名称)— 这会为我们将该软件包中的文件提取到某个文件夹结构中。

  3. 打开文件夹 c:\temp,并且将 rep 文件夹中的所有文件复制到我们先前在 Target Designer 中和我们的 DUAScriptGen 配置设置中使用的 myduashare 文件夹中。

现在,我们可以将 DUP 文件复制到 Web 服务器上的 myduashare 文件夹中,并且将它与放在我们从 rep 文件夹中复制的那组文件放在一起的旁边;同时,请确保对文件 script1.dup 进行命名,以使其与我们先前在 Target Designer 中为 DUA 设置提供的名称相匹配。我们的设备将在它们下一次轮询 HTTP 位置时查找该 DUP 文件,并继续禁用 EWF、应用 QFE 并重新启用 EWF。

最后,我建议您在 Windows XP Embedded 数据库服务器上安装 Windows XP Embedded QFE 软件包,以便您在将来生成的任何映像都将包含已更新的文件和注册表项。您可以通过双击 QFE 可执行软件包并执行相应的步骤来完成该工作。

小结

在该练习中,我们考察了如何用 RAM 覆盖配置 EWF,以及如何设置 DUA 以便可以在现场修补设备。然后,我们使用很出色的 DUAScriptGen 实用工具创建了一个 DUA 脚本,以便将 Windows XP Embedded QFE 应用于运行 EWF 和 DUA 的设备,而无须干预或访问设备本身。

转到原英文页面

Page view tracker