帮忙翻译这个文章(英—中)

帮忙翻译这个文章(英—中),第1张

摘要

本文将详细介绍如何卸除支持 EWF 的 Hibernate Once/Resume Many 配置中的卷。卸除 Hibernate Once/Resume Many 配置中的卷这一功能允许您维护一个或多个不受 Hibernate Once/Resume Many 配置中的 EWF 保护的分区。

本页内容

简介

保护 Hibernate Once/Resume Many 配置中的多个卷

在休眠之前卸除卷

以编程方式卸除卷

更多信息

简介

使用带有 Service Pack 2 Hibernate Once/Resume Many 功能的 Microsoft® Windows® Embedded 可保护您的系统免于受到不希望的写入访问并提供更快的启动。但是,在 Hibernate Once/Resume Many 环境中,系统中的所有卷必须受到 Enhanced Write Filter (EWF) 保护。

本白皮书将讨论如何卸除 Hibernate Once/Resume Many 环境中的卷,以允许您配置不受 EWF 保护的可写入分区。

这是 EWF 的高级配置,并要求透彻理解 EWF。

返回页首

保护 Hibernate Once/Resume Many 配置中的多个卷

如果要为运行时图像实现 Hibernate Once/Resume Many 配置,则系统中的所有固定磁盘必须由 Enhanced Write Filter (EWF) 来保护。这是因为文件系统在系统内存中缓存每卷的相关信息。当您创建休眠文件时,该文件将包括系统中所有卷的相关缓存信息。这并不能保证应用程序不具备来自卸除卷的缓存状态信息。基于 Windows XP Embedded 的系统的设计人员负责监视应用程序,并验证它们不包含有关卷的任何状态信息。

当系统从休眠文件中恢复时,任何有关系统中卷的缓存信息都会被加载。如果某卷不受 EWF 的保护,则该未受保护的卷的内容可以被更改。如果未在休眠文件中更新对某卷进行的更改,则该卷的内容将会有被破坏的风险。因此,Hibernate Once/Resume Many 系统中的所有卷都必须受 EWF 保护。

为了创建不受 Hibernate Once/Resume Many 配置中的 EWF 保护的分区,您必须在创建休眠文件之前卸除该分区。

返回页首

在休眠之前卸除卷

要确保在创建休眠文件之前清除某卷的写入缓存,您必须卸除该卷。在卸除卷后,系统内存中该卷的写入缓存会被刷新。在刷新内存中卷的写入缓存内容之后,就可以安全地创建休眠文件。通过卸除不想保护的任何卷,您可以确保系统中的任何写入缓存数据不会被写入休眠文件。

从休眠文件启动系统时,不会加载有关卸除的卷的任何信息。每次从休眠文件启动系统时,系统都会重新发现其他的卷。因为没有有关从休眠文件加载的卷的信息,所以您可以安全地写入一个未受保护的卷。

为了卸除卷,你可以创建要锁定和卸除该卷的应用程序,然后,创建休眠文件。

返回页首

以编程方式卸除卷

要锁定和卸除某卷,您必须创建调用 DeviceIoControl 函数的应用程序。该函数将控制代码直接发送到文件系统。通过将 FSCTL_LOCK_VOLUME and FSCTL_DISMOUNT_VOLUME 传递至该函数,您可以在创建休眠文件前锁定和卸除该卷。

使用以下程序流程锁定和卸除卷,然后休眠系统。应用程序还必须支持在从休眠文件启动系统时解除卷锁定。

1.

创建应用程序以锁定和卸除您不希望由 EWF 保护的卷。使用带有 dwIoControlCode 参数 FS_LOCK_VOLUME 的 DeviceIoControl 函数。这将锁定该卷。如果在调用该函数时卷上有一个打开的文件,则该卷的锁定会失败。通过在卸除该卷前将其锁定,您可以确保完全卸除该卷,例如:

DeviceIoControl(

hDevice,

FSCTL_LOCK_VOLUME,

NULL,

0,

NULL,

0,

&cbReturned,

NULL

)

有关更多信息,请参阅 MSDN 库中的DeviceIOControl 和 FSCTL_LOCK_VOLUME。

2.

锁定该卷后,就可以卸除该卷了。在您的应用程序中,调用带有 dwIoControlCode 参数 FSCTL_DISMOUNT_VOLUME 的 DeviceIoControl 函数来卸除该卷。该参数会将该卷从文件系统中卸除。如果在卸除该卷之前未将其锁定,则会使任何打开的文件无效并强制进行卷卸除。

卸除卷后,写入缓存中的任何有关该卷的信息都会被刷新,您可以安全地编写休眠文件了。

例如,调用带有以下值的 DeviceIoControl 函数:

DeviceIoControl( hDevice, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, &cbReturned, NULL )

有关更多信息,请参阅 MSDN 库中的 DeviceIOControl 和 FSCTL_DISMOUNT_VOLUME。

3.

卸除该卷后,您就可以安全地创建休眠文件并关闭系统了。您可以使用 Windows XP Embedded 附带的功能强大的管理函数,例如:

XPE_Hibernate(

bForceState

)

为了使用功能强大的管理函数,您的运行时图像需要以下文件:Xpepm.dll、Xpepm.lib 以及 Xpepm.h。所有这三个文件均位于产品介质 Disk 1 上的 VALUEADD\MSFT\XPEPM 文件夹中。

有关更多信息,请参阅 Power Management APIs。

4.

系统休眠后,启动系统。系统从休眠文件中恢复。

5.

要允许系统重新发现该卷,必须首先解除该卷的锁定。使用带有 dwIoControlCode 参数 FS_LOCK_VOLUME 的 DeviceIoControl 函数。这会解除该卷的锁定。

DeviceIoControl(

hDevice,

FSCTL_UNLOCK_VOLUME,

NULL,

0,

NULL,

0,

&cbReturned,

NULL

)

有关更多信息,请参阅 MSDN 库中的 DeviceIOControl 和 FSCTL_UNLOCK_VOLUME。

在系统启动之后,必须立即解除该卷的锁定。

该卷解锁之后,系统应当自动重新发现该卷并使其可访问。因为休眠文件不包括任何有关该卷的信息,所以您必须在每次重新启动时解除该卷的锁定。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11904084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存