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

IVdsSubSystem

COM
IID6fcee2d3-6d90-4f91-80e2-a5c7caaca9d8継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IVdsSubSystem インターフェース (vdshwprv.h) は、サブシステムに対するクエリ操作および構成操作を実行するためのメソッドを提供します。

メソッド 12

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

vtbl 3 HRESULT GetProperties(VDS_SUB_SYSTEM_PROP* pSubSystemProp)

IVdsSubSystem::GetProperties (vdshwprv.h) メソッドは、サブシステムのプロパティを返します。

pSubSystemPropVDS_SUB_SYSTEM_PROP*out呼び出し元が割り当てて渡す VDS_SUB_SYSTEM_PROP 構造体のアドレスです。VDS は pwszFriendlyName および pwszIdentification メンバー文字列のメモリを割り当てます。呼び出し元は CoTaskMemFree 関数を使用してこれらの文字列を解放する必要があります。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_S_PROPERTIES_INCOMPLETE
0x00042715L
一部のプロパティは正常に取得されましたが、すべてではありません。デバイスの取り外しなど、すべてのプロパティの取得に失敗する理由は多数存在することに注意してください。
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
vtbl 4 HRESULT GetProvider(IVdsProvider** ppProvider)

IVdsSubSystem::GetProvider (vdshwprv.h) メソッドは、サブシステムを管理するプロバイダーを返します。

ppProviderIVdsProvider**outIVdsProvider インターフェースポインターのアドレスです。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
vtbl 5 HRESULT QueryControllers(IEnumVdsObject** ppEnum)

IVdsSubSystem::QueryControllers (vdshwprv.h) メソッドは、サブシステムが管理するオンラインおよびオフラインのコントローラーを列挙するオブジェクトを返します。

ppEnumIEnumVdsObject**outサブシステム内のコントローラーを コントローラーオブジェクト として列挙するために使用できる IEnumVdsObject インターフェースポインターのアドレスです。詳細については、列挙オブジェクトの操作 を参照してください。呼び出し元は、不要になったインターフェースおよび各コントローラーオブジェクトを、IUnknown::Release メソッドを呼び出して解放する必要があります。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
S_OK
コントローラーの列挙を返します。サブシステムにコントローラーがない場合、列挙は空になります。
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。

解説(Remarks)

コントローラーの数を取得するには QueryControllers メソッドを使用し、返された列挙内のコントローラーを数えます。

サブシステムにコントローラーがない場合、このメソッドは空の列挙オブジェクトを返します。

vtbl 6 HRESULT QueryLuns(IEnumVdsObject** ppEnum)

IVdsSubSystem::QueryLuns (vdshwprv.h) メソッドは、サブシステムで公開されている LUN の列挙を返します。これはハードウェアプロバイダーオブジェクトにのみ適用されます。

ppEnumIEnumVdsObject**outLUN を LUN オブジェクト として列挙するために使用できる IEnumVdsObject インターフェースポインターのアドレスです。詳細については、列挙オブジェクトの操作 を参照してください。呼び出し元は、不要になったインターフェースおよび各 LUN オブジェクトを、IUnknown::Release メソッドを呼び出して解放する必要があります。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
S_OK
サブシステム内の LUN の列挙を返します。サブシステムに LUN がない場合、列挙は空になります。
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。

解説(Remarks)

IEnumVdsObject インターフェースには、LUN マスキングに関係なく、サブシステム内のすべての LUN が含まれます。

実装者は、LUN が 0 個のサブシステムごとに空の列挙オブジェクトを返す必要があります。

このメソッドが同時に実行されている 2 つの別々のスレッドで呼び出された場合、結果が一貫しないことがあります。あるスレッドでこのメソッドを呼び出している間に、別の同時実行スレッドで IVdsLun::Delete などのメソッドが呼び出された場合、プロバイダーでアクセス違反が発生する可能性があります。このような同期の問題を最小限に抑えるため、必要に応じてこのクエリ操作を直列化するのはハードウェアプロバイダーの責任です。

vtbl 7 HRESULT QueryDrives(IEnumVdsObject** ppEnum)

IVdsSubSystem::QueryDrives (vdshwprv.h) メソッドは、サブシステム内のドライブを列挙するオブジェクトを返します。

ppEnumIEnumVdsObject**outドライブを ドライブオブジェクト として列挙するために使用できる IEnumVdsObject インターフェースポインターのアドレスです。詳細については、列挙オブジェクトの操作 を参照してください。呼び出し元は、不要になったインターフェースおよび各ドライブオブジェクトを、IUnknown::Release メソッドを呼び出して解放する必要があります。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
S_OK
ドライブの列挙を返します。サブシステムにドライブがない場合、列挙は空になります。
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。

解説(Remarks)

ハードウェアプロバイダーのスタッキングが行われている場合、サブシステム内のドライブが、別のサブシステムによって公開された LUN であることがあります。

実装者は、ドライブが 0 個のサブシステムごとに空の列挙オブジェクトを返す必要があります。

vtbl 8 HRESULT GetDrive(SHORT sBusNumber, SHORT sSlotNumber, IVdsDrive** ppDrive)

IVdsSubSystem::GetDrive (vdshwprv.h) メソッドは、指定されたドライブを返します。

sBusNumberSHORTinドライブが接続されているバスの番号です。
sSlotNumberSHORTinドライブが占有するスロットの番号です。
ppDriveIVdsDrive**outIVdsDrive インターフェースポインターのアドレスです。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。

解説(Remarks)

sSlotNumbersBusNumber はドライブを一意に識別するため、実装者はドライブを内部的に識別する手段として、それぞれに任意の(ただし一貫した)値を割り当てることができます。バス番号とスロット番号の詳細については、VDS_DRIVE_PROP 構造体の sInternalBusNumber および sSlotNumber メンバーを参照してください。

vtbl 9 HRESULT Reenumerate()

IVdsSubSystem::Reenumerate (vdshwprv.h) メソッドは、サブシステムに対してバスをスキャンさせ、新たに接続されたドライブや新たに切断されたドライブを検出するよう促します。

戻り値

このメソッドは、E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。

解説(Remarks)

ほとんどのサブシステムは、新しい接続や切断を自動的に検出します。ただし、それを行わないサブシステムに対しては、このメソッドが手動で検出を開始する手段を提供します。この操作は完了までに長い時間がかかることがあります。

このメソッドが新たに接続されたドライブを検出すると、プロバイダーはそのための新しいドライブオブジェクトを作成します。新たに切断されたドライブを検出すると、プロバイダーは最後の VDS 参照が削除されるまで古いドライブオブジェクトを保持し、その後オブジェクトを削除します。

各オブジェクトは、一意で永続的な識別子を持つ必要があります。オブジェクト ID は有効な GUID でなければなりません。実装者は、再列挙の前後の両方に存在するオブジェクトについて、このメソッドを使用して再列挙をまたいでオブジェクト ID を永続化する必要があります。

vtbl 10 HRESULT SetControllerStatus(GUID* pOnlineControllerIdArray, INT lNumberOfOnlineControllers, GUID* pOfflineControllerIdArray, INT lNumberOfOfflineControllers)

IVdsSubSystem::SetControllerStatus (vdshwprv.h) メソッドは、サブシステム内のコントローラーのステータス(オンラインまたはオフライン)を設定します。

pOnlineControllerIdArrayGUID*inコントローラー GUID の配列へのポインターです。プロバイダーはこれらのコントローラーをオンラインに設定します。この配列には、既にオンラインに設定されており、そのまま維持されるコントローラーも含まれます。
lNumberOfOnlineControllersINTinpOnlineControllersArray で指定されたコントローラーの数です。
pOfflineControllerIdArrayGUID*inコントローラー GUID の配列へのポインターです。プロバイダーはこれらのコントローラーをオフラインに設定します。この配列には、既にオフラインに設定されており、そのまま維持されるコントローラーも含まれます。
lNumberOfOfflineControllersINTinpOfflineControllersArray で指定されたコントローラーの数です。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
VDS_OBJECT_ID 定数を受け取る任意のメソッドから返される可能性があります。この戻り値は、その識別子が既存のオブジェクトを参照していないことを示します。

解説(Remarks)

このメソッドを使用すると、呼び出し元はすべてのコントローラーのステータスを一度に設定できます。単一のコントローラーのステータスを設定するには、IVdsController::SetStatus メソッドを使用します。

呼び出し元は、メソッド呼び出しごとに、コントローラーの完全なセットを pOnlineControllerIdArray または pOfflineControllerIdArray パラメーターのいずれかで渡す必要があります。E_INVALIDARG の戻り値は、サブシステム内のすべてのコントローラーがこのメソッドの引数に指定されていないことを示している場合があります。SetControllerStatus メソッドでは、サブシステム内のすべてのコントローラーが、指定された 2 つの配列のいずれかに存在している必要があります。

vtbl 11 HRESULT CreateLun(VDS_LUN_TYPE type, ULONGLONG ullSizeInBytes, GUID* pDriveIdArray, INT lNumberOfDrives, LPWSTR pwszUnmaskingList, VDS_HINTS* pHints, IVdsAsync** ppAsync)

IVdsSubSystem::CreateLun (vdshwprv.h) 関数は、論理ユニット番号 (LUN) を作成します。

typeVDS_LUN_TYPEin

LUN の種類を指定する VDS_LUN_TYPE 列挙値です。新しい LUN は automagic タイプまたは特定の RAID タイプのいずれかにできますが、両方を同時に指定することはできません。呼び出し元が automagic タイプを指定する場合は、1 つ以上の automagic ヒントを pHints パラメーターで指定する必要があります。

新しい LUN オブジェクト のインターフェースポインターは、ppAsync パラメーターで返されたインターフェースポインターに対して IVdsAsync::Wait メソッドを呼び出すことで取得できます。Wait が返す VDS_ASYNC_OUTPUT 構造体には、cl.pLunUnk メンバーに LUN オブジェクトのインターフェースポインターが格納されます。

ullSizeInBytesULONGLONGin

新しい LUN のサイズ(バイト単位)です。プロバイダーは、アライメント要件やその他の制約を満たすために、このサイズを切り上げまたは切り捨てることがあります。(ほとんどの場合、プロバイダーは切り上げを行い、まれな例外を除いて LUN が要求されたサイズ以上になるようにします。)

LUN が作成された後、呼び出し元は IVdsLun::GetProperties メソッドを呼び出すことで LUN の実際のサイズを確認できます。

pDriveIdArrayGUID*in

LUN の作成に使用する各ドライブの VDS_OBJECT_ID を格納した配列へのポインターです。このパラメーターに NULL 以外の値を指定することで、呼び出し元はプロバイダーに対し、指定された順序ですべてのドライブを使用し、1 つのドライブ上のすべてのエクステントを使い切ってから次のドライブに進み、LUN が要求されたサイズに達した時点で停止するよう要求します。

あるいは、このパラメーターに NULL を、lNumberOfDrives に 0 を渡すことで、呼び出し元はプロバイダーにドライブを自動的に選択させることができます。(NULL を渡すのは、lNumberOfDrives が 0 の場合に限ります。)

type パラメーターが automagic タイプを指定している場合、このパラメーターは NULL にする必要があります。

lNumberOfDrivesINTin

pDriveIdArray で指定されたドライブの数です。呼び出し元が 0 を渡した場合、プロバイダーがドライブを選択します。

type パラメーターが automagic タイプを指定している場合、このパラメーターは 0 にする必要があります。

LUN が作成された後、呼び出し元は IVdsLunPlex::QueryExtents メソッドを呼び出すことで、使用されているドライブを確認できます。

pwszUnmaskingListLPWSTRin

LUN へのアクセスを許可するコンピューターを指定するリストです。このリストは、セミコロン区切りで NULL 終端の、人間が読める形式の文字列です。

値が "" の場合、ストレージサブシステムに接続された HBAポートを持つすべてのコンピューターに LUN へのアクセスが許可されます。値が "" の場合、どのコンピューターにも LUN へのアクセスは許可されません。

実際には、値が "" の場合、ほとんどのハードウェアプロバイダーはローカルコンピューター上のポートとイニシエーターにのみ LUN へのアクセスを許可します。

"*" または "" を指定した場合、他の値を指定することはできません。

ファイバーチャネルネットワークおよびシリアル接続 SCSI (SAS) ネットワークの場合、各エントリは LUN がアンマスクされる各ポートの 64 ビットの World-Wide Name (WWN) であり、最上位バイトを先頭にした 16 進数文字列(16 文字)として表記されます。たとえば、WWN アドレス 01:23:45:67:89:AB:CD:EF は "0123456789ABCDEF" と表現されます。詳細については、Fibre Channel および SAS の T10 仕様を参照してください。

iSCSI ネットワークの場合、各エントリは LUN がアンマスクされる各イニシエーターの iSCSI 修飾名 (IQN) です。特定のイニシエーターに対してアンマスクされた LUN は、そのイニシエーターに関連付けられているものと見なされます。

アンマスクリストには、同じ WWN または IQN が複数回含まれることがあります。呼び出し元がリストから重複を削除したり、WWN または IQN の形式を検証したりする必要はありません。
LUN が作成された後、呼び出し元は IVdsLun::GetProperties メソッドを呼び出すことで、実際のアンマスクリストを確認できます。
pHintsVDS_HINTS*in

LUN の作成時に使用するヒントを指定する VDS_HINTS 構造体へのポインターです。プロバイダーはヒントを LUN に適用する必要はありません。VDS_HINTS 構造体で指定されるヒントは、プロバイダーへの要求にすぎません。

LUN が作成された後、呼び出し元は IVdsLun::QueryHints メソッドまたは IVdsLunPlex::QueryHints メソッドのいずれかを呼び出すことで、プロバイダーが適用したヒントを確認できます。

type パラメーターが automagic 以外のタイプを指定している場合、このパラメーターは NULL にする必要があります。

ppAsyncIVdsAsync**out

VDS が戻り時に初期化する 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 プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
VDS_OBJECT_ID 定数を受け取る任意のメソッドから返される可能性があります。この戻り値は、その識別子が既存のオブジェクトを参照していないことを示します。
VDS_E_NOT_SUPPORTED
0x80042400L
この操作、またはパラメーターの組み合わせは、このプロバイダーではサポートされていません。
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
この操作に必要な使用可能な領域が不足しています。
VDS_E_NOT_ENOUGH_DRIVE
0x80042410L
この操作を完了するために必要な空きドライブが、サブシステム内に不足しています。

解説(Remarks)

type パラメーターと pHints パラメーターに適切な値を選択することで、呼び出し元は LUN の属性を全面的に、部分的に、または最小限に指定できます。プロバイダーは、pHints パラメーターが指す VDS_HINTS 構造体で指定された automagic ヒントに基づいて、指定されていない属性を自動的に含めることができます。

VDS プロバイダーが単純なターゲット構成のみをサポートする場合、サブシステムは新たに作成された LUN オブジェクトを iSCSI ターゲットオブジェクトに自動的に関連付ける必要があります。VDS_SUB_SYSTEM_FLAG 列挙の VDS_SF_SUPPORTS_SIMPLE_TARGET_CONFIG 値を参照してください。

pwszUnmaskingList パラメーター内の WWN と IQN のリストには、重複した名前が含まれることがあります。リスト内のすべての名前を検証し、必要に応じて重複を削除するのはプロバイダーの責任です。

LUN を再利用できるように LUN のパーティション情報を削除するのは、ハードウェアプロバイダーの責任です。LUN が MBR ディスクの場合、これはディスクの先頭と末尾の 1 MB にゼロを書き込むことで行われます。GPT ディスクの場合は、ディスクの先頭と末尾の 16 KB にゼロを書き込む必要があります。

E_INVALIDARGVDS_E_NOT_SUPPORTED の戻り値には微妙な違いがあります。プロバイダーは、VDS API がクライアントに提示できるすべての機能を実装することを期待されているわけではありません。たとえば、CreateLun メソッドは、さまざまな種類の LUN(単純、ミラー、ストライプ、パリティなど)を作成する機能を公開します。ただし、プロバイダーがすべての種類の LUN をサポートする必要はありません。呼び出し元が type パラメーターに有効な VDS_LUN_TYPE 列挙値ではない値を指定した場合、プロバイダーは E_INVALIDARG を返す必要があります。呼び出し元がプロバイダーのサポートしていない有効な type 値を指定した場合、プロバイダーは VDS_E_NOT_SUPPORTED を返す必要があります。

実装者への注: このメソッドの呼び出しが非同期操作を開始しない場合であっても、プロバイダーは ppAsync パラメーターに IVdsAsync インターフェースポインターを返す必要があります。

vtbl 12 HRESULT ReplaceDrive(GUID DriveToBeReplaced, GUID ReplacementDrive)

IVdsSubSystem::ReplaceDrive (vdshwprv.h) メソッドは、サブシステム内のあるドライブを別のドライブに置き換える、または移行します。

DriveToBeReplacedGUIDin置き換えられるドライブの GUID です。
ReplacementDriveGUIDin置き換え後のドライブの GUID です。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
VDS_OBJECT_ID 定数を受け取る任意のメソッドから返される可能性があります。この戻り値は、その識別子が既存のオブジェクトを参照していないことを示します。
VDS_E_NOT_SUPPORTED
0x80042400L
この操作、またはパラメーターの組み合わせは、このプロバイダーではサポートされていません。
vtbl 13 HRESULT SetStatus(VDS_SUB_SYSTEM_STATUS status)

IVdsSubSystem::SetStatus (vdshwprv.h) メソッドは、サブシステムのステータスを指定された値に設定します。

statusVDS_SUB_SYSTEM_STATUSinVDS_SUB_SYSTEM_STATUS によって列挙される値です。呼び出し元は、指定可能な列挙値のサブセットを渡すことができます。VDS_SSS_UNKNOWN を渡すと E_INVALIDARG が返されます。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。
VDS_E_NOT_SUPPORTED
0x80042400L
この操作、またはパラメーターの組み合わせは、このプロバイダーではサポートされていません。

解説(Remarks)

実装者は、ステータスを指定された状態にするために必要なあらゆる操作を実行する責任があります。たとえば、呼び出し元がサブシステムのステータスとして VDS_SSS_OFFLINE を渡した場合、まずキャッシュをクリアする必要があるかもしれません。

vtbl 14 HRESULT QueryMaxLunCreateSize(VDS_LUN_TYPE type, GUID* pDriveIdArray, INT lNumberOfDrives, VDS_HINTS* pHints, ULONGLONG* pullMaxLunSize)

IVdsSubSystem::QueryMaxLunCreateSize (vdshwprv.h) メソッドは、指定された LUN の種類とヒントを使用して作成できる LUN の最大サイズを返します。

typeVDS_LUN_TYPEinVDS_LUN_TYPE によって列挙される LUN の種類です。
pDriveIdArrayGUID*inLUN の作成に使用する各ドライブの VDS_OBJECT_ID を格納した配列へのポインターです。プロバイダーは、指定された順序でドライブを使用しようとする必要があります。lNumberOfDrives パラメーターが 0 の場合、このパラメーターは NULL にでき、その場合プロバイダーが自動的にドライブを選択します。
lNumberOfDrivesINTinpDriveIdArray 内のエントリの数です。0 に設定できます。
pHintsVDS_HINTS*inLUN の作成に使用する VDS_HINTS 構造体へのポインターです。ヒントは常に、それより前に列挙されたパラメーターよりも優先度が低くなります。この引数は NULL 以外でなければなりません。
pullMaxLunSizeULONGLONG*outLUN の最大サイズ(バイト単位)を格納するバッファーへのポインターです。この引数は NULL 以外でなければなりません。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダー から発生する可能性があります。返される可能性のある値には、以下のものが含まれます。

リターンコード/値 説明
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、アレイに関する情報をキャッシュするプロバイダー内部でのソフトウェアまたは通信の問題を示します。キャッシュを復元するには、IVdsHwProvider::Reenumerate メソッドを実行し、続いて IVdsHwProvider::Refresh メソッドを実行してください。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステムオブジェクトは既に存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムは障害状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、先行する操作が完了するまで続行できません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
VDS_OBJECT_ID 定数を受け取る任意のメソッドから返される可能性があります。この戻り値は、その識別子が既存のオブジェクトを参照していないことを示します。
VDS_E_NOT_SUPPORTED
0x80042400L
この操作、またはパラメーターの組み合わせは、このプロバイダーではサポートされていません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IVdsSubSystem "{6FCEE2D3-6D90-4F91-80E2-A5C7CAACA9D8}"
#usecom global IVdsSubSystem IID_IVdsSubSystem "{}"
#comfunc global IVdsSubSystem_GetProperties          3 var
#comfunc global IVdsSubSystem_GetProvider            4 sptr
#comfunc global IVdsSubSystem_QueryControllers       5 sptr
#comfunc global IVdsSubSystem_QueryLuns              6 sptr
#comfunc global IVdsSubSystem_QueryDrives            7 sptr
#comfunc global IVdsSubSystem_GetDrive               8 int,int,sptr
#comfunc global IVdsSubSystem_Reenumerate            9
#comfunc global IVdsSubSystem_SetControllerStatus    10 var,int,var,int
#comfunc global IVdsSubSystem_CreateLun              11 int,int64,var,int,wstr,var,sptr
#comfunc global IVdsSubSystem_ReplaceDrive           12 int,int
#comfunc global IVdsSubSystem_SetStatus              13 int
#comfunc global IVdsSubSystem_QueryMaxLunCreateSize  14 int,var,int,var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。