IVdsPack2
COM公式ドキュメント
パック上に整列されたボリュームを作成するためのメソッドを提供します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
省略可能な整列パラメーターを指定して、ディスクパック内にボリュームを作成します。
| type | VDS_VOLUME_TYPE | in | 作成するボリュームの種類を示す、VDS_VOLUME_TYPE 列挙体の値です。 |
| pInputDiskArray | VDS_INPUT_DISK* | in | ボリュームを作成するディスクを示す VDS_INPUT_DISK 構造体の配列です。 注意 Windows では 1 つのボリュームに使用できるディスクは 32 台以下に制限されているため、この配列のサイズは 32 オブジェクト以下でなければなりません。
|
| lNumberOfDisks | INT | in | pInputDiskArray パラメーターが指す配列の要素数です。 |
| ulStripeSize | DWORD | in | 新しいボリュームのストライプサイズ (バイト単位) です。 注意 種類が VDS_VT_STRIPE または VDS_VT_PARITY の場合、ストライプサイズは 65536 でなければなりません。それ以外の場合、ストライプサイズは 0 でなければなりません。
|
| ulAlign | DWORD | in | ボリューム整列に使用するバイト数です。このパラメーターは省略可能で、0 を指定できます。0 を指定した場合、サーバーはボリュームを作成するディスクのサイズに応じて整列値を決定します。 Windows 7、Windows Server 2008 R2、Windows Vista、および Windows Server 2008: ベーシックディスクでは、CreateVolume2 メソッドはこのパラメーターおよび 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 です。 |
| ppAsync | IVdsAsync** | out | IVdsAsync インターフェイスへのポインターです。正常に完了すると、この操作を監視および制御するための IVdsAsync インターフェイスを受け取ります。呼び出し側は、受け取ったインターフェイスの使用を終えたら解放する必要があります。インターフェイスに対して IVdsAsync::Wait メソッドが呼び出され、成功を示す HRESULT 値が返された場合、VDS_ASYNC_OUTPUT 構造体で返されたインターフェイスは、各インターフェイスポインターに対して IUnknown::Release メソッドを呼び出して解放する必要があります。ただし、Wait が失敗を示す HRESULT 値を返した場合、または Wait の pHrResult パラメーターが失敗を示す HRESULT 値を受け取った場合、VDS_ASYNC_OUTPUT 構造体内のインターフェイスポインターは NULL であり、解放する必要はありません。成功または失敗の HRESULT 値は、Winerror.h で定義されている SUCCEEDED マクロおよび FAILED マクロを使用して判定できます。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返す場合もあります。エラーは、VDS 自体、または使用されている基になる VDS プロバイダー から発生する可能性があります。返される可能性のある値には次のものがあります。
| 戻り値/コード | 説明 |
|---|---|
| ボリュームが正常に作成されました。 | |
|
ボリュームの到着通知を受信しませんでした。IVdsService::Refresh の呼び出しが必要になる場合があります。 |
|
ボリュームは正常に作成されましたが、VDS はブート構成データ (BCD) ストア内のブートオプションの更新に失敗しました。 |
|
指定された整列値が 0 です。 |
|
指定された整列値が 2 のべき乗ではありません。 |
|
指定されたディスクが同じパックに属していません。 |
|
LDM サービスがメソッドに失敗しました。 |
|
渡されたエクステントサイズが小さすぎます。 |
|
指定されたディスクの数がこの操作に対して有効ではありません。 |
|
ボリュームのメンバー数は 0 より大きくなければなりません。 |
|
メンバーインデックスは単調に増加し、0 から始まる必要があります。 |
|
渡されたディスクが CD-ROM または DVD デバイスです。 |
|
この操作はこのディスクパックでは許可されていません。 |
|
ボリュームのプレックス数は 0 より大きくなければなりません。 |
|
プレックスインデックスは単調に増加し、0 から始まる必要があります。 |
|
ストライプサイズ (バイト単位) は、ストライプおよび RAID-5 のボリューム種類では 2 のべき乗でなければならず、その他のすべてのボリューム種類では 0 でなければなりません。 |
|
指定されたディスクが欠落しています。 |
|
ディスク配列を通じて渡されたリムーバブルドライブにメディアがありません。 |
|
いずれかのディスクに十分な空き領域がありません。 |
|
このボリューム種類はサポートされていません。 |
|
渡されたディスクのうち少なくとも 1 台が見つかりません。 |
|
1 台のディスクが、同じボリュームの複数のメンバーまたは複数のプレックスに寄与することはできません。 |
|
対象のパックにアクセスできません。 |
|
呼び出し側が追加のプライマリパーティションまたは拡張パーティションを作成しようとしたときに、パーティション (プライマリパーティション、または拡張パーティションを含むプライマリパーティション) の最大数が 既に存在しています。 |
|
ダイナミックプロバイダーのキャッシュが破損しています。 |
|
1 つのボリュームあたり 32 台を超えるディスクは許可されていません。 |
|
ボリュームのサイズが小さすぎます。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVdsPack2 "{13B50BFF-290A-47DD-8558-B7C58DB1A71A}" #usecom global IVdsPack2 IID_IVdsPack2 "{}" #comfunc global IVdsPack2_CreateVolume2 3 int,var,int,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IVdsPack2 "{13B50BFF-290A-47DD-8558-B7C58DB1A71A}" #usecom global IVdsPack2 IID_IVdsPack2 "{}" #comfunc global IVdsPack2_CreateVolume2 3 int,sptr,int,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。