IVdsOpenVDisk::Compact 方法 (vds.h)

[从Windows 8和Windows Server 2012开始,虚拟磁盘服务 COM 接口由 Windows 存储管理 API 取代。]

压缩虚拟磁盘以减小备份文件的物理大小。

语法

HRESULT Compact(
  [in]  COMPACT_VIRTUAL_DISK_FLAG Flags,
  [in]  ULONG                     Reserved,
  [out] IVdsAsync                 **ppAsync
);

参数

[in] Flags

一个COMPACT_VIRTUAL_DISK_FLAG枚举值,该值指定如何压缩虚拟磁盘。 必须设置为 COMPACT_VIRTUAL_DISK_FLAG_NONE。

[in] Reserved

此参数保留供系统使用。

[out] ppAsync

指向 IVdsAsync 接口的指针,该接口在成功完成后接收 IVdsAsync 接口以监视和控制此操作。 调用方必须在使用完接口后释放收到的接口。 如果在接口上调用 IVdsAsync::Wait 方法并返回成功 HRESULT 值,则必须通过在每个接口指针上调用 IUnknown::Release 方法释放VDS_ASYNC_OUTPUT结构中返回的接口。 但是,如果 Wait 返回失败的 HRESULT 值,或者如果 WaitpHrResult 参数收到失败的 HRESULT 值,则 VDS_ASYNC_OUTPUT 结构中的接口指针为 NULL,不需要释放。 可以使用 Winerror.h 中定义的 SUCCEEDEDFAILED 宏测试成功或失败的 HRESULT 值。

返回值

此方法可以返回标准 HRESULT 值,例如E_INVALIDARG或E_OUTOFMEMORY,以及 特定于 VDS 的返回值。 它还可以使用 HRESULT_FROM_WIN32 宏返回转换的系统错误代码。 错误可能源自 VDS 本身或正在使用的基础 VDS 提供程序 。 可能的返回值包括以下内容。

返回代码 说明
S_OK
该方法已成功完成。

备注

仅当虚拟磁盘处于以下状态之一时,才能压缩虚拟磁盘:

  • 分离 (脱机模式)
  • 附加并打开, (联机模式)
如果处于任何其他状态,则压缩操作将失败。

虚拟磁盘必须是可扩展 (也称为动态) 或差异虚拟磁盘。

可以安全地中断操作,并在以后重新运行。 如果操作中断并重新打开后备文件,则打开文件时,文件的大小可能会减小。

该操作可以是 CPU 密集型或 I/O 密集型操作,也可以是两者兼有,具体取决于虚拟磁盘的大小以及需要操作的未使用的块数。

此方法通过回收未使用的空间来减小虚拟磁盘的后备存储文件的大小。 如果为分离的虚拟磁盘调用此方法,则它只能回收文件中从未用于写入数据的空间。 如果为附加并以只读访问权限打开的虚拟磁盘调用它,则它能够回收曾经使用过但后来释放的空间。 为附加并使用只读访问权限打开的虚拟磁盘调用此方法可回收后备存储文件中的最大可用空间量。

要求

要求
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 vds.h
Library Uuid.lib

另请参阅

IVdsOpenVDisk