IVdsVolume::Extend メソッド (vds.h)

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

各プレックスの各メンバーにディスク エクステントを追加して、現在のボリュームのサイズを拡張します。

構文

HRESULT Extend(
  [in]  VDS_INPUT_DISK *pInputDiskArray,
  [in]  LONG           lNumberOfDisks,
  [out] IVdsAsync      **ppAsync
);

パラメーター

[in] pInputDiskArray

VDS_INPUT_DISK構造体の配列へのポインター。ディスクごとに 1 つの構造体。

メモ ボリュームにメンバーが 1 つのみ plex が 1 つしかない場合を除き、呼び出し元は Extend メソッドと組み合わせて既定のメンバー インデックスを使用しないでください。
 

[in] lNumberOfDisks

ボリューム内のディスクの合計数。 ボリュームのプレックスにボリュームを拡張するのに十分な領域が含まれている場合、呼び出し元は 0 を渡すことができます。 pInputDiskArray はNULL である必要があります。

[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_E_CANNOT_EXTEND
0x8004240EL
ボリューム上のファイル システムが操作をサポートしていないため、ボリュームを拡張できません。
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
ボリュームを拡張するのに十分な領域がありません。
VDS_E_VOLUME_NOT_HEALTHY
0x8004243EL
ボリュームが正常ではありません。

解説

この方法では、同じディスク上の単純なボリュームを拡張するか、ボリュームを複数のディスクに拡張することによってスパン ボリュームを作成します。 呼び出し元はベーシック ディスク上のボリュームを拡張できますが、ディスクエクステントはボリュームと連続している必要があります。

VDS は、拡張ボリューム サイズに合わせてファイル システムを自動的に拡張します。 ファイル システムはこの操作をサポートしている必要があります。 VDS は、呼び出し元が使用するエクステントの指定に失敗した場合、ボリュームではなくファイル システムを拡張します。

拡張操作と 圧縮 操作は、NTFS ボリュームと RAW ボリュームでのみサポートされます。

VDS では、ボリュームを拡張するときに次の規則が適用されます。

  • 単純でスパンされたプレックスタイプの場合、VDSは、エクステントが同じディスク上にあるかどうかにかかわらず、別のプレックスにまだ寄与していないディスクエクステントでplexの唯一のメンバーを拡張します。 VDS では、呼び出し元によって指定された順序でディスク エクステントが使用され、エクステントのメンバー インデックスは無視されます。 ベーシック ディスク上の場合を除き、VDS は、plex の唯一のメンバーを、同じディスクまたは別のディスク上の任意のディスク エクステントで拡張できます。
  • パリティ プレックス型のストライプとストライプの場合、VDS は次のように plex のメンバーにエクステントを割り当てます。
    • エクステントは、呼び出し元によって指定されたメンバー インデックスに移動します。
    • 呼び出し元がメンバー ID を指定できなかった場合、エクステントは同じディスクを占有するメンバー インデックスに移動します。
    VDS では、同じディスク上の複数のメンバーにエクステントが割り当てられることはありません。 呼び出し元は、すべてのエクステントにメンバーを指定するか、または指定しないかのメンバーを指定する必要があります。呼び出し元は、あるエクステントにメンバーを指定できず、他のエクステントには指定できません。
呼び出し元が pInputDiskArrayNULL を渡し、lNumberOfDisks に 0 を渡すと、VDS は非同期オブジェクトのS_FALSEを返し、 メソッドのS_OKを返します。 この場合、 S_OK は VDS が操作を開始したが、操作は同期的であることを示します。

実装者は、呼び出しが非同期操作を開始するかどうかに関係なく、このメソッドの IVdsAsync インターフェイスへのポインターを返す必要があります。

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー vds.h
Library Uuid.lib

関連項目

IVdsAsync

IVdsAsync::Wait

IVdsVolume

IVdsVolumeShrink::Shrink

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK