IVdsPack2::CreateVolume2 方法 (vds.h)

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

使用可选对齐参数在磁盘包中创建卷。

语法

HRESULT CreateVolume2(
  [in]  VDS_VOLUME_TYPE type,
  [in]  VDS_INPUT_DISK  *pInputDiskArray,
  [in]  LONG            lNumberOfDisks,
  [in]  ULONG           ulStripeSize,
  [in]  ULONG           ulAlign,
  [out] IVdsAsync       **ppAsync
);

参数

[in] type

VDS_VOLUME_TYPE枚举中的值,指示要创建的卷的类型。

[in] pInputDiskArray

VDS_INPUT_DISK结构的数组,这些结构指示要创建卷的磁盘。

注意 此数组的大小必须为 32 个或更小的对象,因为 Windows 施加了一个限制,即单个卷的磁盘数不能超过 32 个。
 

[in] lNumberOfDisks

pInputDiskArray 参数指向的数组中的元素数。

[in] ulStripeSize

新卷的条带大小(以字节为单位)。

注意 如果类型为VDS_VT_STRIPE或VDS_VT_PARITY,则条带大小必须为 65536;否则,条带大小必须为 0。
 

[in] ulAlign

卷对齐的字节数。 此参数是可选的,可以为零。 如果指定零,服务器将根据创建卷的磁盘大小确定对齐值。

Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008: 在基本磁盘上, CreateVolume2 方法忽略此参数和 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment 注册表项。 这是一个已知问题,正在解决。 解决方法是使用 IVdsAdvancedDisk::CreatePartitionIVdsCreatePartitionEx::CreatePartitionEx 方法在基本磁盘上创建分区,以便它们正确对齐。动态分区和卷使用以下注册表项下的值进行对齐:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment

如果磁盘为 4 GB 或更大,则默认对齐方式为 1 MB;如果磁盘小于 4 GB,则默认对齐方式为 64 KB。

[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
已成功创建卷。
VDS_S_NO_NOTIFICATION
0x00042517L
未收到卷到达通知。 可能需要调用 IVdsService::Refresh
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
已成功创建卷,但 VDS 未能更新启动配置数据 (BCD) 存储中的启动选项。
VDS_E_ALIGN_IS_ZERO
0x80042590L
指定的对齐方式为零。
VDS_E_ALIGN_NOT_A_POWER_OF_TWO
0x8004258FL
指定的对齐方式不是 2 的幂。
VDS_E_DISK_NOT_FOUND_IN_PACK
0x8004252DL
指定的磁盘不属于同一个包。
VDS_E_DMADMIN_METHOD_CALL_FAILED
0x80042420L
LDM 服务失败的方法。
VDS_E_EXTENT_SIZE_LESS_THAN_MIN
0x80042433L
传入的盘区大小太小。
VDS_E_INVALID_DISK_COUNT
0x80042526L
指定的磁盘数对于此操作无效。
VDS_E_INVALID_MEMBER_COUNT
0x80042522L
卷的成员计数必须大于零。
VDS_E_INVALID_MEMBER_ORDER
0x80042524L
成员索引必须单调递增,并且从零开始。
VDS_E_INVALID_OPERATION
0x80042415L
传入的磁盘是 CD-ROM 或 DVD 设备。
VDS_E_INVALID_PACK
0x8004251AL
不允许对此磁盘包执行此操作。
VDS_E_INVALID_PLEX_COUNT
0x80042521L
卷的 plex 计数必须大于零。
VDS_E_INVALID_PLEX_ORDER
0x80042523L
plex 索引必须单调递增,并且从零开始。
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
对于条带化卷和 RAID-5 卷类型,条带大小(以字节为单位)必须为 2 的幂,对于所有其他卷类型,条带大小必须为零。
VDS_E_MISSING_DISK
0x80042454L
缺少指定的磁盘。
VDS_E_NO_MEDIA
0x80042412L
通过磁盘阵列传入的可移动驱动器中没有媒体。
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
其中一个磁盘上没有足够的空间。
VDS_E_NOT_SUPPORTED
0x80042400L
不支持卷类型。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
找不到至少一个传入的磁盘。
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
单个磁盘不能参与同一卷的多个成员或多个丛。
VDS_E_PACK_OFFLINE
0x80042444L
无法访问目标包。
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
当调用方尝试创建其他主分区或扩展分区时,已存在 (主分区或具有扩展分区) 的主分区的最大分区数。
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
动态提供程序缓存已损坏。
VDS_E_VOLUME_DISK_COUNT_MAX_EXCEEDED
0x80042529L
每个卷不允许超过 32 个磁盘。
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
卷大小太小。

要求

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

另请参阅

IVdsPack2

IVdsPack::CreateVolume