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_2,但 VirtualDiskAccessMask 參數不會設定為 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
程式庫 VirtDisk.lib
Dll VirtDisk.dll

另請參閱

關於 VHD

OpenVirtualDisk

VHD 參考