IVdsPack::CreateVolume 方法 (vds.h)
[从Windows 8和Windows Server 2012开始,虚拟磁盘服务 COM 接口由 Windows 存储管理 API 取代。]
在包中创建卷。 可以通过通过 ppAsync 参数调用 IVdsAsync::Wait 来检索新卷对象的接口指针。 返回 的 VDS_ASYNC_OUTPUT 结构包含 cv.pVolumeUnk 成员中的卷对象接口指针。
语法
HRESULT CreateVolume(
[in] VDS_VOLUME_TYPE type,
[in] VDS_INPUT_DISK *pInputDiskArray,
[in] LONG lNumberOfDisks,
[in] ULONG ulStripeSize,
[out] IVdsAsync **ppAsync
);
参数
[in] type
由 VDS_VOLUME_TYPE 枚举的卷类型。 基本磁盘上的卷只能有一个盘区,并且只有 VDS_VT_SIMPLE 标志有效。
[in] pInputDiskArray
指向 VDS_INPUT_DISK 结构的数组的指针;每个磁盘的一个结构。 磁盘只能包含在数组中一次。 必须使用数组中的所有磁盘,否则方法将失败。 调用方必须分配和初始化数组,并在调用返回时释放内存。
[in] lNumberOfDisks
参与卷的磁盘总数。
[in] ulStripeSize
如果卷已条带化,则每个条带的大小(以字节为单位)。 为VDS_VT_SIMPLE、VDS_VT_SPAN和VDS_VT_MIRROR传递零字节;VDS_VT_STRIPE和VDS_VT_PARITY为 64 千字节。
[out] ppAsync
VDS 在返回时初始化 的 IVdsAsync 接口指针的地址。 调用方必须释放 接口。 使用此指针可以取消、等待或查询操作的状态。
如果在此方法上调用 IVdsAsync::Wait 并返回成功的 HRESULT 值,则必须通过在每个接口指针上调用 IUnknown::Release 方法释放VDS_ASYNC_OUTPUT结构中返回的接口。 但是,如果 Wait 返回失败的 HRESULT 值,或者如果 Wait 的 pHrResult 参数收到失败的 HRESULT 值,则 VDS_ASYNC_OUTPUT 结构中的接口指针为 NULL,不需要释放。 可以使用 Winerror.h 中定义的 SUCCEEDED 和 FAILED 宏测试成功或失败的 HRESULT 值。
返回值
此方法可以返回标准 HRESULT 值,例如E_INVALIDARG或E_OUTOFMEMORY,以及 特定于 VDS 的返回值。 它还可以使用 HRESULT_FROM_WIN32 宏返回转换的系统错误代码。 错误可能源自 VDS 本身或正在使用的基础 VDS 提供程序 。 可能的返回值包括以下内容。
返回代码/值 | 说明 |
---|---|
|
已成功创建卷。 |
|
未收到卷到达通知。 可能需要调用 IVdsService::Refresh。 |
|
已成功创建卷,但 VDS 未能更新启动配置数据 (BCD) 存储中的启动选项。
Windows Server 2003: 启动选项存储在 x86 或 x64 系统上的 boot.ini 文件中,或者存储在 Itanium 系统上的 NVRAM 中。 |
|
指定的磁盘不属于同一个包。 |
|
LDM 服务使方法失败。 |
|
传入的盘区大小太小。 |
|
指定的磁盘数对于此操作无效。 |
|
卷的成员计数必须大于零。 |
|
成员索引必须单调递增,并且从零开始。 |
|
传入的磁盘是 CD-ROM 或 DVD 设备。 |
|
不允许对此磁盘包执行此操作。 |
|
卷的 plex 计数必须大于零。 |
|
plex 索引必须单调递增,并且从零开始。 |
|
对于条带化卷和 RAID-5 卷类型,条带大小(以字节为单位)必须为 2 的幂,对于所有其他卷类型,条带大小必须为零。 |
|
缺少指定的磁盘。 |
|
通过磁盘阵列传入的可移动驱动器中没有媒体。 |
|
其中一个磁盘上没有足够的空间。 |
|
卷类型不受支持,或者传递到 方法的可移动磁盘上已存在卷。 一个可移动磁盘只能有一个卷。 |
|
找不到至少一个传入的磁盘。 |
|
单个磁盘不能参与同一卷的多个成员或多个丛。 |
|
无法访问目标包。 |
|
调用方尝试创建其他主分区或扩展分区时,已存在 (主分区或具有扩展分区) 的主分区的最大分区数。 |
|
动态提供程序缓存已损坏。 |
|
每个卷允许的磁盘不超过 32 个。 |
|
卷大小太小。 |
注解
基本磁盘只能包含简单卷。 动态磁盘可以包含所有类型的卷,只要操作系统支持绑定操作;非服务器平台不支持容错绑定操作。 所有新创建的卷都缺少驱动器号。
在基本磁盘上,此方法创建主分区。 如果磁盘上已有三个主分区,则会创建一个扩展分区,以覆盖磁盘上剩余的最大连续可用磁盘空间范围,然后在扩展分区中创建逻辑驱动器。
一个磁盘不能参与同一卷的多个 plex;但是,单个磁盘可以用于多个卷。 一个简单的卷只有一个 VDS_INPUT_DISK 结构,而跨卷、条带卷、镜像卷和 RAID-5 卷对于每个贡献的磁盘都有一个结构。
VDS_INPUT_DISK 结构中指定的磁盘大小可以是完整磁盘或磁盘的一部分。 当两个磁盘形成镜像卷时,VDS 使用最小的磁盘来计算镜像的大小。 (提供程序策略确定在给定输入磁盘上分配的实际偏移量、长度和磁盘盘区数。) 使用 IVdsPack::QueryVolumes 方法确定所创建卷的确切大小。
若要创建具有可选对齐参数的逻辑卷,请使用 IVdsPack2::CreateVolume2 方法或使用 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment 注册表项指定对齐值(以字节为单位)。
Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008: 在基本磁盘上,CreateVolume 方法会忽略 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment 注册表项。 这是一个已知问题,正在解决。 解决方法是使用 IVdsAdvancedDisk::CreatePartition 或 IVdsCreatePartitionEx::CreatePartitionEx 方法在基本磁盘上创建分区,以便它们正确对齐。
动态分区和卷使用以下注册表项下的值进行对齐:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment
如果磁盘为 4 GB 或更大,则默认对齐方式为 1 MB;如果磁盘小于 4 GB,则默认对齐方式为 64 KB。
无论调用是否启动异步操作,实现者都必须返回指向此方法的 IVdsAsync 接口的指针。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | vds.h |
Library | Uuid.lib |