Win32 API 日本語リファレンス
ホームStorage.VirtualDiskService › IVdsPack2

IVdsPack2

COM
IID13b50bff-290a-47dd-8558-b7c58db1a71a継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

パック上に整列されたボリュームを作成するためのメソッドを提供します。

メソッド 1

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT CreateVolume2(VDS_VOLUME_TYPE type, VDS_INPUT_DISK* pInputDiskArray, INT lNumberOfDisks, DWORD ulStripeSize, DWORD ulAlign, IVdsAsync** ppAsync)

省略可能な整列パラメーターを指定して、ディスクパック内にボリュームを作成します。

typeVDS_VOLUME_TYPEin作成するボリュームの種類を示す、VDS_VOLUME_TYPE 列挙体の値です。
pInputDiskArrayVDS_INPUT_DISK*in

ボリュームを作成するディスクを示す VDS_INPUT_DISK 構造体の配列です。

注意 Windows では 1 つのボリュームに使用できるディスクは 32 台以下に制限されているため、この配列のサイズは 32 オブジェクト以下でなければなりません。
lNumberOfDisksINTinpInputDiskArray パラメーターが指す配列の要素数です。
ulStripeSizeDWORDin

新しいボリュームのストライプサイズ (バイト単位) です。

注意 種類が VDS_VT_STRIPE または VDS_VT_PARITY の場合、ストライプサイズは 65536 でなければなりません。それ以外の場合、ストライプサイズは 0 でなければなりません。
ulAlignDWORDin

ボリューム整列に使用するバイト数です。このパラメーターは省略可能で、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 です。

ppAsyncIVdsAsync**outIVdsAsync インターフェイスへのポインターです。正常に完了すると、この操作を監視および制御するための IVdsAsync インターフェイスを受け取ります。呼び出し側は、受け取ったインターフェイスの使用を終えたら解放する必要があります。インターフェイスに対して IVdsAsync::Wait メソッドが呼び出され、成功を示す HRESULT 値が返された場合、VDS_ASYNC_OUTPUT 構造体で返されたインターフェイスは、各インターフェイスポインターに対して IUnknown::Release メソッドを呼び出して解放する必要があります。ただし、Wait が失敗を示す HRESULT 値を返した場合、または WaitpHrResult パラメーターが失敗を示す HRESULT 値を受け取った場合、VDS_ASYNC_OUTPUT 構造体内のインターフェイスポインターは NULL であり、解放する必要はありません。成功または失敗の HRESULT 値は、Winerror.h で定義されている SUCCEEDED マクロおよび FAILED マクロを使用して判定できます。

戻り値

このメソッドは、E_INVALIDARGE_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) ストア内のブートオプションの更新に失敗しました。
VDS_E_ALIGN_IS_ZERO
0x80042590L
指定された整列値が 0 です。
VDS_E_ALIGN_NOT_A_POWER_OF_TWO
0x8004258FL
指定された整列値が 2 のべき乗ではありません。
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
メンバーインデックスは単調に増加し、0 から始まる必要があります。
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
プレックスインデックスは単調に増加し、0 から始まる必要があります。
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
ストライプサイズ (バイト単位) は、ストライプおよび RAID-5 のボリューム種類では 2 のべき乗でなければならず、その他のすべてのボリューム種類では 0 でなければなりません。
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
渡されたディスクのうち少なくとも 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
1 つのボリュームあたり 32 台を超えるディスクは許可されていません。
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
ボリュームのサイズが小さすぎます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。