(vds.h) IVdsPack::CreateVolume 方法

[從 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

參與磁碟區的磁碟總數。

注意 VDS 會對跨越、等量分割和等量分割施加 32 磁碟限制, (RAID-5) 磁碟區。
 

[in] ulStripeSize

如果磁碟區已等量,每個等量的大小會以位元組為單位。 針對 VDS_VT_SIMPLEVDS_VT_SPANVDS_VT_MIRROR 傳入零個字節;64 KB 用於 VDS_VT_STRIPEVDS_VT_PARITY

[out] ppAsync

IVdsAsync 介面指標的位址,VDS 會在傳回時初始化。 呼叫端必須釋放 介面。 使用此指標來取消、等候或查詢作業的狀態。

如果您在此方法上呼叫 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) 存放區中的開機選項。

Windows Server 2003: 開機選項會儲存在 x86 或 x64 系統上的 boot.ini 檔案中,或 Itanium 系統上的 NVRAM。

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
以位元組為單位的等量大小必須是 2 的等量和 RAID-5 磁碟區類型的電源,而且所有其他磁碟區類型都必須為零。
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
單一磁碟無法參與相同磁碟區的多個成員或多個Plex。
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
磁碟區大小太小。

備註

注意 此方法無法用來在卸除式磁碟上建立磁碟區。
 
呼叫端會使用這個方法,在目前套件中建立新的簡單、跨越、等量、鏡像或等量與同位 (RAID-5) 磁碟區。 簡單且跨越的磁碟區只有一個 plex 和一個成員。 等量和RAID-5磁碟區有多個數據行和成員。 鏡像磁碟區是由多個叢集所組成。

基本磁碟只能包含簡單的磁碟區。 只要操作系統支援系結作業,動態磁碟就可以包含所有類型的磁碟區;非伺服器平台不支援容錯系結作業。 所有新建立的磁碟區都缺少驅動器號。

在基本磁碟上,此方法會建立主要分割區。 如果磁碟上已經有三個主要分割區,它會建立擴充分割區,以涵蓋磁碟上剩餘的最大連續可用磁碟空間範圍,然後在擴充磁碟內建立邏輯磁碟驅動器。

磁碟無法參與相同磁碟區的一個以上的 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::CreatePartitionIVdsCreatePartitionEx::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
程式庫 Uuid.lib

另請參閱

IVdsAsync

IVdsAsync::Wait

IVdsPack

IVdsPack2::CreateVolume2

IVdsPack::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE