IVdsPack::CreateVolume メソッド (vds.h)

[Windows 8とWindows Server 2012以降、仮想ディスク サービス COM インターフェイスは Windows Storage Management API に置き換えられます。

パック内にボリュームを作成します。 新しい ボリューム オブジェクト のインターフェイス ポインターを取得するには、 IVdsAsync::Wait through the ppAsync パラメーターを呼び出します。 返される 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によって列挙されたボリュームの種類。 ベーシック ディスク上のボリュームはエクステントを 1 つだけ持ち、 VDS_VT_SIMPLE フラグのみが有効です。

[in] pInputDiskArray

VDS_INPUT_DISK構造体の配列へのポインター。ディスクごとに 1 つの構造体。 ディスクを配列に含めることができるのは 1 回だけです。 配列内のすべてのディスクを使用する必要があります。または、 メソッドが失敗します。 呼び出し元は、配列を割り当てて初期化し、呼び出しが返されたときにメモリを解放する必要があります。

[in] lNumberOfDisks

ボリュームに寄与するディスクの合計数。

メモ VDS では、パリティ (RAID-5) ボリュームでスパン、ストライプ、ストライプに 32 ディスクの制限が課されます。
 

[in] ulStripeSize

ボリュームがストライピングされている場合は、各ストライプのサイズ (バイト単位)。 VDS_VT_SIMPLE、VDS_VT_SPANVDS_VT_MIRRORの場合は 0 バイトで渡します。VDS_VT_STRIPEVDS_VT_PARITYの場合は 64 キロバイト。

[out] ppAsync

戻り時に VDS が初期化する IVdsAsync インターフェイス ポインターのアドレス。 呼び出し元はインターフェイスを解放する必要があります。 操作の状態をキャンセル、待機、またはクエリするには、このポインターを使用します。

このメソッドで IVdsAsync::Wait を呼び出し、成功した HRESULT 値が返された場合は、各インターフェイス ポインターで IUnknown::Release メソッドを呼び出して、VDS_ASYNC_OUTPUT構造体で返されるインターフェイスを解放する必要があります。 ただし、Wait がエラー HRESULT 値を返す場合、または WaitpHrResult パラメーターがエラー HRESULT 値を受け取る場合、VDS_ASYNC_OUTPUT構造体のインターフェイス ポインターは NULL であり、解放する必要はありません。 成功または失敗の HRESULT 値をテストするには、Winerror.h で定義 されている SUCCEEDED マクロと FAILED マクロを使用します。

戻り値

このメソッドは、E_INVALIDARGやE_OUTOFMEMORYなどの標準の HRESULT 値と、 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: ブート オプションは、itanium システムの x86 または x64 システムまたは NVRAM の boot.ini ファイルに格納されます。

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
ボリュームのメンバー数は、0 より大きくする必要があります。
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
ボリュームのプレックス数は、0 より大きくする必要があります。
VDS_E_INVALID_PLEX_ORDER
0x80042523L
plex インデックスは単調に増加し、ゼロから始まる必要があります。
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
ストライプ・サイズ (バイト単位) は、ストライプ・ボリューム・タイプと RAID-5 ボリューム・タイプの場合は 2 の累乗でなければなりません。また、他のすべてのボリューム・タイプの場合はゼロでなければなりません。
VDS_E_MISSING_DISK
0x80042454L
指定されたディスクがありません。
VDS_E_NO_MEDIA
0x80042412L
ディスク アレイを介して渡されるリムーバブル ドライブにはメディアがありません。
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
ディスクの 1 つに十分な領域がありません。
VDS_E_NOT_SUPPORTED
0x80042400L
ボリュームの種類がサポートされていないか、 メソッドに渡されたリムーバブル ディスクにボリュームが既に存在します。 リムーバブル ディスクにはボリュームを 1 つだけ含めることができます。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
渡されたディスクの少なくとも 1 つが見つかりません。
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
1 つのディスクが、同じボリュームの複数のメンバーまたは複数のプレックスに寄与することはできません。
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) ボリュームを使用して、単純、スパン、ストライプ、ミラー化、またはストライプの新しいボリュームを作成します。 シンプルボリュームとスパンボリュームには、1つのプレックスと1つのメンバーがあります。 ストライプ ボリュームと RAID-5 ボリュームには、複数の列とメンバーがあります。 ミラー化ボリュームは、複数のプレックスで構成されます。

ベーシック ディスクには、単純なボリュームのみを含めることができます。 ダイナミック ディスクには、オペレーティング システムがバインド操作をサポートしている限り、すべての種類のボリュームを含めることができます。サーバー以外のプラットフォームでは、フォールト トレラント バインディング操作はサポートされていません。 新しく作成されたすべてのボリュームにドライブ文字がありません。

このメソッドは、ベーシック ディスク上にプライマリ パーティションを作成します。 ディスクに既に 3 つのプライマリ パーティションがある場合は、ディスク上に残っている最大の連続する空きディスク領域をカバーする拡張パーティションを作成し、拡張パーティション内に論理ドライブを作成します。

1 つのディスクが同じボリュームの複数のプレックスに寄与することはできません。ただし、1 つのディスクが複数のボリュームに影響を与える可能性があります。 単純ボリュームの VDS_INPUT_DISK 構造は 1 つだけですが、スパン、ストライプ、ミラー化、RAID-5 の各ボリュームには、コントリビューションディスクごとに 1 つの構造があります。

VDS_INPUT_DISK構造体で指定されたディスクのサイズは、ディスク全体またはディスクの一部にすることができます。 2 つのディスクがミラーボリュームを形成する場合、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

こちらもご覧ください

IVdsAsync

IVdsAsync::Wait

IVdsPack

IVdsPack2::CreateVolume2

IVdsPack::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE