CreateVirtualDisk 函数 (virtdisk.h)

使用默认参数或使用现有虚拟磁盘或物理磁盘 (VHD) 映像文件创建虚拟硬盘。

语法

DWORD CreateVirtualDisk(
  [in]           PVIRTUAL_STORAGE_TYPE           VirtualStorageType,
  [in]           PCWSTR                          Path,
  [in]           VIRTUAL_DISK_ACCESS_MASK        VirtualDiskAccessMask,
  [in, optional] PSECURITY_DESCRIPTOR            SecurityDescriptor,
  [in]           CREATE_VIRTUAL_DISK_FLAG        Flags,
  [in]           ULONG                           ProviderSpecificFlags,
  [in]           PCREATE_VIRTUAL_DISK_PARAMETERS Parameters,
  [in, optional] LPOVERLAPPED                    Overlapped,
  [out]          PHANDLE                         Handle
);

参数

[in] VirtualStorageType

指向包含所需磁盘类型和供应商信息的 VIRTUAL_STORAGE_TYPE 结构的指针。

[in] Path

指向表示新虚拟磁盘映像文件路径的有效字符串的指针。

[in] VirtualDiskAccessMask

打开新创建的虚拟磁盘文件时要使用的 VIRTUAL_DISK_ACCESS_MASK 值。 如果将 Parameters 参数的 Version 成员设置为 CREATE_VIRTUAL_DISK_VERSION_2则只能指定 VIRTUAL_DISK_ACCESS_NONE (0) 值。

[in, optional] SecurityDescriptor

指向要应用于虚拟磁盘映像文件的 SECURITY_DESCRIPTOR 的可选指针。 如果此参数为 NULL,则将使用父目录的安全描述符。

[in] Flags

创建标志,必须是 CREATE_VIRTUAL_DISK_FLAG 枚举的有效组合。

[in] ProviderSpecificFlags

特定于要创建的虚拟磁盘类型的标志。 如果不需要,可以为零。

[in] Parameters

指向包含创建参数数据的有效 CREATE_VIRTUAL_DISK_PARAMETERS 结构的指针。

[in, optional] Overlapped

如果需要异步操作,则为指向有效 OVERLAPPED 结构的可选指针。

[out] Handle

指向表示新创建的虚拟磁盘的句柄对象的指针。

返回值

如果函数成功,则返回值为 ERROR_SUCCESS,Handle 参数包含指向新虚拟磁盘对象的有效指针。

如果函数失败,则返回值为错误代码, 并且 Handle 参数的值未定义。 有关详细信息,请参阅 系统错误代码

注解

如果 CreateVirtualDisk 函数失败,错误代码值为 ERROR_INVALID_PARAMETER,原因可能是以下任一情况造成的:

  • VirtualStorageType 参数为 NULL
  • Parameters 参数为 NULL
  • Parameters 参数的 Version 成员未设置为 CREATE_VIRTUAL_DISK_VERSION_1CREATE_VIRTUAL_DISK_VERSION_2
  • Parameters 参数的 Version 成员设置为 CREATE_VIRTUAL_DISK_VERSION_2VirtualDiskAccessMask 参数未设置为 VIRTUAL_DISK_ACCESS_NONE
  • Parameters 参数的 BlockSizeInBytes 成员未设置为 CREATE_VIRTUAL_DISK_PARAMETERS_DEFAULT_BLOCK_SIZE ( 0) 、0x80000 (512 KB) 或0x200000 (2 MB) 。
  • Parameters 参数的 MaximumSize 成员小于 3 MB。
  • Parameters 参数的 MaximumSize 成员与 SectorSizeInBytes 成员的值不一致。
  • VirtualDiskAccessMask 参数设置为 值 (VirtualDiskAccessMask & ~VIRTUAL_DISK_ACCESS_ALL)
  • Flags 参数大于 CREATE_VIRTUAL_DISK_FLAG_FULL_PHYSICAL_ALLOCATION
包含新虚拟磁盘映像文件的主机卷无法压缩或对 EFS 进行加密。

创建各种类型的虚拟磁盘时,建议使用以下创建参数组合:

  • 应指定 CREATE_VIRTUAL_DISK_FLAG_FULL_PHYSICAL_ALLOCATION 标志。
  • 不应指定 ParentPath
  • 如果需要,可以指定 SourcePath
  • 不应指定 CREATE_VIRTUAL_DISK_FLAG_FULL_PHYSICAL_ALLOCATION 标志。
  • 不应指定 ParentPath
  • 如果需要,可以指定 SourcePath
  • 不应指定 CREATE_VIRTUAL_DISK_FLAG_FULL_PHYSICAL_ALLOCATION 标志。
  • 应指定 ParentPath
  • 不应指定 SourcePath
CreateVirtualDisk 函数还可用作将一种类型的虚拟磁盘转换为另一种虚拟磁盘或将物理磁盘转换为虚拟磁盘的机制。 这是通过使用 CREATE_VIRTUAL_DISK_PARAMETERS 结构的 SourcePath 成员使用源磁盘中的块数据预填充新虚拟磁盘来实现的。

要求

要求
最低受支持的客户端 Windows 7
最低受支持的服务器 Windows Server 2008 R2
目标平台 Windows
标头 virtdisk.h
Library VirtDisk.lib
DLL VirtDisk.dll

另请参阅

关于 VHD

OpenVirtualDisk

VHD 参考