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

IVdsLunMpio

COM
IID7c5fbae3-333a-48a1-a982-33c15788cde3継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IVdsLunMpio インターフェース (vdshwprv.h) は、MPIO 拡張を備えた LUN に対してクエリおよび構成操作を実行するためのメソッドを提供します。

解説(Remarks)

プロバイダーが iSCSI プロバイダーである場合、またはプロバイダーが MPIO をサポートしない場合は、IVdsLunMpio インターフェースを実装すべきではありません。iSCSI プロバイダーがこのインターフェースを実装しても、VDS は iSCSI の MPIO 処理にサービス独自のルーチンを使用するため、これを無視します。

メソッド 4

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

vtbl 3 HRESULT GetPathInfo(VDS_PATH_INFO** ppPaths, INT* plNumberOfPaths)

IVdsLunMpio::GetPathInfo (vdshwprv.h) メソッドは、LUN への各パスに対応する VDS_PATH_INFO 構造体の配列を返します。

ppPathsVDS_PATH_INFO**outVDS_PATH_INFO 構造体の配列を受け取る変数のアドレスです。呼び出し側は、配列内の各要素および配列自体を CoTaskMemFree 関数を使用して解放する必要があります。
plNumberOfPathsINT*out

ppPaths パラメーターで返される配列の要素数を受け取る変数のアドレスです。

このメソッドが返すパスの数は、 IVdsLunMpio::GetLoadBalancePolicy メソッドが返すパスの数と一致します。

戻り値

このメソッドは、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
LUN オブジェクトはもう存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
LUN は失敗状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、以前の操作が完了するまで続行できません。

解説(Remarks)

ハードウェアプロバイダーは、 VDS_PATH_INFO の hbaPortProp.id に VDS_OBJECT_ID を返す必要はなく、これを GUID_NULL に設定するだけで構いません。この ID は、この呼び出しがアプリケーションに返される際にシステムによって設定されます。サービスが対応する HBA ポートを見つけられない場合は、GUID_NULL が 使用されます。アプリケーションはこれを、その HBA ポートが VDS にとって不明であることを意味すると解釈します。

vtbl 4 HRESULT GetLoadBalancePolicy(VDS_LOADBALANCE_POLICY_ENUM* pPolicy, VDS_PATH_POLICY** ppPaths, INT* plNumberOfPaths)

IVdsLunMpio::GetLoadBalancePolicy (vdshwprv.h) メソッドは、LUN の現在のロードバランスポリシーを返します。

pPolicyVDS_LOADBALANCE_POLICY_ENUM*outロードバランスポリシーを指定する VDS_LOADBALANCE_POLICY_ENUM 列挙値を受け取る変数へのポインターです。
ppPathsVDS_PATH_POLICY**out呼び出し側から渡される VDS_PATH_POLICY 構造体の配列へのポインターです。呼び出し側は、この配列を CoTaskMemFree 関数を使用して解放する必要があります。
plNumberOfPathsINT*outppPaths パラメーターで返される、パス固有のポリシー情報構造体の数を受け取る変数へのポインターです。

戻り値

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

リターンコード/値 説明
S_OK
ロードバランスポリシーが正常に返されました。LUN にパスがない場合、配列は空になり、plNumberOfPaths パラメーターが指す値は 0 に設定され、 ppPaths パラメーターが指す値は NULL に設定されます。
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
プロバイダーのキャッシュが破損しています。これは、接続されているデバイスに関する情報をキャッシュするプロバイダー内部での ソフトウェアまたは通信の問題を示します。呼び出し側は、 IVdsHwProvider::Reenumerate メソッドに続いて IVdsHwProvider::Refresh メソッドを使用することで、キャッシュを復元できます。
VDS_E_OBJECT_DELETED
0x8004240BL
LUN オブジェクトはもう存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
LUN は失敗状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、以前の操作が完了するまで続行できません。

解説(Remarks)

このメソッドが返すパスの数は、 IVdsLunMpio::GetPathInfo メソッドが返すパスの数と一致します。

vtbl 5 HRESULT SetLoadBalancePolicy(VDS_LOADBALANCE_POLICY_ENUM policy, VDS_PATH_POLICY* pPaths, INT lNumberOfPaths)

IVdsLunMpio::SetLoadBalancePolicy (vdshwprv.h) メソッドは、LUN のロードバランスポリシーを設定します。

policyVDS_LOADBALANCE_POLICY_ENUMinVDS_LOADBALANCE_POLICY_ENUM 列挙によって列挙されるロードバランスポリシーです。
pPathsVDS_PATH_POLICY*inパス固有のポリシー情報を含む VDS_PATH_POLICY 構造体のメンバーの配列への ポインターです。
lNumberOfPathsINTinpPaths パラメーターが指す配列内の VDS_PATH_POLICY 構造体のメンバーの 数です。

戻り値

このメソッドは、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
LUN オブジェクトはもう存在しません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
LUN は失敗状態にあり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、以前の操作が完了するまで続行できません。
vtbl 6 HRESULT GetSupportedLbPolicies(DWORD* pulLbFlags)

IVdsLunMpio::GetSupportedLbPolicies (vdshwprv.h) メソッドは、ハードウェアプロバイダーがサポートするロードバランスポリシーを取得します。

pulLbFlagsDWORD*outサポートされるフラグ(VDS_PROVIDER_LBSUPPORT_FLAG 列挙によって列挙される)を受け取る ULONG のアドレスです。

戻り値

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

リターンコード 説明
S_OK
ロードバランスポリシーが正常に返されました。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IVdsLunMpio "{7C5FBAE3-333A-48A1-A982-33C15788CDE3}"
#usecom global IVdsLunMpio IID_IVdsLunMpio "{}"
#comfunc global IVdsLunMpio_GetPathInfo             3 var,var
#comfunc global IVdsLunMpio_GetLoadBalancePolicy    4 var,var,var
#comfunc global IVdsLunMpio_SetLoadBalancePolicy    5 int,var,int
#comfunc global IVdsLunMpio_GetSupportedLbPolicies  6 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。