(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
參與磁碟區的磁碟總數。
[in] ulStripeSize
如果磁碟區已等量,每個等量的大小會以位元組為單位。 針對 VDS_VT_SIMPLE、 VDS_VT_SPAN 和 VDS_VT_MIRROR 傳入零個字節;64 KB 用於 VDS_VT_STRIPE 和 VDS_VT_PARITY。
[out] ppAsync
IVdsAsync 介面指標的位址,VDS 會在傳回時初始化。 呼叫端必須釋放 介面。 使用此指標來取消、等候或查詢作業的狀態。
如果您在此方法上呼叫 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 索引必須以單調方式增加,並以零開始。 |
|
以位元組為單位的等量大小必須是 2 的等量和 RAID-5 磁碟區類型的電源,而且所有其他磁碟區類型都必須為零。 |
|
遺漏指定的磁碟。 |
|
在透過磁碟數位列傳入的抽取式磁碟驅動器中沒有媒體。 |
|
其中一個磁碟上沒有足夠的空間。 |
|
不支援磁碟區類型,或磁碟區已存在於傳遞至 方法的卸載式磁碟上。 卸除式磁碟只能有一個磁碟區。 |
|
找不到至少一個傳入的磁碟。 |
|
單一磁碟無法參與相同磁碟區的多個成員或多個Plex。 |
|
無法存取目標套件。 |
|
呼叫端嘗試建立其他主要分割區或擴充分割區時,已存在具有擴充分割區) 的主要分割區 (數目上限。 |
|
動態提供者快取已損毀。 |
|
每個磁碟區不允許超過 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 |
程式庫 | Uuid.lib |